Not Only SQL - warum nicht immer SQL einsetzen? 3 Protokolle & APIs 4 Datenmodelle 5 CouchDB 6 Herausforderungen und Kritik 7 K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 4 / 79
Regeln (1985) [4, 5] Vollständigkeit im Sinne der relationalen Algebra in der Praxis und im Kontext des Vortrags zeilenbasierte Speicherung in Tabellen SQL als Sprache z.B. MySQL, Postgres, Oracle,. . . K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 5 / 79
Systeme (Sybase IQ) dokumentenorientierte Systeme (Lotus Notes) kaum Verbreitung im Vergleich zu relationalen Systemen frühe Formen von NoSQL? K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 6 / 79
. 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 (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 9 / 79
nicht immer SQL einsetzen? Web vs. RDBMS Verteilte Systeme 3 Protokolle & APIs 4 Datenmodelle 5 CouchDB 6 Herausforderungen und Kritik 7 Praxisbeispiel K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 11 / 79
beliebige Abfragen über alle Daten direkt in SQL Webanwendungen wiederkehrende Abfragen, nur Parameter ändern sich K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 13 / 79
about 6 petabytes of data spread across thousands of machines Jeff Dean, Google I/O conference, Mai 2008 (Shankland [14]) früher: nur Großrechner; Anfrageoptimierung statt Rechenleistung heute: preiswerte Hardware ergänzen (auch via cloud) Hochverfügbarkeit RDBMS: Verteiltes Arbeiten nachträglich rudimentär zugefügt K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 14 / 79
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! siehe Brewer [2] und Lynch & Gilbert [10] K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 15 / 79
DB-Clients Clients in beliebiger Sprache leicht zu programmieren vorhandene Webtechnologien nutzbar Load Balancer, Proxy, HTTPS via SSL-fähigen Proxy. . . Vor- und Nachteile von HTTP K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 19 / 79
zwischen heterogenen Anwendungen geeignet für verteilte Systeme Stateless Communication jeder Request in sich geschlossen Anwendungsinformationen nur im Client keine serverseitigen Sitzungen o.ä. K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 20 / 79
. spaltenorientierte Speicherung mehr Performanz für bestimmte Abfragen z.B. Aggregieren innerhalb einer Spalte flexibleres Schema Spalten dynamisch keine ’echten’ Beziehungen K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 25 / 79
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} K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 26 / 79
eigenständige Objekte wie Kunde, Bestellung,. . . Kanten sind Beziehungen zwischen Knoten schematisiert oder schemafrei Kanten sind “first class objects” häufige Operation: Traversierung gut geeignet für komplexe Beziehungsgeflechte z.B. social network K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 30 / 79
String sein (Objekte,. . . möglich) Abfrage per Schlüssel schemafrei keine ’echten’ Relationen K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 31 / 79
oberhalb von Schlüssel-Wert-Paaren für sich genommen sinnvolle Informationseinheit meist Entsprechung im Real Life (Rechnung, Visitenkarte,. . . ) üblicherweise kein leeren Felder schemafrei keine ’echten’ Relationen K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 32 / 79
wird z.T. direkt vom Browser verstanden wenig Datentypen diese werden von nahezu allen Sprachen verstanden 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 (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 33 / 79
auf unzuverlässiger Standardhardware Datenbanksystem (nicht nur) für Webanwendungen offene Webstandards Robuste Replikation schemafrei geeignet für unstrukturierte Daten Philosophie: entspanntes Arbeiten keine Entscheidungen, die nicht zu revidieren sind K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 37 / 79
[16] Erlang funktional, fehlertolerant, concurrency optimiert 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 (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 38 / 79
eines Dokumentes wird an Datenbankdatei angehängt Robust: was einmal auf Platte steht, wird nicht mehr angefaßt Geschwindigkeit: neue Version kann angehängt werden, während alte noch gelesen wird K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 40 / 79
mit unveränderter Versionsnummer _rev Server prüft, ob diese _rev identisch ist mit der aktuell gespeicherten wenn ja: Dokument wird gespeichert (Server vergibt neue _rev) wenn nein: Fehlermeldung keine Versionskontrolle es werden nicht alle Versionen aufbewahrt K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 41 / 79
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 (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 42 / 79
reduce 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 Map-Reduce-Funktionen gespeichert in Dokumenten (Designdokumente) K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 46 / 79
Map-Reduce-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 (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 52 / 79
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 (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 56 / 79
lokal beim user offline verfügbar lokale Datenhaltung = niedrige Latenz dezentral (gefilterte) Replikation mit anderen usern K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 57 / 79
bestehen kein ad hoc reporting BASE vs. ACID Zuverlässigkeit z.B. bei Finanztransaktionen Zweifel an der Geschwindigkeit Stonebraker et al. [15], siehe auch Lai [9] und Pavlo et al. [12] CouchApps und Co: Verteilte Identitäten serverseitiger Code nötig für Authentifizierung/Autorisierung vertrauenswürdiger Server nötig K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 60 / 79
Posts mit zugehörigen Kommentaren zusammengesetzter Schlüssel mit _id und 0 bzw. 1 für Post bzw. Kommentar map-Funktion function(doc) { if (doc.type == "post") { emit([doc._id, 0], doc); } else if (doc.type == "comment") { emit([doc.post_id, 1], doc); } } K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 69 / 79
Posts mit zugehörigen Kommentaren zusammengesetzter Schlüssel mit _id und 0 bzw. 1 für Post bzw. Kommentar K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 70 / 79
Kommentare durch geeigneten View Vorteil: alles beisammen, beim Löschen des Posts werden alle Kommentare mit gelöscht,. . . Nachteil: jeder neue Kommentar ist ein Update des Posts; bei vielen Kommentaren Konflikte wahrscheinlich Alternative: Kommentare in eigenen Dokumenten Gemeinsame Ausgabe eines Posts und seiner Kommetare durch geeigeneten View K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 71 / 79
CouchDB: The definitive Guide. O’Reilly, 2010. URL http://books.couchdb.org/relax/. Eric A. Brewer. Towards robust distributed systems. In Principles of Distributed Computing (Keynote). 2000. URL http://www.cs.berkeley.edu/~brewer/ cs262b-2004/PODC-keynote.pdf. Edgar F. Codd. A relational model of data for large shared data banks. Communications of the ACM, 13(6):377–387, 1970. doi:10.1145/362384.362685. K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 73 / 79
the rules? ComputerWorld, Oktober 1985. Edgar F. Codd. Is your dbms really relational? ComputerWorld, Oktober 1985. Jeffrey Dean and Sanjay Ghemawat. Mapreduce: Simplified data processing on large clusters. In Sixth Symposium on Operating System Design and Implementation. 2004. URL http://labs.google.com/papers/mapreduce.html. K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 74 / 79
In Proceedings of the 7th International Conference on Very Large Databases, pages 144–154. 1981. Theo Haerder and Andreas Reuter. Principles of transaction-oriented database recovery. ACM Computing Surveys, 15:287–317, 1983. Eric Lai. Researchers: Databases still beat google’s mapreduce. Computer World, April 2009. URL http://www.computerworld.com/s/article/ 9131526/Researchers_Databases_still_beat_Google_ s_MapReduce. K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 75 / 79
Abadi, David J. Dewitt, Samuel Madden, and Michael Stonebraker. A comparison of approaches to large-scale data analysis. In SIGMOD ’09: Proceedings of the 2009 ACM SIGMOD International Conference. ACM, June 2009. URL http://database.cs.brown.edu/sigmod09/ benchmarks-sigmod09.pdf. Dan Pritchett. Base: An acid alternative. ACM Queue, 6(3):48–55, 2008. URL http://queue.acm.org/detail.cfm?id=1394128. K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 77 / 79
cnet news, Mai 2008. URL http://news.cnet.com/8301-10784_3-9955184-7.html. Michael Stonebraker, Daniel Abadi, David J. DeWitt, Sam Madden, Erik Paulson, Andrew Pavlo, and Alexander Rasin. Mapreduce and parallel dbmss: Friends or foes? Communications of the ACM, 53(1):64–71, 2010. ISSN 0001-0782. doi:http://doi.acm.org/10.1145/1629175.1629197. URL http://database.cs.brown.edu/papers/ stonebraker-cacm2010.pdf. K. Puschke (Vortrag HAW Hamburg) NoSQL 3. Juni 2010 78 / 79