![Page 1: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/1.jpg)
Couchbase
Thomas MatznerBerater für Systemanalyse
www.tamatzner.de
Java User Group München
18. 1. 2016
![Page 2: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/2.jpg)
Überblick
• Warum Couchbase bei der Einkaufszettel-App?
• Eigenschaften von Couchbase
• Entwicklung mit Couchbase auf Server und • Entwicklung mit Couchbase auf Server und Android
• Designüberlegungen
![Page 3: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/3.jpg)
Die Einkaufszettel-App
http://shopping-list.eu
![Page 4: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/4.jpg)
Der synchronisierte Einkaufszettel
![Page 5: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/5.jpg)
Eigenschaften von Couchbase
Key-valuestore
Documentdatabase
schemafrei
horizontal skalierbar
ausfallsicher
mobil + Server
div. Synchronisa
tionen
![Page 6: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/6.jpg)
Couchbase: Node und Bucket
Node
Bucket A
Bucket B
Node
Client
Teilmenge der URLs verbindet
mit allen Bucket-Replikaten
Bucket BBucket A
Bucket CNode
Bucket A
Bucket D
![Page 7: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/7.jpg)
Couchbase vs. relationale DB: Statik
relationale DB Couchbase Produkt Couchbase Anwendung
Datenbank Bucket (Empfehlung)
Tabelle alle Dokumente mit demselben Wert für den JSON-Namen (z.B.) type
Spalte JSON-NameSpalte JSON-Name
Datenwert beliebig; jedoch für viele Features JSON nötig
Datensatz Document
Primärschlüssel Key (wird nicht von Couchbase generiert)
Generierung, z.B.• lfd. Nr. je type• UUID
Fremdschlüssel Fremdschlüssel
Rechte je Benutzer bis auf Feldebene
je Bucket: ein schreibender, ein lesender Benutzer
alle sonstigen Rechte
![Page 8: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/8.jpg)
Couchbase: Client-Zugriff
RESTAPI
Java .NET C Node.js PHP Python Ruby
Couchbase Server
![Page 9: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/9.jpg)
Couchbase vs. relationale DB: Operationen
relationale DB Couchbase Produkt Couchbase Anwendung
CRUD-Operationen CRUD-Operationen• Key ist nicht veränderbar• Update wirkt stets auf gesamtes Dokument
Generieren von Keys
Zugriff über ViewZugriff über Fremdschlüssel oder sonstige Eigenschaften
View
SQL-Abfragen N1QL
Transaktionen (soweit mehrere Objekte in einem Dokument enthalten, entbehrlich)
selbst zu realisieren
![Page 10: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/10.jpg)
Couchbase für Android
Couchbase Server Couchbase Android
Bucket Database
Dokumentenstruktur und -inhalt identisch
View• Logik in JavaScript geschrieben• Zugriff über Konsole, REST oder API
View• Logik in Java geschrieben• Zugriff nur über API• Zugriff über Konsole, REST oder API • Zugriff nur über API
CRUD-Operationen auch, aber mit leicht unterschiedlicher Syntax und Semantik
N1QL fehlt
![Page 11: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/11.jpg)
Verbinden mit einem Bucket
![Page 12: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/12.jpg)
Beispiel-Dokumente
![Page 13: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/13.jpg)
CRUD
![Page 14: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/14.jpg)
Definition einer View
Filter
Hierarch. Index
Wert (Dokumenten-Key kommt immer)
![Page 15: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/15.jpg)
Views: Features
• Definition via JavaScript, prinzipiell beliebige Logik
• Abfrage– Wertebereiche
– Sortierung
– Paginierung– Paginierung
• Reduce– count, sum, min, max, Summe der Quadrate
– selbstdefinierbar
• Emit: (Teile der) Dokumenteninhalte im Index speicherbar
![Page 16: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/16.jpg)
Zugriff über diese View
![Page 17: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/17.jpg)
Android-Synchronisation via Channels
Client jim Client jack Client god
doc1jimdoc3public
doc2jackdoc3
publicdoc5[jim, jack]
doc5[jim, jack]
doc1jim
doc2jack
doc3public
doc4chris
doc5[jim, jack]
Server
doc1jim
doc2jack
doc3public
doc4chris
doc5[jim, jack]
jack] jack]
Channels:jim,public
Channels:jack,public
Channels:all
![Page 18: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/18.jpg)
Android-Synchronisation: config
lokale Administration
Bucket für Sync: noli me tangere!
![Page 19: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/19.jpg)
Android-Synchronisation aktivieren
![Page 20: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/20.jpg)
Designüberlegungen: Schemafreiheit
• Schemadefinition technisch unnötig• Aber sinnvolle Verarbeitung setzt bekannte
Datenstrukturen voraus• Also Schemadefinition logisch nötig• Man kann sich auf nichts verlassen:
– Vorhandensein des type-Attributs– Vorhandensein des type-Attributs– Vorhandensein sonstiger Attribute– zulässige Werte je Attribut– viele Admin-Operationen auf der Konsole
• Also in Summe eher mehr Aufwand:– überall defensiv programmieren– Admin-Funktionen selber schreiben, z.B. Einfügen und
Initialisieren von Attributen
![Page 21: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/21.jpg)
Designüberlegungen: Keys
• Couchbase
– vergibt keine Keys,
– bietet counter mit atomarer Inkrementierung an
• Möglichkeit: selbst erzeugte Zahlenfolgen• Möglichkeit: selbst erzeugte Zahlenfolgen
– über alle Dokumenttypen hinweg
– oder je Dokumenttyp (Key: doctype-currNr)
• Bei synchronisierten Geräten Eindeutigkeit kaum garantierbar � UUID
![Page 22: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/22.jpg)
Designüberlegungen: emit bei Views
• Empfehlung im Lehrbuch: auf keinen Fall ganzes Objekt zurückgeben
• Erfahrungsberichte zeigen, dass dies wohl nicht allgemein gilt
• Jeder emit-Wert führt zu• Jeder emit-Wert führt zu– zusätzlicher Speicherung des Werts– zusätzlichem Update, wenn Wert sich ändert
• Also umso eher einsetzen, als– Platzbedarf des Werts gering– seltene Updates auf dem Attribut– Attribut wird häufig benötigt, wenn über die View
zugegriffen wird
![Page 23: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/23.jpg)
Mechanismen für Synchronisation zwischen Mobil- und Server-App
![Page 24: JUG 2016-01-18 public · Document database schemafrei horizontal skalierbar ausfallsicher mobil + Server div. Synchronisa tionen. Couchbase: Nodeund Bucket Node BucketA Bucket B Node](https://reader035.vdocuments.net/reader035/viewer/2022070618/5e209a776f29c15dc936304e/html5/thumbnails/24.jpg)
Alternativ empfohlene Mechanismen