era of “one-size-fits-all database” seems to be over. Instead of squeezing all your data into tables, we believe the future is about choosing a data store that best matches your data set and operational requirements. K. Puschke () NoSQL Mai 2010 4 / 30
era of “one-size-fits-all database” seems to be over. Instead of squeezing all your data into tables, we believe the future is about choosing a data store that best matches your data set and operational requirements. It’s a future of heterogeneous data backends, polyglot persistence and choosing Not Only SQL but sometimes also a document database, a key-value store or a graph database. K. Puschke () NoSQL Mai 2010 4 / 30
entwerfen: Normalisierung,. . . nachträglich schwierig zu ändern stark strukturiert Webanwendungen user generated content unstrukturierte Daten K. Puschke () NoSQL Mai 2010 6 / 30
beliebige Abfragen über alle Daten direkt in SQL Abfrage-Optimierung oft erforderlich Webanwendungen wiederkehrende Abfragen, nur Parameter ändern sich K. Puschke () NoSQL Mai 2010 7 / 30
glaubt, eine Menge von Operationen sei auf einen Schlag passiert: Alle Clients sehen dieselben Daten. Availability Jede Operation endet mit einer bestimmungsgemäßen Antwort: Alle Clients können auf eine Version der Daten zugreifen. Partition Tolerance Operationen werden zu Ende geführt, auch wenn die Datenbank partitioniert ist. Nur zwei der drei Eigenschaften sind gleichzeitig möglich! K. Puschke () NoSQL Mai 2010 9 / 30
column family entspricht einer Datei Beispiel: ’Posts’ oder ’Users’ beliebig viele Einträge (key + columns) key identifiziert einen Eintrag in der column family wird bei Abfragen benutzt keys sind lokal gleichnamige keys verschiedener column families sind verschieden keine ’echten’ Beziehungen column tupel (name, value, timestamp) Beispiel: {name:username, value:foo, timestamp:12345} verschiedene keys können verschiedene columns haben K. Puschke () NoSQL Mai 2010 13 / 30
eigenständige Objekte wie Kunde, Bestellung,. . . Kanten sind Beziehungen zwischen Knoten schematisiert oder schemafrei Kanten sind “first class objects” gut geeignet für komplexe Beziehungsgeflechte z.B. social network K. Puschke () NoSQL Mai 2010 16 / 30
oberhalb von Schlüssel-Wert-Paaren für sich genommen sinnvolle Informationseinheit meist Entsprechung im Real Life (Rechnung, Visitenkarte,. . . ) schemafrei keine ’echten’ Relationen K. Puschke () NoSQL Mai 2010 18 / 30
Schlüssel-Wert-Paare obligatorische Schlüssel: _id zur eindeutigen Identifikation des Dokumentes (UUID), _rev zur Versionierung des Dokumentes Dokumente können Attachments haben K. Puschke () NoSQL Mai 2010 19 / 30
auf unzuverlässiger Standardhardware Datenbanksystem (nicht nur) für Webanwendungen offene Webstandards Robuste Replikation verteiltes Arbeiten ohne Fallacies of Distributed Computing schemafrei geeignet für unstrukturierte Daten K. Puschke () NoSQL Mai 2010 20 / 30
Viewserver in JavaScript (Indizes erstellen) alternativ via Plugins auch PHP, Ruby, Python, Perl, Common Lisp, Erlang,. . . dokumentenbasierte Speicherung (JSON) Datenbank und Indizes als B-Tree gespeichert eventual consistency (in verteilten Systemen) Storage Engine: ACID optimistic locking, Multi Version Concurrency Control K. Puschke () NoSQL Mai 2010 21 / 30
diffs, keine partiellen updates Robust: was einmal auf Platte steht, wird nicht mehr angefaßt serialisierte Schreibzugriffe (pro Datenbank) Geschwindigkeit: neue Version kann angehängt werden, während alte noch gelesen wird MVCC K. Puschke () NoSQL Mai 2010 22 / 30
Werte aus Dokumenten Beispiel: Erstellungsdaten als Schlüssel, Blogposttitel als Werte können auch arrays von Werten (aus Dokumenten) sein Werte (im View) können auch aggregierte Werte (aus Dokumenten) sein sortiert nach Schlüsseln effizientes Abfragen nach bestimmten Schlüsseln oder Bereichen von Schlüsseln ’Titel aller Blogposts von Mai 2009’ zur Abfragezeit erzeugt/aktualisiert durch MapReduce K. Puschke () NoSQL Mai 2010 23 / 30
erzeugt aggregierte (Zwischen)Werte verarbeitet Ergebnisse von map oder rekursiv Zwischenergebnisse von reduce group: anwenden auf Objekte mit gleichem Schlüssel Beispiel: nicht alle Blogposts zählen, sondern Blogposts pro Tag MapReduce-Funktionen gespeichert in Dokumenten (Designdokumente) K. Puschke () NoSQL Mai 2010 24 / 30
Funktionen MapReduce-Funktionen für Views Validation: Zulässigkeit von Updates input prüfen, nur eingeloggte user,. . . serverseitige Bearbeitung vor dem Speichern eines Dokumentes Show/List: JSON in HTML, XML,. . . konvertieren K. Puschke () NoSQL Mai 2010 25 / 30
middleware Show/List-Funktionen Attachments (HTML,CSS, Javascript) direkt ausliefern Ausgelieferte Webseite greift per Javascript/HTTP auf CouchDB zu Replikation: update, fork, backup von Anwendungen K. Puschke () NoSQL Mai 2010 27 / 30
lokal beim user offline verfügbar lokale Datenhaltung = niedrige Latenz dezentral (gefilterte) Replikation mit anderen usern K. Puschke () NoSQL Mai 2010 28 / 30
bestehen kein ad hoc reporting BASE vs. ACID Zweifel an der Geschwindigkeit? CouchApps und Co: Verteilte Identitäten serverseitiger Code nötig für Authentifizierung/Autorisierung vertrauenswürdiger Server nötig K. Puschke () NoSQL Mai 2010 30 / 30