NoSQL und CouchDB

32
NoSQL und CouchDB Dr. Kerstin Puschke Mai 2010 K. Puschke () NoSQL Mai 2010 1 / 30

Transcript of NoSQL und CouchDB

Page 1: NoSQL und CouchDB

NoSQL und CouchDB

Dr. Kerstin Puschke

Mai 2010

K. Puschke () NoSQL Mai 2010 1 / 30

Page 2: NoSQL und CouchDB

Lizenz

LizenzDieser Text steht unter einer Creative CommonsAttribution 3.0 Germany Lizenz, siehehttp://creativecommons.org/licenses/by/3.0/de/

K. Puschke () NoSQL Mai 2010 2 / 30

Page 3: NoSQL und CouchDB

NoSQLBegriffsklärung

2009 als Sammelbegriff für bereits länger existierende SystemeetabliertNot only SQLkeine eindeutige Definitionnicht-relationale Datenspeicher

K. Puschke () NoSQL Mai 2010 3 / 30

Page 4: NoSQL und CouchDB

NoSQLBegriffsklärung

no:sql(eu) conference. http://www.nosqleu.com, April 2010

. . . era of “one-size-fits-all database” seems to be over.

Instead of squeezing all your data into tables, we believe thefuture is about choosing a data store that best matches yourdata set and operational requirements. It’s a future ofheterogeneous data backends, polyglot persistence andchoosing Not Only SQL but sometimes also a documentdatabase, a key-value store or a graph database.

K. Puschke () NoSQL Mai 2010 4 / 30

Page 5: NoSQL und CouchDB

NoSQLBegriffsklärung

no:sql(eu) conference. http://www.nosqleu.com, April 2010

. . . era of “one-size-fits-all database” seems to be over.Instead of squeezing all your data into tables, we believe thefuture is about choosing a data store that best matches yourdata set and operational requirements.

It’s a future ofheterogeneous data backends, polyglot persistence andchoosing Not Only SQL but sometimes also a documentdatabase, a key-value store or a graph database.

K. Puschke () NoSQL Mai 2010 4 / 30

Page 6: NoSQL und CouchDB

NoSQLBegriffsklärung

no:sql(eu) conference. http://www.nosqleu.com, April 2010

. . . era of “one-size-fits-all database” seems to be over.Instead of squeezing all your data into tables, we believe thefuture is about choosing a data store that best matches yourdata set and operational requirements. It’s a future ofheterogeneous data backends, polyglot persistence andchoosing Not Only SQL but sometimes also a documentdatabase, a key-value store or a graph database.

K. Puschke () NoSQL Mai 2010 4 / 30

Page 7: NoSQL und CouchDB

NoSQL-Systeme im Einsatz

CouchDB (BBC, Ubuntu One)BigTable (GoogleMaps, GoogleReader, YouTube. . . )Dynamo (Amazon Webservices, Amazon)Cassandra (Twitter, Facebook,. . . )Project Voldemort (linkedin)redis (github, The Guardian)MongoDB (sourceforge, github, New York Times). . .

K. Puschke () NoSQL Mai 2010 5 / 30

Page 8: NoSQL und CouchDB

(Un)strukturierte DatenWeb vs. RDBMS

RDBMSDatenbankschema entscheidend

aufwändig zu entwerfen: Normalisierung,. . .nachträglich schwierig zu ändern

stark strukturiert

Webanwendungenuser generated content

unstrukturierte Daten

K. Puschke () NoSQL Mai 2010 6 / 30

Page 9: NoSQL und CouchDB

AbfragenWeb vs. RDBMS

RDBMdynamische Abfragen (ad hoc reporting)beliebige Abfragen über alle Daten direkt in SQLAbfrage-Optimierung oft erforderlich

Webanwendungenwiederkehrende Abfragen, nur Parameter ändern sich

K. Puschke () NoSQL Mai 2010 7 / 30

Page 10: NoSQL und CouchDB

Verteiltes Arbeiten

SkalierbarkeitHochverfügbarkeitRDBMS: Verteiltes Arbeiten nachträglich rudimentär zugefügtProblem: Fallacies of Distributed Computing

K. Puschke () NoSQL Mai 2010 8 / 30

Page 11: NoSQL und CouchDB

CAP TheoremConsistency, Availability, Partition Tolerance

TheoremConsistencyDer Client glaubt, eine Menge von Operationen sei auf einenSchlag passiert: Alle Clients sehen dieselben Daten.AvailabilityJede Operation endet mit einer bestimmungsgemäßen Antwort:Alle Clients können auf eine Version der Daten zugreifen.Partition ToleranceOperationen werden zu Ende geführt, auch wenn die Datenbankpartitioniert ist.

Nur zwei der drei Eigenschaften sind gleichzeitig möglich!

K. Puschke () NoSQL Mai 2010 9 / 30

Page 12: NoSQL und CouchDB

CAP TheoremAnwendung

Availability & Consistency: Paxos, BigTable . . .Consistency & Partition Tolerance: viele RDBMS, . . .

ACID (atomicity, consistency, isolation, durability)Availability & Partition Tolerance: CouchDB, MongoDB,Cassandra, Dynamo,. . .

BASE (basically available, soft-state, eventual consistency)

K. Puschke () NoSQL Mai 2010 10 / 30

Page 13: NoSQL und CouchDB

Relationales Modell

striktes Schemazeilenorientierte Speicherung’echte’ Beziehungen zwischen Datenforeign key constraints, joins. . .

K. Puschke () NoSQL Mai 2010 11 / 30

Page 14: NoSQL und CouchDB

Spaltenorientierung

Cassandra, BigTable,. . .spaltenorientierte Speicherungmehr Performanz für bestimmte Abfragenz.B. Aggregieren innerhalb einer Spalteflexibleres Schemakeine ’echten’ Beziehungen

K. Puschke () NoSQL Mai 2010 12 / 30

Page 15: NoSQL und CouchDB

Cassandra’s DatenmodellVereinfachte Darstellung

keyspaceentspricht der Anwendung; Beispiel: ’Blog’

column familyentspricht einer DateiBeispiel: ’Posts’ oder ’Users’beliebig viele Einträge (key + columns)

keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine ’echten’ Beziehungen

columntupel (name, value, timestamp)Beispiel: {name:username, value:foo, timestamp:12345}verschiedene keys können verschiedene columns haben

K. Puschke () NoSQL Mai 2010 13 / 30

Page 16: NoSQL und CouchDB

Objektorientierung

Persistenzschicht für Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java, C++,. . . ) oder DBMS-eigeneSprachedb4o, JADE, Databeans,. . .

K. Puschke () NoSQL Mai 2010 14 / 30

Page 17: NoSQL und CouchDB

Graphen

Graphen im Sinne der MathematikKnoten und Kantenmodellieren z.B. Netzwerk, Leitungssystem,. . .Spezialfall: Baumz.B. Produktkategorien (Eltern-Kind-Beziehung)

K. Puschke () NoSQL Mai 2010 15 / 30

Page 18: NoSQL und CouchDB

Graphendatenbanken

InfoGrid, neo4j, . . .Daten als Graphen

Knoteneigenständige Objekte wie Kunde, Bestellung,. . .Kanten sind Beziehungen zwischen Knoten

schematisiert oder schemafreiKanten sind “first class objects”gut geeignet für komplexe Beziehungsgeflechtez.B. social network

K. Puschke () NoSQL Mai 2010 16 / 30

Page 19: NoSQL und CouchDB

Schlüssel-Wert-Paare

Riak, Tokyo Cabinet,. . .Schlüssel-Wert-PaareAbfrage per Schlüsselschemafreikeine ’echten’ Relationen

K. Puschke () NoSQL Mai 2010 17 / 30

Page 20: NoSQL und CouchDB

Dokumentenorientierung

CouchDB, MongoDB, Riak, XML-Datenbanken. . .Dokument: weitere Abstraktionsebene oberhalb vonSchlüssel-Wert-Paarenfür sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung, Visitenkarte,. . . )schemafreikeine ’echten’ Relationen

K. Puschke () NoSQL Mai 2010 18 / 30

Page 21: NoSQL und CouchDB

CouchDB’s Datenmodell

Format: JavaScript Object Notation (JSON)Bestandteil von JavaScriptSchlüssel-Wert-Paareobligatorische 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

Page 22: NoSQL und CouchDB

Was ist CouchDB?

Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlässiger StandardhardwareDatenbanksystem (nicht nur) für Webanwendungenoffene WebstandardsRobuste Replikationverteiltes Arbeiten ohne Fallacies of Distributed Computingschemafreigeeignet für unstrukturierte Daten

K. Puschke () NoSQL Mai 2010 20 / 30

Page 23: NoSQL und CouchDB

ImplementierungÜberblick

HTTP/REST (Webserver enthalten)Erlangfunktional, fehlertolerant, concurrency optimiertViewserver in JavaScript (Indizes erstellen)alternativ via Plugins auch PHP, Ruby, Python, Perl, CommonLisp, Erlang,. . .dokumentenbasierte Speicherung (JSON)Datenbank und Indizes als B-Tree gespeicherteventual consistency (in verteilten Systemen)Storage Engine: ACIDoptimistic locking, Multi Version Concurrency Control

K. Puschke () NoSQL Mai 2010 21 / 30

Page 24: NoSQL und CouchDB

Updates

neue Version eines Dokumentes wird an Datenbankdateiangehängtkeine diffs, keine partiellen updatesRobust: was einmal auf Platte steht, wird nicht mehr angefaßtserialisierte Schreibzugriffe (pro Datenbank)Geschwindigkeit: neue Version kann angehängt werden, währendalte noch gelesen wirdMVCC

K. Puschke () NoSQL Mai 2010 22 / 30

Page 25: NoSQL und CouchDB

View

(secondary) Index (Schlüssel-Wert-Paare)Schlüssel und Werte des Views sind Werte aus Dokumenten

Beispiel: Erstellungsdaten als Schlüssel, Blogposttitel als Wertekönnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) können auch aggregierte Werte (aus Dokumenten)sein

sortiert nach Schlüsselneffizientes Abfragen nach bestimmten Schlüsseln oder Bereichenvon Schlüsseln’Titel aller Blogposts von Mai 2009’zur Abfragezeit erzeugt/aktualisiert durch MapReduce

K. Puschke () NoSQL Mai 2010 23 / 30

Page 26: NoSQL und CouchDB

MapReduceView erzeugen

map verarbeitet Dokumenteerzeugt Schlüssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce

group: anwenden auf Objekte mit gleichem SchlüsselBeispiel: nicht alle Blogposts zählen, sondern Blogposts pro TagMapReduce-Funktionen gespeichert in Dokumenten(Designdokumente)

K. Puschke () NoSQL Mai 2010 24 / 30

Page 27: NoSQL und CouchDB

Design Documents

CouchDB-Dokumente_id beginnt mit _designenthalten Anwendungscode, sprich Funktionen

MapReduce-Funktionen für ViewsValidation: Zulässigkeit von Updatesinput prüfen, nur eingeloggte user,. . .serverseitige Bearbeitung vor dem Speichern eines DokumentesShow/List: JSON in HTML, XML,. . . konvertieren

K. Puschke () NoSQL Mai 2010 25 / 30

Page 28: NoSQL und CouchDB

Webanwendungen mit CouchDBKlassische Webanwendungen

Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus

K. Puschke () NoSQL Mai 2010 26 / 30

Page 29: NoSQL und CouchDB

Webanwendungen mit CouchDBCouchApps

leben vollständig in der Datenbankkeine middlewareShow/List-FunktionenAttachments (HTML,CSS, Javascript) direkt ausliefernAusgelieferte Webseite greift per Javascript/HTTP auf CouchDBzuReplikation: update, fork, backup von Anwendungen

K. Puschke () NoSQL Mai 2010 27 / 30

Page 30: NoSQL und CouchDB

Dezentrale offline WebanwendungEin Usecase für CouchApps

Daten und Anwendung lokal beim useroffline verfügbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern

K. Puschke () NoSQL Mai 2010 28 / 30

Page 31: NoSQL und CouchDB

Desktop-Anwendungen

Beispiel: Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks, Adreßbuch,. . . in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren

K. Puschke () NoSQL Mai 2010 29 / 30

Page 32: NoSQL und CouchDB

Herausforderungen und Kritik

HTML/JS, HTTP,. . .vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs. ACIDZweifel an der Geschwindigkeit?CouchApps und Co: Verteilte Identitäten

serverseitiger Code nötig für Authentifizierung/Autorisierungvertrauenswürdiger Server nötig

K. Puschke () NoSQL Mai 2010 30 / 30