jug 2016-01-18 public · document database schemafrei horizontal skalierbar ausfallsicher mobil +...

24
Couchbase Thomas Matzner Berater für Systemanalyse www.tamatzner.de Java User Group München 18. 1. 2016

Upload: others

Post on 04-Nov-2019

5 views

Category:

Documents


0 download

TRANSCRIPT

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

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

Ü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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Alternativ empfohlene Mechanismen