Thomas Matzner Berater für Systemanalyse www.tamatzner.de Couchbase Java User Group München 18. 1. 2016
Überblick Warum Couchbase bei der Einkaufszettel- App? Eigenschaften von Couchbase Entwicklung mit Couchbase auf Server und Android Designüberlegungen
Die Einkaufszettel-App http://shopping-list.eu
Der synchronisierte Einkaufszettel
Eigenschaften von Couchbase Key-value store Document database schemafrei mobil + Server div. Synchronisa tionen horizontal skalierbar ausfallsicher
Couchbase: Nodeund Bucket Node Bucket A Bucket B Node Bucket A Client Teilmenge der URLs verbindet mit allen Bucket- Replikaten Bucket C Node Bucket A Bucket D
Couchbase vs. relationale DB: Statik relationale DB Couchbase Produkt Couchbase Anwendung Datenbank Tabelle Spalte Datenwert Datensatz Primärschlüssel Fremdschlüssel Rechteje Benutzer bis auf Feldebene Bucket(Empfehlung) beliebig;jedoch für viele Features JSON nötig Document Key (wird nicht von Couchbase generiert) Fremdschlüssel je Bucket: ein schreibender, ein lesender Benutzer alledokumente mit demselben Wert für den JSON-Namen (z.b.) type JSON-Name Generierung, z.b. lfd. Nr. je type UUID alle sonstigen Rechte
Couchbase: Client-Zugriff REST API Java.NET C Node.js PHP Python Ruby Couchbase Server
Couchbase vs. relationale DB: Operationen relationale DB Couchbase Produkt Couchbase Anwendung CRUD-Operationen Zugriff über Fremdschlüssel oder sonstige Eigenschaften SQL-Abfragen Transaktionen CRUD-Operationen Key ist nicht veränderbar Update wirkt stets auf gesamtes Dokument View N1QL (soweit mehrere Objekte in einem Dokument enthalten, entbehrlich) Generieren von Keys selbst zu realisieren
Couchbase für Android Couchbase Server Bucket Dokumentenstruktur und-inhalt View Logik in JavaScript geschrieben Zugriff über Konsole, REST oder API CRUD-Operationen N1QL Couchbase Android Database identisch View Logik in Java geschrieben Zugriff nur über API auch, aber mit leicht unterschiedlicher Syntax und Semantik fehlt
Verbinden mit einem Bucket
Beispiel-Dokumente
CRUD
Definition einer View Filter Hierarch. Index Wert (Dokumenten-Key kommt immer)
Views: Features Definition via JavaScript, prinzipiell beliebige Logik Abfrage Wertebereiche Sortierung Paginierung Reduce count, sum, min, max, Summe der Quadrate selbstdefinierbar Emit: (Teile der) Dokumenteninhalte im Index speicherbar
Zugriff über diese View
Android-Synchronisation via Channels Client jim Client jack Client god doc1 jim doc3 public doc5 [jim, jack] Channels: jim, public doc1 jim doc2 jack doc3 public doc5 [jim, jack] doc2 jack public Server doc3 public Channels: jack, doc1 jim doc2 jack doc4 chris doc5 [jim, jack] doc3 public doc4 chris doc5 [jim, jack] Channels: all
Android-Synchronisation: config lokale Administration Bucket für Sync: noli me tangere!
Android-Synchronisation aktivieren
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 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
Designüberlegungen: Keys Couchbase vergibt keine Keys, bietet counter mit atomarer Inkrementierung an Möglichkeit: selbst erzeugte Zahlenfolgen über alle Dokumenttypen hinweg oder je Dokumenttyp (Key: doctype-currnr) Bei synchronisierten Geräten Eindeutigkeit kaum garantierbar UUID
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 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
Mechanismen für Synchronisation zwischen Mobil-und Server-App
Alternativ empfohlene Mechanismen