View
5.350
Download
4
Category
Preview:
DESCRIPTION
Gastvortrag an der HAW Hamburg
Citation preview
Not only SQLCouchDB und andere NoSQL-Datenbanken
Dr Kerstin Puschke
Vortrag an der HAW Hamburg
3 Juni 2010
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 1 79
Lizenz
LizenzDieser Text steht unter einer Creative CommonsAttribution 30 Germany Lizenz siehehttpcreativecommonsorglicensesby30de
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 2 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 3 79
Uumlbersicht
1 EinfuumlhrungRelationale DatenbanksystemeWeitere DatenbanksystemeNoSQL
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 4 79
Relationale Datenbanksysteme
in der TheorieCodd (1970) [3]
Coddrsquos 12 Regeln (1985) [4 5]
Vollstaumlndigkeit im Sinne der relationalen Algebrain der Praxis und im Kontext des Vortrags
zeilenbasierte Speicherung in TabellenSQL als SprachezB MySQL Postgres Oracle
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 5 79
Weitere Datenbanksysteme
Objektdatenbanken (db4o)XMLSpeicherung als Schluumlssel-Wert-Paare (BerkeleyDB)spaltenorientierte Systeme (Sybase IQ)dokumentenorientierte Systeme (Lotus Notes)kaum Verbreitung im Vergleich zu relationalen Systemenfruumlhe Formen von NoSQL
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 6 79
NoSQLBegriffsklaumlrung
2009 als Sammelbegriff fuumlr bereits laumlnger existierende SystemeetabliertNot only SQLkeine eindeutige Definitionnicht-relationale Datenspeicher
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 7 79
NoSQLWas NoSQL manchmal (nicht) ist
Verteiltes_ArbeitenSkalierbarkeit Schemafreiheit
Geschwindigkeit Open_Source Open_StandardsGroszlige_Datenmengen
Aufgabe_der_ACID-Prinzipien Einfache_BenutzungFehlertoleranz Concurrency Durchsatz
Zuverlaumlssigkeit
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 8 79
NoSQLBegriffsklaumlrung
Ankuumlndigung nosql(eu) conference April 2010 [11]
era of ldquoone-size-fits-all databaserdquo seems to be overInstead of squeezing all your data into tables we believe thefuture is about choosing a data store that best matches yourdata set and operational requirements Itrsquos 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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 9 79
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 10 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzenWeb vs RDBMSVerteilte Systeme
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 11 79
(Un)strukturierte DatenWeb vs RDBMS
RDBMSDatenbankschema entscheidend
aufwaumlndig zu entwerfen Normalisierung nachtraumlglich schwierig zu aumlndern
stark strukturiert
Webanwendungenuser generated content
unstrukturierte Daten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 12 79
AbfragenWeb vs RDBMS
RDBMSdynamische Abfragen (ad hoc reporting)beliebige Abfragen uumlber alle Daten direkt in SQL
Webanwendungenwiederkehrende Abfragen nur Parameter aumlndern sich
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 13 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Lizenz
LizenzDieser Text steht unter einer Creative CommonsAttribution 30 Germany Lizenz siehehttpcreativecommonsorglicensesby30de
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 2 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 3 79
Uumlbersicht
1 EinfuumlhrungRelationale DatenbanksystemeWeitere DatenbanksystemeNoSQL
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 4 79
Relationale Datenbanksysteme
in der TheorieCodd (1970) [3]
Coddrsquos 12 Regeln (1985) [4 5]
Vollstaumlndigkeit im Sinne der relationalen Algebrain der Praxis und im Kontext des Vortrags
zeilenbasierte Speicherung in TabellenSQL als SprachezB MySQL Postgres Oracle
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 5 79
Weitere Datenbanksysteme
Objektdatenbanken (db4o)XMLSpeicherung als Schluumlssel-Wert-Paare (BerkeleyDB)spaltenorientierte Systeme (Sybase IQ)dokumentenorientierte Systeme (Lotus Notes)kaum Verbreitung im Vergleich zu relationalen Systemenfruumlhe Formen von NoSQL
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 6 79
NoSQLBegriffsklaumlrung
2009 als Sammelbegriff fuumlr bereits laumlnger existierende SystemeetabliertNot only SQLkeine eindeutige Definitionnicht-relationale Datenspeicher
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 7 79
NoSQLWas NoSQL manchmal (nicht) ist
Verteiltes_ArbeitenSkalierbarkeit Schemafreiheit
Geschwindigkeit Open_Source Open_StandardsGroszlige_Datenmengen
Aufgabe_der_ACID-Prinzipien Einfache_BenutzungFehlertoleranz Concurrency Durchsatz
Zuverlaumlssigkeit
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 8 79
NoSQLBegriffsklaumlrung
Ankuumlndigung nosql(eu) conference April 2010 [11]
era of ldquoone-size-fits-all databaserdquo seems to be overInstead of squeezing all your data into tables we believe thefuture is about choosing a data store that best matches yourdata set and operational requirements Itrsquos 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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 9 79
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 10 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzenWeb vs RDBMSVerteilte Systeme
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 11 79
(Un)strukturierte DatenWeb vs RDBMS
RDBMSDatenbankschema entscheidend
aufwaumlndig zu entwerfen Normalisierung nachtraumlglich schwierig zu aumlndern
stark strukturiert
Webanwendungenuser generated content
unstrukturierte Daten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 12 79
AbfragenWeb vs RDBMS
RDBMSdynamische Abfragen (ad hoc reporting)beliebige Abfragen uumlber alle Daten direkt in SQL
Webanwendungenwiederkehrende Abfragen nur Parameter aumlndern sich
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 13 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 3 79
Uumlbersicht
1 EinfuumlhrungRelationale DatenbanksystemeWeitere DatenbanksystemeNoSQL
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 4 79
Relationale Datenbanksysteme
in der TheorieCodd (1970) [3]
Coddrsquos 12 Regeln (1985) [4 5]
Vollstaumlndigkeit im Sinne der relationalen Algebrain der Praxis und im Kontext des Vortrags
zeilenbasierte Speicherung in TabellenSQL als SprachezB MySQL Postgres Oracle
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 5 79
Weitere Datenbanksysteme
Objektdatenbanken (db4o)XMLSpeicherung als Schluumlssel-Wert-Paare (BerkeleyDB)spaltenorientierte Systeme (Sybase IQ)dokumentenorientierte Systeme (Lotus Notes)kaum Verbreitung im Vergleich zu relationalen Systemenfruumlhe Formen von NoSQL
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 6 79
NoSQLBegriffsklaumlrung
2009 als Sammelbegriff fuumlr bereits laumlnger existierende SystemeetabliertNot only SQLkeine eindeutige Definitionnicht-relationale Datenspeicher
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 7 79
NoSQLWas NoSQL manchmal (nicht) ist
Verteiltes_ArbeitenSkalierbarkeit Schemafreiheit
Geschwindigkeit Open_Source Open_StandardsGroszlige_Datenmengen
Aufgabe_der_ACID-Prinzipien Einfache_BenutzungFehlertoleranz Concurrency Durchsatz
Zuverlaumlssigkeit
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 8 79
NoSQLBegriffsklaumlrung
Ankuumlndigung nosql(eu) conference April 2010 [11]
era of ldquoone-size-fits-all databaserdquo seems to be overInstead of squeezing all your data into tables we believe thefuture is about choosing a data store that best matches yourdata set and operational requirements Itrsquos 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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 9 79
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 10 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzenWeb vs RDBMSVerteilte Systeme
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 11 79
(Un)strukturierte DatenWeb vs RDBMS
RDBMSDatenbankschema entscheidend
aufwaumlndig zu entwerfen Normalisierung nachtraumlglich schwierig zu aumlndern
stark strukturiert
Webanwendungenuser generated content
unstrukturierte Daten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 12 79
AbfragenWeb vs RDBMS
RDBMSdynamische Abfragen (ad hoc reporting)beliebige Abfragen uumlber alle Daten direkt in SQL
Webanwendungenwiederkehrende Abfragen nur Parameter aumlndern sich
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 13 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Uumlbersicht
1 EinfuumlhrungRelationale DatenbanksystemeWeitere DatenbanksystemeNoSQL
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 4 79
Relationale Datenbanksysteme
in der TheorieCodd (1970) [3]
Coddrsquos 12 Regeln (1985) [4 5]
Vollstaumlndigkeit im Sinne der relationalen Algebrain der Praxis und im Kontext des Vortrags
zeilenbasierte Speicherung in TabellenSQL als SprachezB MySQL Postgres Oracle
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 5 79
Weitere Datenbanksysteme
Objektdatenbanken (db4o)XMLSpeicherung als Schluumlssel-Wert-Paare (BerkeleyDB)spaltenorientierte Systeme (Sybase IQ)dokumentenorientierte Systeme (Lotus Notes)kaum Verbreitung im Vergleich zu relationalen Systemenfruumlhe Formen von NoSQL
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 6 79
NoSQLBegriffsklaumlrung
2009 als Sammelbegriff fuumlr bereits laumlnger existierende SystemeetabliertNot only SQLkeine eindeutige Definitionnicht-relationale Datenspeicher
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 7 79
NoSQLWas NoSQL manchmal (nicht) ist
Verteiltes_ArbeitenSkalierbarkeit Schemafreiheit
Geschwindigkeit Open_Source Open_StandardsGroszlige_Datenmengen
Aufgabe_der_ACID-Prinzipien Einfache_BenutzungFehlertoleranz Concurrency Durchsatz
Zuverlaumlssigkeit
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 8 79
NoSQLBegriffsklaumlrung
Ankuumlndigung nosql(eu) conference April 2010 [11]
era of ldquoone-size-fits-all databaserdquo seems to be overInstead of squeezing all your data into tables we believe thefuture is about choosing a data store that best matches yourdata set and operational requirements Itrsquos 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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 9 79
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 10 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzenWeb vs RDBMSVerteilte Systeme
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 11 79
(Un)strukturierte DatenWeb vs RDBMS
RDBMSDatenbankschema entscheidend
aufwaumlndig zu entwerfen Normalisierung nachtraumlglich schwierig zu aumlndern
stark strukturiert
Webanwendungenuser generated content
unstrukturierte Daten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 12 79
AbfragenWeb vs RDBMS
RDBMSdynamische Abfragen (ad hoc reporting)beliebige Abfragen uumlber alle Daten direkt in SQL
Webanwendungenwiederkehrende Abfragen nur Parameter aumlndern sich
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 13 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Relationale Datenbanksysteme
in der TheorieCodd (1970) [3]
Coddrsquos 12 Regeln (1985) [4 5]
Vollstaumlndigkeit im Sinne der relationalen Algebrain der Praxis und im Kontext des Vortrags
zeilenbasierte Speicherung in TabellenSQL als SprachezB MySQL Postgres Oracle
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 5 79
Weitere Datenbanksysteme
Objektdatenbanken (db4o)XMLSpeicherung als Schluumlssel-Wert-Paare (BerkeleyDB)spaltenorientierte Systeme (Sybase IQ)dokumentenorientierte Systeme (Lotus Notes)kaum Verbreitung im Vergleich zu relationalen Systemenfruumlhe Formen von NoSQL
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 6 79
NoSQLBegriffsklaumlrung
2009 als Sammelbegriff fuumlr bereits laumlnger existierende SystemeetabliertNot only SQLkeine eindeutige Definitionnicht-relationale Datenspeicher
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 7 79
NoSQLWas NoSQL manchmal (nicht) ist
Verteiltes_ArbeitenSkalierbarkeit Schemafreiheit
Geschwindigkeit Open_Source Open_StandardsGroszlige_Datenmengen
Aufgabe_der_ACID-Prinzipien Einfache_BenutzungFehlertoleranz Concurrency Durchsatz
Zuverlaumlssigkeit
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 8 79
NoSQLBegriffsklaumlrung
Ankuumlndigung nosql(eu) conference April 2010 [11]
era of ldquoone-size-fits-all databaserdquo seems to be overInstead of squeezing all your data into tables we believe thefuture is about choosing a data store that best matches yourdata set and operational requirements Itrsquos 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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 9 79
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 10 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzenWeb vs RDBMSVerteilte Systeme
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 11 79
(Un)strukturierte DatenWeb vs RDBMS
RDBMSDatenbankschema entscheidend
aufwaumlndig zu entwerfen Normalisierung nachtraumlglich schwierig zu aumlndern
stark strukturiert
Webanwendungenuser generated content
unstrukturierte Daten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 12 79
AbfragenWeb vs RDBMS
RDBMSdynamische Abfragen (ad hoc reporting)beliebige Abfragen uumlber alle Daten direkt in SQL
Webanwendungenwiederkehrende Abfragen nur Parameter aumlndern sich
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 13 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Weitere Datenbanksysteme
Objektdatenbanken (db4o)XMLSpeicherung als Schluumlssel-Wert-Paare (BerkeleyDB)spaltenorientierte Systeme (Sybase IQ)dokumentenorientierte Systeme (Lotus Notes)kaum Verbreitung im Vergleich zu relationalen Systemenfruumlhe Formen von NoSQL
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 6 79
NoSQLBegriffsklaumlrung
2009 als Sammelbegriff fuumlr bereits laumlnger existierende SystemeetabliertNot only SQLkeine eindeutige Definitionnicht-relationale Datenspeicher
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 7 79
NoSQLWas NoSQL manchmal (nicht) ist
Verteiltes_ArbeitenSkalierbarkeit Schemafreiheit
Geschwindigkeit Open_Source Open_StandardsGroszlige_Datenmengen
Aufgabe_der_ACID-Prinzipien Einfache_BenutzungFehlertoleranz Concurrency Durchsatz
Zuverlaumlssigkeit
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 8 79
NoSQLBegriffsklaumlrung
Ankuumlndigung nosql(eu) conference April 2010 [11]
era of ldquoone-size-fits-all databaserdquo seems to be overInstead of squeezing all your data into tables we believe thefuture is about choosing a data store that best matches yourdata set and operational requirements Itrsquos 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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 9 79
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 10 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzenWeb vs RDBMSVerteilte Systeme
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 11 79
(Un)strukturierte DatenWeb vs RDBMS
RDBMSDatenbankschema entscheidend
aufwaumlndig zu entwerfen Normalisierung nachtraumlglich schwierig zu aumlndern
stark strukturiert
Webanwendungenuser generated content
unstrukturierte Daten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 12 79
AbfragenWeb vs RDBMS
RDBMSdynamische Abfragen (ad hoc reporting)beliebige Abfragen uumlber alle Daten direkt in SQL
Webanwendungenwiederkehrende Abfragen nur Parameter aumlndern sich
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 13 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
NoSQLBegriffsklaumlrung
2009 als Sammelbegriff fuumlr bereits laumlnger existierende SystemeetabliertNot only SQLkeine eindeutige Definitionnicht-relationale Datenspeicher
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 7 79
NoSQLWas NoSQL manchmal (nicht) ist
Verteiltes_ArbeitenSkalierbarkeit Schemafreiheit
Geschwindigkeit Open_Source Open_StandardsGroszlige_Datenmengen
Aufgabe_der_ACID-Prinzipien Einfache_BenutzungFehlertoleranz Concurrency Durchsatz
Zuverlaumlssigkeit
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 8 79
NoSQLBegriffsklaumlrung
Ankuumlndigung nosql(eu) conference April 2010 [11]
era of ldquoone-size-fits-all databaserdquo seems to be overInstead of squeezing all your data into tables we believe thefuture is about choosing a data store that best matches yourdata set and operational requirements Itrsquos 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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 9 79
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 10 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzenWeb vs RDBMSVerteilte Systeme
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 11 79
(Un)strukturierte DatenWeb vs RDBMS
RDBMSDatenbankschema entscheidend
aufwaumlndig zu entwerfen Normalisierung nachtraumlglich schwierig zu aumlndern
stark strukturiert
Webanwendungenuser generated content
unstrukturierte Daten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 12 79
AbfragenWeb vs RDBMS
RDBMSdynamische Abfragen (ad hoc reporting)beliebige Abfragen uumlber alle Daten direkt in SQL
Webanwendungenwiederkehrende Abfragen nur Parameter aumlndern sich
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 13 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
NoSQLWas NoSQL manchmal (nicht) ist
Verteiltes_ArbeitenSkalierbarkeit Schemafreiheit
Geschwindigkeit Open_Source Open_StandardsGroszlige_Datenmengen
Aufgabe_der_ACID-Prinzipien Einfache_BenutzungFehlertoleranz Concurrency Durchsatz
Zuverlaumlssigkeit
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 8 79
NoSQLBegriffsklaumlrung
Ankuumlndigung nosql(eu) conference April 2010 [11]
era of ldquoone-size-fits-all databaserdquo seems to be overInstead of squeezing all your data into tables we believe thefuture is about choosing a data store that best matches yourdata set and operational requirements Itrsquos 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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 9 79
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 10 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzenWeb vs RDBMSVerteilte Systeme
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 11 79
(Un)strukturierte DatenWeb vs RDBMS
RDBMSDatenbankschema entscheidend
aufwaumlndig zu entwerfen Normalisierung nachtraumlglich schwierig zu aumlndern
stark strukturiert
Webanwendungenuser generated content
unstrukturierte Daten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 12 79
AbfragenWeb vs RDBMS
RDBMSdynamische Abfragen (ad hoc reporting)beliebige Abfragen uumlber alle Daten direkt in SQL
Webanwendungenwiederkehrende Abfragen nur Parameter aumlndern sich
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 13 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
NoSQLBegriffsklaumlrung
Ankuumlndigung nosql(eu) conference April 2010 [11]
era of ldquoone-size-fits-all databaserdquo seems to be overInstead of squeezing all your data into tables we believe thefuture is about choosing a data store that best matches yourdata set and operational requirements Itrsquos 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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 9 79
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 10 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzenWeb vs RDBMSVerteilte Systeme
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 11 79
(Un)strukturierte DatenWeb vs RDBMS
RDBMSDatenbankschema entscheidend
aufwaumlndig zu entwerfen Normalisierung nachtraumlglich schwierig zu aumlndern
stark strukturiert
Webanwendungenuser generated content
unstrukturierte Daten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 12 79
AbfragenWeb vs RDBMS
RDBMSdynamische Abfragen (ad hoc reporting)beliebige Abfragen uumlber alle Daten direkt in SQL
Webanwendungenwiederkehrende Abfragen nur Parameter aumlndern sich
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 13 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 10 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzenWeb vs RDBMSVerteilte Systeme
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 11 79
(Un)strukturierte DatenWeb vs RDBMS
RDBMSDatenbankschema entscheidend
aufwaumlndig zu entwerfen Normalisierung nachtraumlglich schwierig zu aumlndern
stark strukturiert
Webanwendungenuser generated content
unstrukturierte Daten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 12 79
AbfragenWeb vs RDBMS
RDBMSdynamische Abfragen (ad hoc reporting)beliebige Abfragen uumlber alle Daten direkt in SQL
Webanwendungenwiederkehrende Abfragen nur Parameter aumlndern sich
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 13 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzenWeb vs RDBMSVerteilte Systeme
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 11 79
(Un)strukturierte DatenWeb vs RDBMS
RDBMSDatenbankschema entscheidend
aufwaumlndig zu entwerfen Normalisierung nachtraumlglich schwierig zu aumlndern
stark strukturiert
Webanwendungenuser generated content
unstrukturierte Daten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 12 79
AbfragenWeb vs RDBMS
RDBMSdynamische Abfragen (ad hoc reporting)beliebige Abfragen uumlber alle Daten direkt in SQL
Webanwendungenwiederkehrende Abfragen nur Parameter aumlndern sich
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 13 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
(Un)strukturierte DatenWeb vs RDBMS
RDBMSDatenbankschema entscheidend
aufwaumlndig zu entwerfen Normalisierung nachtraumlglich schwierig zu aumlndern
stark strukturiert
Webanwendungenuser generated content
unstrukturierte Daten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 12 79
AbfragenWeb vs RDBMS
RDBMSdynamische Abfragen (ad hoc reporting)beliebige Abfragen uumlber alle Daten direkt in SQL
Webanwendungenwiederkehrende Abfragen nur Parameter aumlndern sich
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 13 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
AbfragenWeb vs RDBMS
RDBMSdynamische Abfragen (ad hoc reporting)beliebige Abfragen uumlber alle Daten direkt in SQL
Webanwendungenwiederkehrende Abfragen nur Parameter aumlndern sich
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 13 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengenfruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Verteiltes Arbeiten
Skalierbarkeitgroszlige Datenmengen
The largest BigTable instance manages about 6 petabytes of dataspread across thousands of machinesJeff Dean Google IO conference Mai 2008 (Shankland [14])
fruumlher nur Groszligrechner Anfrageoptimierung statt Rechenleistungheute preiswerte Hardware ergaumlnzen (auch via cloud)
HochverfuumlgbarkeitRDBMS Verteiltes Arbeiten nachtraumlglich rudimentaumlr zugefuumlgt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 14 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
CAP TheoremConsistency Availability Partition Tolerance
TheoremConsistencyDer Client glaubt eine Menge von Operationen sei auf einenSchlag passiert Alle Clients sehen dieselben DatenAvailabilityJede Operation endet mit einer bestimmungsgemaumlszligen AntwortAlle Clients koumlnnen auf eine Version der Daten zugreifenPartition ToleranceOperationen werden zu Ende gefuumlhrt auch wenn die Datenbankpartitioniert ist
Nur zwei der drei Eigenschaften sind gleichzeitig moumlglichsiehe Brewer [2] und Lynch amp Gilbert [10]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 15 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
CAP TheoremAnwendung
Availability amp Consistency Paxos BigTable Network Partitioning oft unvermeidlichtrade off Consistency vs AvailabilityConsistency amp Partition Tolerance viele RDBMS
ACID (atomicity consistency isolation durability)siehe Gray [7] und Haerder amp Reuter [8]
Availability amp Partition Tolerance CouchDB MongoDBCassandra Dynamo
BASE (basically available soft-state eventual consistency)siehe Pritchett [13]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 16 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIsHTTPRESTMapReduce
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 PraxisbeispielK Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 17 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Protokoll und API
viele NoSQL-Systeme nutzenvorhandene Programmiersprachen (neo4j )HTTPREST (CouchDB MongoDB )
verbreitet MapReduce-Techniken (Parallelisierung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 18 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
RESTful HTTP API
HTTP ProtokollBrowser curl sind DB-ClientsClients in beliebiger Sprache leicht zu programmierenvorhandene Webtechnologien nutzbarLoad Balancer Proxy HTTPS via SSL-faumlhigen Proxy Vor- und Nachteile von HTTP
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 19 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
RESTful HTTP API
REpresentational State Transfer APIArchitekturprinzip fuumlr Kommunikation zwischen heterogenenAnwendungengeeignet fuumlr verteilte SystemeStateless Communication
jeder Request in sich geschlossenAnwendungsinformationen nur im Clientkeine serverseitigen Sitzungen oauml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 20 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
CouchDBRESTHTTP
Willkommensnachricht des Servershttplocalhost5984
Alle Datenbanken anzeigenhttplocalhost5984_all_dbs
Informationen uumlber die Datenbank kontaktdatenhttplocalhost5984kontaktdaten
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 21 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
MapReduce
map und reduce Funktionen Konzept aus der funktionalenProgrammierungverarbeitet groszlige Datenmengen parallelMapReduce framework zur verteilten Verarbeitung groszligerDatenmengen (Google)freie Implementierung Hadoop
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 22 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 DatenmodelleSpaltenorientierungObjektorientierungGraphenSchluumlssel-Wert-PaareDokumentenorientierung
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 23 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Relationales Modell
striktes SchemaTabellen und Spalten statischzeilenorientierte Speicherungrsquoechtersquo Beziehungen zwischen Datenforeign key constraints joins
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 24 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Spaltenorientierung
erste spaltenorientierte Datenbanken in den 1970ernCassandra BigTable spaltenorientierte Speicherungmehr Performanz fuumlr bestimmte AbfragenzB Aggregieren innerhalb einer Spalteflexibleres SchemaSpalten dynamischkeine rsquoechtenrsquo Beziehungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 25 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
keyspaceentspricht der Anwendung Beispiel rsquoBlogrsquo
column familyentspricht einer DateiBeispiel rsquoPostsrsquo oder rsquoUsersrsquobeliebig viele Eintraumlge (key + columns)
keyidentifiziert einen Eintrag in der column familywird bei Abfragen benutztkeys sind lokalgleichnamige keys verschiedener column families sind verschiedenkeine rsquoechtenrsquo Beziehungen
columntupel (name value timestamp)Beispiel nameusername valuefoo timestamp12345
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 26 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Cassandrarsquos DatenmodellVereinfachte Darstellung
verschiedene keys koumlnnen verschiedene columns habenkein striktes Schema
BeispielAbfrage (Users 42)
username fooemail fooexamplecomscreen_name FOOOOOAbfrage (Users 23)
username baradmin yes
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 27 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Objektorientierung
Persistenzschicht fuumlr Objektorientierte ProgrammierungAbfragen in objektorientierter ProgrammierspracheOO-Programmiersprache (Java C++ ) oder DBMS-eigeneSprachedb4o JADE Databeans
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 28 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Graphen
Graphen im Sinne der MathematikKnoten und Kantenmodellieren zB Netzwerk Leitungssystem Spezialfall BaumzB Produktkategorien (Eltern-Kind-Beziehung)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 29 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Graphendatenbanken
InfoGrid neo4j Daten als Graphen
Knoteneigenstaumlndige Objekte wie Kunde Bestellung Kanten sind Beziehungen zwischen Knoten
schematisiert oder schemafreiKanten sind ldquofirst class objectsrdquohaumlufige Operation Traversierunggut geeignet fuumlr komplexe BeziehungsgeflechtezB social network
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 30 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Schluumlssel-Wert-Paare
Riak Tokyo Cabinet Schluumlssel-Wert-PaareWert muss kein String sein (Objekte moumlglich)Abfrage per Schluumlsselschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 31 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Dokumentenorientierung
CouchDB MongoDB Riak XML-Datenbanken Dokument weitere Abstraktionsebene oberhalb vonSchluumlssel-Wert-Paarenfuumlr sich genommen sinnvolle Informationseinheitmeist Entsprechung im Real Life (Rechnung Visitenkarte )uumlblicherweise kein leeren Felderschemafreikeine rsquoechtenrsquo Relationen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 32 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
CouchDBrsquos Datenmodell
Format JavaScript Object Notation (JSON)Bestandteil von JavaScriptwird zT direkt vom Browser verstandenwenig Datentypendiese werden von nahezu allen Sprachen verstandenSchluumlssel-Wert-Paareobligatorische Schluumlssel
_id zur eindeutigen Identifikation des Dokumentes (UUID)_rev zur Versionierung des Dokumentes
Dokumente koumlnnen Attachments haben
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 33 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
CouchDB DokumentJSON
Dokument mit _id 69a aus Datenbank kontaktdatenhttplocalhost5984kontaktdaten69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 34 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
CouchDB DokumentJSON
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 35 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDBImplementierungUpdates and ConcurrencyAbfragenDesign DocumentsAnwendungen
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 36 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Was ist CouchDB
Cluster Of Unreliable Commodity Hardware DataBaseDatenbankcluster auf unzuverlaumlssiger StandardhardwareDatenbanksystem (nicht nur) fuumlr Webanwendungenoffene WebstandardsRobuste Replikationschemafreigeeignet fuumlr unstrukturierte DatenPhilosophie entspanntes Arbeitenkeine Entscheidungen die nicht zu revidieren sind
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 37 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
ImplementierungUumlberblick
HTTPREST (Webserver enthalten) bzgl REST siehe auch Tilkov [16]
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 (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 38 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Replikation
shared nothing clusterServer unabhaumlngig voneinanderinkrementellgefiltertN-Master Master-Slave P2P eigene Cloud Hot failover backup Lastverteilung extrem robustggf manuell Konflikte loumlsen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 39 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Updates
komplettes Dokument abholen veraumlndern zum Speichernzuruumlcksendenneue Version eines Dokumentes wird an DatenbankdateiangehaumlngtRobust was einmal auf Platte steht wird nicht mehr angefaszligtGeschwindigkeit neue Version kann angehaumlngt werden waumlhrendalte noch gelesen wird
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 40 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Multi Version Concurrency Control
optimistic lockingClient schickt veraumlndertes Dokument mit unveraumlnderterVersionsnummer _revServer pruumlft ob diese _rev identisch ist mit der aktuellgespeichertenwenn ja Dokument wird gespeichert (Server vergibt neue _rev)wenn nein Fehlermeldung
keine Versionskontrollees werden nicht alle Versionen aufbewahrt
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 41 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
View
(secondary) Index (Schluumlssel-Wert-Paare)Schluumlssel und Werte des Views sind Werte aus Dokumenten
Beispiel Erstellungsdaten als Schluumlssel Blogposttitel als Wertekoumlnnen auch arrays von Werten (aus Dokumenten) seinWerte (im View) koumlnnen auch aggregierte Werte (aus Dokumenten)sein
sortiert nach Schluumlsselneffizientes Abfragen nach bestimmten Schluumlsseln oder Bereichenvon SchluumlsselnrsquoTitel aller Blogposts von Mai 2009rsquozur Abfragezeit erzeugtaktualisiert durch MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 42 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
View - Beispiel
Dokument eines Blogpostshttplocalhost5984simple_blog17cf8a2934231a6cedc9e30fd30045a7
Viewhttplocalhost5984simple_blog_designby-date_viewblogposts-by-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designby-date_viewblogposts-by-date
Query Blogpost vom 12 April 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datekey=[2010412]
Query Blogposts aus Maumlrz 2010httplocalhost5984simple_blog_designby-date_viewblogposts-by-datestartkey=[201030]ampendkey=[2010331]
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 43 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts dargestellt inFuton
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 44 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
ViewBeispiel
View mit Schluumlssel Datum und Wert Titel des Blogposts Rohansicht
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 45 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Map ReduceView erzeugen
map verarbeitet Dokumenteerzeugt Schluumlssel-Wert-Paareoptionales reduce erzeugt aggregierte (Zwischen)Werteverarbeitet Ergebnisse von map oder rekursivZwischenergebnisse von reduce
group anwenden auf Objekte mit gleichem SchluumlsselBeispiel nicht alle Blogposts zaumlhlen sondern Blogposts pro TagMap-Reduce-Funktionen gespeichert in Dokumenten(Designdokumente)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 46 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
View - Beispiel
Designdokument (map-Funktion)httplocalhost5984simple_blog_designby-date
Designdokument (map und reduce)httplocalhost5984simple_blog_designper-date
Viewhttplocalhost5984simple_blog_designper-date_viewposts-per-datehttplocalhost5984_utilsdatabasehtmlsimple_blog_designper-date_viewposts-per-date
Gruppierthttplocalhost5984simple_blog_designper-date_viewposts-per-dategroup_level=1
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 47 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
DesigndokumentBeispiel
Designdokument mit map-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 48 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
DesigndokumentBeispiel
Designdokument mit map- und reduce-Funktionen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 49 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
ViewBeispiel
View ohne reduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 50 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
ViewBeispiel
View mit reduce
View mit reduce und group_level=2
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 51 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Design Documents
_id beginnt mit _designenthalten Anwendungscode sprich Funktionen
Map-Reduce-Funktionen fuumlr ViewsValidation Zulaumlssigkeit von Updatesinput pruumlfen nur eingeloggte user serverseitige Bearbeitung vor dem Speichern eines DokumentesShowList JSON in HTML XML konvertieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 52 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Beispiel Show Functions
Design Dokument (Show)httplocalhost5984kontaktdaten_designoutput
Dokument anzeigenhttplocalhost5984kontaktdaten_designoutput_showcard69a87107057813de1414e08a9f000912
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 53 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
DesigndokumentBeispiel
Designdokument mit show-Funktion
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 54 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Webanwendungen mit CouchDBKlassische Webanwendungen
Serverseitige Skripte lesen Daten aus CouchDBerzeugen daraus dynamisch HTMLWebserver liefert aus
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 55 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Webanwendungen mit CouchDBCouchApps
leben vollstaumlndig in der Datenbankkeine middlewareShowList-FunktionenAttachments (HTMLCSS Javascript) direkt ausliefernAusgelieferte Webseite greift per JavascriptHTTP auf CouchDBzuReplikation update fork backup von Anwendungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 56 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Dezentrale offline WebanwendungEin Usecase fuumlr CouchApps
Daten und Anwendung lokal beim useroffline verfuumlgbarlokale Datenhaltung = niedrige Latenzdezentral(gefilterte) Replikation mit anderen usern
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 57 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Desktop-Anwendungen
Beispiel Synchronisation von Anwendungsdatenbereits realisiert in UbuntuBookmarks Adreszligbuch in CouchDB speichernper Replikation mit anderen Rechnern synchronisieren
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 58 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 59 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Herausforderungen und Kritik
HTMLJS HTTP vorhandene Probleme bleiben bestehenkein ad hoc reportingBASE vs ACIDZuverlaumlssigkeit zB bei FinanztransaktionenZweifel an der GeschwindigkeitStonebraker et al [15] siehe auch Lai [9] und Pavlo et al [12]
CouchApps und Co Verteilte Identitaumltenserverseitiger Code noumltig fuumlr AuthentifizierungAutorisierungvertrauenswuumlrdiger Server noumltig
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 60 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Uumlbersicht
1 Einfuumlhrung
2 Why Not Only SQL - warum nicht immer SQL einsetzen
3 Protokolle amp APIs
4 Datenmodelle
5 CouchDB
6 Herausforderungen und Kritik
7 Praxisbeispiel
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 61 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Einfache BloganwendungER-Diagramm
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 62 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Einfache BloganwendungRelationes Schema
Tabelle Posts mit Spaltenpost_id Titel Text user Datum
Tabelle Kommentare mit Spaltencomment_id Text user Datum post_id
foreign key constraintKommentarepost_id Postspost_id
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 63 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Einfache BloganwendungER-Diagramm
Dokumentenorientierter Ansatz
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 64 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Einfache BloganwendungBlogpost ohne Kommentare
httplocalhost5984blog0cc50e8668ff421c1c09be1b71000077a
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 65 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Einfache BloganwendungBlogpost ohne Kommentare
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 66 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Einfache BloganwendungBlogpost mit Kommentare ldquoinlinerdquo
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 67 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Einfache BloganwendungKommentar als eigenes Dokument
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 68 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
map-Funktion
function(doc) if (doctype == post) emit([doc_id 0] doc)
else if (doctype == comment) emit([docpost_id 1] doc)
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 69 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Einfache BloganwendungKommentar als eigenes Dokument
View zur Ausgabe von Posts mit zugehoumlrigen Kommentarenzusammengesetzter Schluumlssel mit _id und 0 bzw 1 fuumlr Post bzwKommentar
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 70 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Einfache BloganwendungBlogposts und Kommentare
Kommentare ldquoinlinerdquoDirekter Zugriff auf Kommentare durch geeigneten ViewVorteil alles beisammen beim Loumlschen des Posts werden alleKommentare mit geloumlscht Nachteil jeder neue Kommentar ist ein Update des Posts beivielen Kommentaren Konflikte wahrscheinlich
Alternative Kommentare in eigenen DokumentenGemeinsame Ausgabe eines Posts und seiner Kommetare durchgeeigeneten View
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 71 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Noch Fragen
Vielen Dank fuumlr Ihre Aufmerksamkeit
Fragen und Anmerkungen
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 72 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Referenzen I
J Chris Anderson Jan Lehnardt and Noah SlaterCouchDB The definitive GuideOrsquoReilly 2010URL httpbookscouchdborgrelax
Eric A BrewerTowards robust distributed systemsIn Principles of Distributed Computing (Keynote) 2000URL httpwwwcsberkeleyedu~brewercs262b-2004PODC-keynotepdf
Edgar F CoddA relational model of data for large shared data banksCommunications of the ACM 13(6)377ndash387 1970doi101145362384362685
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 73 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Referenzen II
Edgar F CoddDoes your dbms run by the rulesComputerWorld Oktober 1985
Edgar F CoddIs your dbms really relationalComputerWorld Oktober 1985
Jeffrey Dean and Sanjay GhemawatMapreduce Simplified data processing on large clustersIn Sixth Symposium on Operating System Design andImplementation 2004URL httplabsgooglecompapersmapreducehtml
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 74 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Referenzen III
Jim GrayThe transaction concept Virtues and limitationsIn Proceedings of the 7th International Conference on Very LargeDatabases pages 144ndash154 1981
Theo Haerder and Andreas ReuterPrinciples of transaction-oriented database recoveryACM Computing Surveys 15287ndash317 1983
Eric LaiResearchers Databases still beat googlersquos mapreduceComputer World April 2009URL httpwwwcomputerworldcomsarticle9131526Researchers_Databases_still_beat_Google_s_MapReduce
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 75 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Referenzen IV
Nancy Lynch and Seth GilbertBrewerrsquos conjecture and the feasibility of consistent availablepartition-tolerant web servicesACM SIGACT News 33(2)51ndash59 2002doi1011201495URL httpciteseerxistpsueduviewdocdownloaddoi=1011201495amprep=rep1amptype=pdf
nosql(eu)nosql(eu) April 2010URL httpwwwnosqleucom
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 76 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Referenzen V
Andrew Pavlo Erik Paulson Alexander Rasin Daniel J AbadiDavid J Dewitt Samuel Madden and Michael StonebrakerA comparison of approaches to large-scale data analysisIn SIGMOD rsquo09 Proceedings of the 2009 ACM SIGMODInternational Conference ACM June 2009URL httpdatabasecsbrownedusigmod09benchmarks-sigmod09pdf
Dan PritchettBase An acid alternativeACM Queue 6(3)48ndash55 2008URL httpqueueacmorgdetailcfmid=1394128
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 77 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Referenzen VI
Stephen ShanklandGoogle spotlights data center inner workingscnet news Mai 2008URLhttpnewscnetcom8301-10784_3-9955184-7html
Michael Stonebraker Daniel Abadi David J DeWitt SamMadden Erik Paulson Andrew Pavlo and Alexander RasinMapreduce and parallel dbmss Friends or foesCommunications of the ACM 53(1)64ndash71 2010ISSN 0001-0782doihttpdoiacmorg10114516291751629197URL httpdatabasecsbrownedupapersstonebraker-cacm2010pdf
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 78 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Referenzen VII
Stefan TilkovA brief introduction to restInfo Queue 2007URLhttpwwwinfoqcomarticlesrest-introduction
K Puschke (Vortrag HAW Hamburg) NoSQL 3 Juni 2010 79 79
Recommended