nosql cgn: riak (01/2012)
DESCRIPTION
Ein Big-Picture zu Riak am 4.1.2012 auf der NoSQL UG Cologne (nosql-cologne.org)TRANSCRIPT
![Page 1: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/1.jpg)
An 10,000’ overviewof a Dynamo-style
KV-Store
Sebastian Cohnen@tisba / tisba.de
![Page 2: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/2.jpg)
About Me
• Freier Entwickler
❤ Ruby/Rails & node.js
❤ Performance & Scalability Engineering
❤ Distributed Load Testing
❤ CouchDB, Redis & Riak
und ebenfalls interessiert an Erlang, AMQP, ...
![Page 3: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/3.jpg)
What is Riak?
Pronounced “REE-ack”
A Database
A Data Store
A key/value store
A “NoSQL” database
Schemaless and data-type agnostic
Quelle: http://wiki.basho.com/What-is-Riak%3F.html
![Page 4: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/4.jpg)
What (else) is Riak?
As distributed as you want and need it to be
Scalable
Written (primarily) in Erlang
Used by Fortune 100 Companies
Used by startups
Not the best fit for every project and application
Quelle: http://wiki.basho.com/What-is-Riak%3F.html
![Page 5: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/5.jpg)
...in short?
verteilter KV-Store, horizontal skalierbar
der Grad an C, A und P sind wählbar
austauschbare Storage Backends (pro Bucket)
Zugriff via HTTP/REST oder Protocol Buffers
agnostisch zum Inhalt
![Page 6: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/6.jpg)
Basic Concepts
![Page 7: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/7.jpg)
ClusteR
Riak besteht aus einem Cluster von Nodes
ein Cluster bildet einen Keyspace / KeyRing
jede Riak Node besteht aus einer Anzahl von VNodes (virtual node)
Consistant Hashing bestimmt die Positionen von VNodes und Keys im Ring
![Page 8: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/8.jpg)
http://wiki.basho.com/What-is-Riak%3F.html
![Page 9: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/9.jpg)
Node
Jede Node in Riak sind identisch, es gibt keine Rollen
Jede Node in Riak darf ausfallen
Eine Node wird zum Koordinator, wenn ein Client eine Anfrage an ihn richtet
Es können jederzeit Nodes hinzugefügt oder entfernt werden
![Page 10: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/10.jpg)
Bucket
ein Bucket ist eine logische Komponente, die wie ein Namespace zu sehen ist
ein Bucket kann Eigenschaften haben, z.B. Konfiguration für ein Backend und Default-Werte für Quoren
Der Name eines Buckets gehört mit zum Key eines Objektes in Riak
![Page 11: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/11.jpg)
Conflicts
Last-Write-Wins: basiert auf Timestamps und sorgt für ein “fire-and-forget” Verhalten (last_write_wins)
Vector Clocks, wobei Riak alle Siblings zur Verfügung stellt (allow_mult)
Mittels Read Repair kann Riak beim Lesen von Objekten Konsitenz unter den Nodes erzeugen
![Page 12: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/12.jpg)
what else?
Ring Informationen werden mit einem Gossip Protocol im Cluster verteilt (Ring Status, Pending Changes, Partition Ownership, ...)
Hinted Handoff wird benutzt, um Daten von einer “Vertreter-Node” zu einer ehemals nicht verfügbaren Node zu übertragen
Pre- und Post-Commit Hooks
Links & Link-walking
Luwak
![Page 13: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/13.jpg)
Tuning CAP in Riak
![Page 14: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/14.jpg)
Tuning Riak
Riak erlaubt es Konsistenz, Verfügbarkeit und Partitionstolleranz zu einem gewissen Grad zu kontrollieren
Diese Einstellungen können auf Bucket oder Key/Objekt-Ebene stattfinden
Unterschiedliche Daten können so mit unterschiedlichen Anforderungen im selben Cluster gespeichert werden
![Page 15: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/15.jpg)
Quoren
Konfigurierbar pro Bucket oder pro Objekt
N - Anzahl der Replikas
W - Write Quorum
R - Read Quorum
![Page 16: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/16.jpg)
Example
geringer R-Wert, geringere Read-Latency, weniger Konsistenz
geringer W-Wert, geringere Write-Latency
R + W > N, starke Konsistenz (z.B. 2 + 3 > 4 oder 4 + 3 > 5)
...
![Page 17: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/17.jpg)
More QUorums
DW - Durable Write Quorum
Mindestanzahl persistenter Schreiboperationen
PW & PR - Primary Replica Write/Read Quorum
Mindestanzahl von verfügbaren primären Replikas
![Page 18: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/18.jpg)
Data Storage
![Page 19: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/19.jpg)
Data Storage
Die Keys von Objekten werden zusammen mit ihrem Bucketnamen gehasht, um ihre Position im Ring ausfindig zu machen und zustände Nodes zu ermitteln
Wichtig: Buckets sind nur logische Einheiten und bilden einen Namensraum
![Page 20: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/20.jpg)
Store an Object [1]
1. Cluster mit 8 Nodes, 64 Partitionen
2. POST oder PUT an NODE1/buckets/my_bucket[/my_key] mit Parameter: N=3, W=2, DW=1
3. Node1 wird zum Koordinator und ermittelt, wer für die drei Replikas zuständig ist, leitet den Schreibrequest weiter und wartet auf Antwort
![Page 21: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/21.jpg)
Store Object [2]
4. Node 3, 5 und 8 erhält den Request
Node 3 meldet Annahme des Requests an Node 1
Node 5 meldet erfolgreiche Persistierung an Node 1
5. Node 1 antwortet dem Client den Erfolg der Operation
6. Node 8 beendet ebenfalls erfolgreich die Operation
![Page 22: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/22.jpg)
Store an Object
POST oder PUT an /buckets/my_bucket[/my_key]
Header
Content-Type
X-Riak-Vclock
X-Riak-Meta-*
X-Riak-Index-*
Link
![Page 23: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/23.jpg)
Fetch an Object
GET NODE1/buckets/my_bucket/my_key mit Parameter: R=2
Node 1 ermittelt zuständige Nodes und leitet die Anfrage weiter
Wenn mindestens zwei Nodes eine konsistente Antwort geben, ist die Leseoperation erfolgreich
![Page 24: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/24.jpg)
Querying Data
![Page 25: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/25.jpg)
Querying Data
Es gibt prinzipiell drei Möglichkeiten
MapReduce
Riak Serach
Riak 2i
![Page 26: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/26.jpg)
Map Reduce
Map Reduce
Key Filter (z.B. begins_with, between, Transformationen, ...)
Abfragen in Erlang oder Javascript, vordefiniert oder zur Requestzeit
gut für Datenanalyse
![Page 27: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/27.jpg)
Riak Search
Apache Lucene/Solr like Volltextsuche
Programmierbare Tokenizer, ...
Ergebnis sind Keys, die z.B. als Input für MR genutzt werden können
relativ Ressourcen intensiv
Index wird im Cluster gespeichert (Token-basiert)
![Page 28: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/28.jpg)
Riak 2i
2i = Secondary Index
simpler, Nutzer-definierter lexikalischer Index
Ergebniss ist ebenfalls als Input für MR verwendbar
weniger Ressourcen intensiv, aber keine FTS
Index-Informationen werden zusammen mit dem Objekt im Cluster gespeichert
![Page 29: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/29.jpg)
Resources
Infos zu Riak / Dokumentation: http://wiki.basho.com/
Riak Handbook, Mathias Meyer (eBook)
gute Videos, Vorträge, usw: http://basho.com/resources
![Page 30: NoSQL CGN: Riak (01/2012)](https://reader038.vdocuments.site/reader038/viewer/2022102813/54814f88b4af9f5c758b46a2/html5/thumbnails/30.jpg)
Thanks! Q & A?
?Sebastian Cohnen
@tisba