tech talk cassandra
DESCRIPTION
Dieser Vortrag führt in Apache Cassandra ein, eine NoSQL-Datenbank, die vor allem für große Datenmenge und hohe Skalierung geeignet ist. Der Vortrag stammt aus einem adesso Tech Talk.TRANSCRIPT
![Page 1: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/1.jpg)
20.09.2011
NoSQL Deep Dive mit Cassandra Kai Spichale
1
![Page 2: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/2.jpg)
NoSQL
20.09.2011 Tech Talk2
![Page 3: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/3.jpg)
NoSQL
20.09.2011 Tech Talk3
Graph Databases
Wide Column Stores /Column Families Document Stores
Key Value / Tupe Stores
![Page 4: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/4.jpg)
Apache Cassandra - eine Definition
“Apache Cassandra is an open source, distributed, decentralized, elastically scalable, highly available, fault-tolerant, tuneably consistent, column-oriented database that bases its distribution design on Amazon’s Dynamo and its data model on Google’s Bigtable. Created at Facebook, it is now used at some of the most popular sites on the Web.”
Hewitt, Eben: Cassandra – The Definite Guide, S. 14
20.09.2011 Tech Talk4
![Page 5: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/5.jpg)
Agenda
► Key Features
► Projektgeschichte
► Verteilung mit DHT
► Konsistenz
► Replikatverteilung
► Datenmodell
► Client API
► Fazit
20.09.2011 Tech Talk5
![Page 6: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/6.jpg)
Key Features
► Verteilte, horizontal skalierbare Datenbank
► Symmetrisches Design
► Hochverfügbar
► Riesige Datenmenge (Petabytes)
► Flexible Partitionierung, Replikatverteilung
► Eventually consistent: ACID ist nicht immer notwendig
► Flexible Trade-offs zwischen Konsistenz und Performance
► Automated Provisioning (Seek Nodes)
► Erweiterbare Multi-Datacenter Unterstützung
► Schemaloses, strukturiertes Datenmodell
20.09.2011 Tech Talk6
![Page 7: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/7.jpg)
Key Features
► Verteilte, horizontal skalierbare Datenbank
► Symmetrisches Design
► Hochverfügbar
► Riesige Datenmenge (Petabytes)
► Flexible Partitionierung, Replikatverteilung
► Eventually consistent: ACID ist nicht immer notwendig
► Flexible Trade-offs zwischen Konsistenz und Performance
► Automated Provisioning (Seek Nodes)
► Erweiterbare Multi-Datacenter Unterstützung
► Schemaloses, strukturiertes Datenmodell
20.09.2011 Tech Talk7
![Page 8: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/8.jpg)
Projektgeschichte
► Ursprunglich von facebook entwickelt
► Projektbeginn 2007, seit 2008 Open Source
► Verwendung für Inbox Search:> Benutzer können ihre Nachrichten nach Absendernamen oder anderen
Schlüsselwörtern durchsuchen
> In-house System zum Indexieren (invertierte Indizes) und Speichern der Nachrichten
► Anforderung:
> kostengünstig (Commodity Server)
> inkrementell skalierbar
20.09.2011 Tech Talk8
![Page 9: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/9.jpg)
Verteilung mit DHT
► Ein Distributed Hash Table (DHT) ist ein Klasse von dezentralen verteilten Systemen
► O(1) Knoten-Lookup
► P2P- Netzwerk
► Daten werden möglichst gleichmäßig auf die Knoten verteilt
20.09.2011 Tech Talk9
► Shared-nothing Architecture
► Symmetrisches Design:
> Kein Single Point ofFailure
> Kein zentraler Controller
> Keine Master/Slaves
► Clients können sich mit beliebigen Knoten verbinden
![Page 10: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/10.jpg)
Verteilung mit DHT
20.09.2011 Tech Talk
Hosts Initial TokenA 0B 4C 8D 12E 16F 20G 24H 28
Partitioner( RowKey ) = Token
10
![Page 11: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/11.jpg)
Verteilung mit DHT
20.09.2011 Tech Talk
Hosts Initial TokenA 0B 4C 8D 12E 16F 20G 24H 28
[0,3]
[4,7]
[8,11]
[12,15][16,19]
[20,23]
[24,27]
[28,31]
Partitioner( RowKey ) = Token
11
![Page 12: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/12.jpg)
Verteilung mit DHT
20.09.2011 Tech Talk
Hosts Initial TokenA 0B 4C 8D 12E 16F 20G 24H 28
[0,3]
[4,7]
[8,11]
[12,15][16,19]
[20,23]
[24,27]
[28,31]
Beispiel:Partitioner( „Cassandra“ ) = 7
Partitioner( RowKey ) = Token
12
![Page 13: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/13.jpg)
Hosts Initial TokenA 0B 4C 8D 12E 16F 20G 24H 28
Verteilung mit DHT
20.09.2011 Tech Talk13
Hosts Initial TokenA 0B 21267647932558653966460912964485513215C 42535295865117307932921825928971026430D 63802943797675961899382738893456539645E 85070591730234615865843651857942052860F 106338239662793269832304564822427566075G 127605887595351923798765477786913079290H 148873535527910577765226390751398592505
Tokens sind Integer von 0 bis 2^127
i * (2^127 / N ) für i = 0 .. N-1
z.B. Random Partitioner mit MD5
![Page 14: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/14.jpg)
Verteilung mit DHT
► Verteilung der Daten im Cluster durch Partitioner
► Random Partitioner ( Consistent Hashing )> Basiert auf MD5
> Implizites Load Balancing
► Order Preserving Partitioner> Geeignet für Range Slices
> Evtl. ungleiche Verteilung der Daten im Cluster
► Weitere Implementierungen von org.apache.cassandra.dht.IPartitioner
20.09.2011 Tech Talk14
![Page 15: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/15.jpg)
CAP-Theorem
► CAP:
> Strong Consistency
> High Availability
> Partition Tolerance
► CAP-Theorem nach Eric Brewer besagt, dass ein verteiltes System nicht gleichzeitig alle drei Anforderungen erfüllen kann, sondern höchstens zwei.
► Cassandra ist ein AP-System
20.09.2011 Tech Talk15
![Page 16: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/16.jpg)
CAP-Theorem
► CA-System:
> Jeder lebende Knoten, der Requests empfängt, sendet Responses
> Netzwerkpartitionen werden nicht berücksichtigt (Implementierungsdetail)
► CP-System:
> Kann bei Netzwerkpartitionen betrieben werden
> Knoten können absichtlich deaktiviert werden, um Konsistenz sicherzustellen
> Verfügbarkeit wird gegen Konsistenz eingetauscht
► AP-System:> Verfügbar und tolerant gegenüber Partitionen
> Konsistenz kann nicht garantiert werden
20.09.2011 Tech Talk16
![Page 17: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/17.jpg)
CAP-Theorem
► B und C erhalten Request:
► CA:
> B kann antworten
> C wird blockiert
► CP:> C kann antworten
> Lock von A wird aufgehoben
► AP:
> B und C können antworten
> Eventuell inkonsistente Daten
20.09.2011 Tech Talk17
![Page 18: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/18.jpg)
Konsistenz
► Vertikale vs. horizontale Skalierung
► ACID vs. BASE (basically available, soft state, eventually consistent)
► Eventually consistency> Synch nach Berlin, asynch nach New York
> Kompromiss zugunsten Verfügbarkeit und Performance
► Cassandra unterstützt verschiedene Konsistenzstufen
20.09.2011 Tech Talk18
![Page 19: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/19.jpg)
Konsistenz
► Verschiedene Konsistenzstufen für Lese- und Schreiboperationen
► Wenn W + R > N, dann (fast) stark konsistent
20.09.2011 Tech Talk19
Level Write Consistency
ZERO Asynchron, ohne Rückmeldung
ANY 1 Knoten (inkl. HintedHandoff Empfänger)
ONE 1 Knoten
QUORUM (N/2)+1 Knoten R + W > N
LOCAL_QUORUM Quorum im lokalen DC
EACH_QUORUM Quorum in allen DCs
ALL N Knoten
Level Read Consistency
ONE 1 Knoten
QUORUM (N/2)+1 Knoten R + W > N
LOCAL_QUORUM Quorum im lokalen DC
EACH_QUORUM Quorum in allen DCs
ALL N Knoten
![Page 20: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/20.jpg)
Konsistenz
► Hinted Handoff: Bei Knotenausfall wird auf einem anderen Knoten ein Hinthinterlassen, sodass die Schreiboperation nachgeholt werden kann
► Read Repair: Synchronisation aller Replikate (evtl. im Background)
► Anti Entropy: Vergleich der Replikate und Aktualisierung
20.09.2011 Tech Talk20
![Page 21: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/21.jpg)
Konsistenzprobleme beim Löschen
► Eventually consistent: Client liest möglicherweise ein Replikat, das noch nicht alle Updates erhalten hat (bei niedriger Konsistenzstufe)
► Gleiches Problem beim Löschen
► Lösung:> Nicht sofort Löschen, sondern mit Tombstones markieren
> Wenn GCGraceSeconds < Tombstone Alter, dann Löschen
► Konsequenz: Knoten dürfen nicht länger als GCGraceSeconds down sein!
20.09.2011 Tech Talk21
![Page 22: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/22.jpg)
Replikationsverteilung
► Variabler Replikationsfaktor bestimmt die Anzahl der Kopien im Cluster
► Strategien zur Verteilung der Replikate im Cluster:
> Simple Strategy
> Old Network Topology Strategy
> Network Topology Strategy
20.09.2011 Tech Talk22
![Page 23: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/23.jpg)
Replikationsverteilung
► Simple Strategy (Rack-unaware Strategy): Replikate werden auf nachfolgende Knoten im Ring verteilt
► Datacenters und Racks werden nicht beachtet
► Standardstrategie
20.09.2011 Tech Talk23
Data Center 1
Rack 1 Rack 2
Node 1 Node 5
Node 2 Node 6
Node 3 Node 7
Node 4 Node 8
![Page 24: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/24.jpg)
Replikationsverteilung
► Old Network Topology Strategy (Rack-aware Strategy): Heuristik zur Verteilung der Replikate auf verschiedenen Racks und Datacenters
► Rack-aware Snitch ist notwendig
► Höhere Verfügbarkeit
► Höhere Latenz
20.09.2011 Tech Talk24
Data Center 1 Data Center 2
Rack 1 Rack 2 Rack 3 Rack 4
Node 1 Node 5 Node 1 Node 5
Node 2 Node 6 Node 2 Node 6
Node 3 Node 7 Node 3 Node 7
Node 4 Node 8 Node 4 Node 8
![Page 25: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/25.jpg)
Replikationsverteilung
► Network Topology Strategy (Datacenter Shard Strategy): Für jedes DC kann pro Keyspace die Anzahl der Replikate angegeben werden
► Verteilung auf verschiedene Racks innerhalb eines DCs (wenn möglich)
► Rack-ware Snitch ist notwendig
20.09.2011 Tech Talk25
Konfiguration:DC 1 hat 2 ReplikateDC 2 hat 2 Replikate
Data Center 1 Data Center 2
Rack 1 Rack 2 Rack 3 Rack 4
Node 1 Node 5 Node 1 Node 5
Node 2 Node 6 Node 2 Node 6
Node 3 Node 7 Node 3 Node 7
Node 4 Node 8 Node 4 Node 8
![Page 26: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/26.jpg)
Datenmodell
► Strukturiertes Datenmodell ohne Schema
► Mehr als nur Key-Value-Modell
► Besteht aus den Konzepten:Cluster
Keyspace
Column Family
Row
SuperColumn
Column
20.09.2011 Tech Talk26
![Page 27: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/27.jpg)
Datenmodell
► Cluster > Keyspace > Column Family > Row > Column
20.09.2011 Tech Talk27
Columnbyte[] namebyte[] valuelong timestamp
![Page 28: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/28.jpg)
Datenmodell
► Cluster > Keyspace > Column Family > Row
20.09.2011 Tech Talk28
Row
Key Key Key
Column Column Columnbyte[] name byte[] name byte[] namebyte[] value byte[] value byte[] valuelong timestamp long timestamp long timestamp
![Page 29: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/29.jpg)
Datenmodell
► Cluster > Keyspace > Column Family
20.09.2011 Tech Talk29
Column Family
Key Row
Key Key Key
Column Column Column
Key Row
Key Key
Column Column
Key Row
Key Key Key Key
Column Column Column Column
![Page 30: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/30.jpg)
Datenmodell
20.09.2011 Tech Talk30
• Cluster > Keyspace Keyspace
Column Family
Key RowColumn Column
Key RowColumn
Key RowColumn Column Column
Column Family
RowColumn Column Column
RowColumn Column
![Page 31: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/31.jpg)
Datenmodell
► Cluster > Keyspace > Column Family > Row > SuperColumn
20.09.2011 Tech Talk31
SuperColumn
Key Columnbyte[] namebyte[] valuelong timestamp
Key Columnbyte[] namebyte[] valuelong timestamp
![Page 32: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/32.jpg)
Datenmodell
► Cluster > Keyspace > Column Family > Row
20.09.2011 Tech Talk32
Row
Key Key
SuperColumn SuperColumn
Key Column Key Columnbyte[] name byte[] namebyte[] value byte[] valuelong timestamp long timestamp
Key Columnbyte[] namebyte[] valuelong timestamp
![Page 33: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/33.jpg)
Datenmodell
► Cluster > Keyspace
20.09.2011 Tech Talk33
Keyspace
Column Family
Key RowColumn Column
Key RowColumn
Key RowColumn Column Column
Column Family
RowSuperColumn SuperColumnColumn Column Column Column
RowSuperColumnColumn Column Column
![Page 34: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/34.jpg)
Datenmodellbeispiel
20.09.2011 Tech Talk34
Columnname = "firstname"value = "Kai"
Columnname = "lastname"value = "Spichale"
![Page 35: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/35.jpg)
Datenmodellbeispiel
20.09.2011 Tech Talk35
SuperColumn
"firstname" Columnname = "firstname"value = "Kai"
"lastname" Columnname = "lastname"value = "Spichale"
![Page 36: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/36.jpg)
Datenmodellbeispiel
20.09.2011 Tech Talk36
Row
"user_name"
SuperColumn
"firstname" Columnname = "firstname"value = "Kai"
"lastname" Columnname = "lastname"value = "Spichale"
![Page 37: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/37.jpg)
Datenmodellbeispiel
20.09.2011 Tech Talk37
"user" Column Family
"42" Row
"user_name"
SuperColumn
"firstname" Columnname = "firstname"value = "Kai"
"lastname" Columnname = "lastname"value = "Spichale"
![Page 38: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/38.jpg)
Datenmodellbeispiel – flexible Struktur
20.09.2011 Tech Talk38
"user_name"
SuperColumn
"firstname" Column "firstname6" Columnname = "firstname" name = "firstname"value = "Karl" value = "Jacob"
"firstname2" Column "firstname7" Columnname = "firstname" name = "firstname"value = "Theodor" value = "Philipp"
"firstname3" Column "firstname8" Columnname = "firstname" name = "firstname"value = "Maria" value = "Franz"
"firstname4" Column "firstname9" Columnname = "firstname" name = "firstname"value = "Nikolaus" value = "Joseph"
"firstname5" Column "firstname10" Columnname = "firstname" name = "firstname"value = "Johann" value = "Sylvester "
![Page 39: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/39.jpg)
Cassandra vs. MySQL (50GB Daten)
► MySQL> 300ms write
> 350ms read
► Cassandra
> 0.12ms write
> 15ms read
Quelle: http://www.odbms.org/download/cassandra.pdf, Zugriff 7.4.2011
20.09.2011 Tech Talk39
![Page 40: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/40.jpg)
Schreibvorgang
20.09.2011 Tech Talk40
![Page 41: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/41.jpg)
Schreibvorgang
► Client schickt Write Request zu beliebigen Knoten im Cluster
► Write Request wird sequentiell ins lokale Disk Commit Log geschrieben
► Partitioner bestimmt verantwortliche Knoten
► Verantwortliche Knoten erhalten Write Request und schreiben in lokales Logdatei
► Memtables (Write-back Cache) werden aktualisiert
► Flush auf Festplatte in SSTable und SSTableIndex
► Eigenschaften:
> Kein Lesen, keine Suche, keine Locks
> Sequentieller Festplattenzugriff
> Atomare Vorgang für eine ColumnFamily
> „Always Writable“ (d.h. akzeptiert auch Write Requests bei partiellen Failure)
20.09.2011 Tech Talk41
![Page 42: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/42.jpg)
Lesevorgang
20.09.2011 Tech Talk42
![Page 43: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/43.jpg)
Lesevorgang
► Client schickt Read Request zu beliebigen Knoten im Cluster
► Partitioner bestimmt verantwortliche Knoten
► Warten auf R Antworten
► Warten auf N – R Antworten für Read Repair im Hintergrund
► Eigenschaften:> Liest mehrere SSTables
> Langsamer als Schreiben
> Skaliert sehr gut
20.09.2011 Tech Talk43
![Page 44: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/44.jpg)
Client API
► „The API is horrible and it produces pointless verbose code in addition tobeing utterly confusing.“
► „The RCP interface is baroque, and too tightly coupled to Cassandra‘sinternals.“
20.09.2011 Tech Talk44
![Page 45: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/45.jpg)
Client API
► Cassandra:
> Thrift-Interface bietet für viele Sprachen (Python, Ruby, Java, PHP) die API
> RPC framework
> CQL ab Version 0.8 (SQL-like)
► Aber besser sind high-level Client Libraries:> Java: Pelops, Hector
> Python: Pycassa
> Ruby: Cassandra
► Object Mapper:
> Kundera: JPA 1.0 Implementierung für Cassandra
> Hector : nicht JPA-compliant, kein Entity Relationship Support
20.09.2011 Tech Talk45
![Page 46: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/46.jpg)
Hector
► High-level Cassandra Client
► Open Source: https://github.com/rantav/hector
► Queries:> Ein Request bezieht sich auf einen Keyspace und eine ColumnFamily
> Einfache Requests mit ColumnQuery / SuperColumnQuery
> *SliceQuery zur Abfrage von Columns, SuperColumns und Sub-Columns
– Column Range
– Row Range
► Sekundärer Index:
> Abfragen mit IndexedSlicesQuery
20.09.2011 Tech Talk46
![Page 47: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/47.jpg)
Hector – ein Beispiel
Cluster myCluster = HFactory.getOrCreateCluster("MyCluster",
"192.168.178.37:9160");
Keyspace keyspace = HFactory.createKeyspace("MyKeyspace",
myCluster);
StringSerializer se = StringSerializer.get();
20.09.2011 Tech Talk47
![Page 48: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/48.jpg)
Hector – ein Beispiel
List<HColumn<String, String>> subColumns = new
ArrayList<HColumn<String, String>>();
subColumns.add(HFactory.createColumn("firstname", "Kai", se, se));
subColumns.add(HFactory.createColumn("lastname", "Spichale", se, se));
HSuperColumn<String, String, String> superColumn = HFactory
.createSuperColumn("UserName", subColumns, se, se, se);
Mutator<String> mutator = HFactory.createMutator(keyspace, se);
mutator.insert("rowKey1", "User", superColumn);
20.09.2011 Tech Talk48
![Page 49: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/49.jpg)
Hector – ein Beispiel
SuperColumnQuery<String, String, String, String> query = HFactory
.createSuperColumnQuery(keyspace, se, se, se, se);
QueryResult<HSuperColumn<String, String, String>> queryResult = query
.setColumnFamily("User").setKey("rowKey1")
.setSuperName("UserName");
queryResult.execute();
HSuperColumn<String, String, String> hSuperColumn = queryResult.get();
20.09.2011 Tech Talk49
![Page 50: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/50.jpg)
Einschränkungen
► Keine Joins
► Kein ORDERED BY, GROUP BY, LIKE
► Kein kaskadierendes Löschen
► Keine referenzielle Integrität
► Konsequenzen für Datenmodellentwurf> Bereits beim Entwurf des Datenmodells müssen alle Abfragen identifiziert
sein
> Zusätzliche Abfragepfade können schwer hinzugefügt werden
> Denormalisierung, sodass jeder Request mit einer oder mehreren Zeilen einer ColumnFamily beantwortet werden kann
> Client macht Joins
20.09.2011 Tech Talk50
![Page 51: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/51.jpg)
Column Comparators
► Bytes
► UTF 8
► TimeUUID
► Long
► LexicalUUID
► Composite (third-party)
20.09.2011 Tech Talk51
![Page 52: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/52.jpg)
Fazit
► Hochskalierbare Datenbank, kann riesige Datenmengen speichern
► Einfache Administration
► Gewöhnungsbedürftiges Modell
► Eventually Consistent
► Keine Standard-Client-Library
► API-Veränderungen
► Upgrade
20.09.2011 Tech Talk52
![Page 53: Tech Talk Cassandra](https://reader034.vdocuments.mx/reader034/viewer/2022052601/558c5f69d8b42a080c8b4714/html5/thumbnails/53.jpg)
Vielen Dank für Ihre Aufmerksamkeit!
Fragen?
20.09.2011 Tech Talk53