Vorstellung Der Verteilten NoSQL Datenbank CouchDB

Transcription

Karl GlatzOktober 2009Vorstellung der verteiltenNoSQL Datenbank CouchDB

Web Awendung (AJAX)MySQLSQLWeb ServerPHPHTTP (HTML)ORM (Framework)Web BrowserJava Script06. Okt 2009CouchDB (Karl Glatz)JSON API (AJAX)HTTPRESTful (GET/POST)JSON2 / 36

Web Anwendung (AJAX)CouchDBHTTPRESTful (GET/POST)JSONWeb ServerPHPWeb BrowserJava Script06. Okt 2009CouchDB (Karl Glatz)3 / 36

Inhalt: Einstieg Einstieg in CouchDB Eigenschaften von CouchDB Warum CouchDB? Das CouchDB Projekt Architektur von CouchDB Unterschiede zu relationalen Datenbanken Beispiel: Zugriffsmechanismen (Query)06. Okt 2009CouchDB (Karl Glatz)4 / 36

Inhalt: Interna & Verteilung CouchDB Interna Indizes (Views) Gleichzeitigkeit Update, SucheVerteilte Aspekte von CouchDB Modelle Bi-direktionale Replikation Konfliktmanagement06. Okt 2009CouchDB (Karl Glatz)5 / 36

Inhalt Geschwindigkeit Pro und Contra CouchDB Einsatzgebiete / „Real World“ Anwendungen P2P Web: CouchDB Apps Zusammenfassung06. Okt 2009CouchDB (Karl Glatz)6 / 36

CouchDB – Was ist das? Backronym Überstezung Cluster Verbung of aus unreliable unzuverlässiger commodity Standard- hardware Hardware Data Daten- Base Bank„GoogleModell“06. Okt 2009CouchDB (Karl Glatz)7 / 36

Eigenschaften von CouchDB Dokumentenorientierte Datenbank Bekannt als: NoSQL, Key-Value, Property DBs Flexible und simple Objekt-Datenstrukur (JSON) Kein Schema keine Einschränkungen Lose Verweise (Relationen) wie im Web (Links) Programmierbare Indizes (JavaScript) HTTP (RESTful) zur Kommunkikation Optimiert für die Verteilung auf mehrere Rechner06. Okt 2009CouchDB (Karl Glatz)8 / 36

Warum CouchDB? Einfach Relax! Welt besteht aus Dokumentenz. B. Visitenkarten, Rechnungen etc.RDBMS sind komplex hoher Wartungsaufwand RDBMS sind nicht „Web fähig“ (JavaScript) Daten und Programmierung „rücken zusammen“ Skalierbarkeit (Hoch und Runter) Baustein für große und kleine Systeme06. Okt 2009CouchDB (Karl Glatz)9 / 36

Was CochDB nicht ist! Eine relationale Datenbank Ersatz für RDBMS Einsatzzweck beachtenEine Objektorientierte Datenbank bzw. Objekt-Relationaler Mapper (ORM)06. Okt 2009CouchDB (Karl Glatz)10 / 36

Das CouchDB Projekt OpenSource (Apache 2.0 Lizenz) Projekt in Apache Software Foundation Ähnlichkeiten mit Lotus Notes „Notes done right“Programmiert in Erlang Sichert Projekt: Entwicklung, Qualität,Eigentumsrechte usw.Erlang beherrscht Parallelität als SprachfeatureCa. 13.000 Zeilen Code (MySQL: 1 Mio)06. Okt 2009CouchDB (Karl Glatz)11 / 36

kumenteDatenbanken06. Okt 2009CouchDB (Karl Glatz)12 / 36

JSON: Objekt-Austausch Format JSON: JavaScript Object Notation Simples Format In 39 Sprachen verfügbar06. Okt 2009CouchDB (Karl Glatz)13 / 36

RDBMS vs CouchDBTabellenblog postsvsDokumente{Schemaid: "post1",Dokumenterev : "ASRE",in DB „blog“type: "post",title: "How to use .",tagline: "Just a How to",author: "karl",create date: "2. Sept 2009",internal notes: "good blog post"idtitletaglinecreator idcreate dateDaten: Zeilenidtitle}taglineauthor createiddate1How touse .Just aHow to33. Sept20092UpdatesWhat i'mdoing atm.28. Sept2009.06. Okt 2009CouchDB (Karl Glatz){id: "post2",rev : "EN3D",type: "post",title: "Updates",tagline: "What i'm doingatm",author: "heinz",create date: "8. Sept 2009", .}14 / 36

View: Auf Daten zugreifen Ein View besteht aus Map und (optional) ReduceFunktionen (JavaScript) Anwendung auf alle Dokumente View stellt Query Endpunkt dar Code in View Ersetzt SQL Abfrage Abfrage Parameter (wie WHERE .) Sicherheit: Keine SQL-Injektion möglichAll / Key / RangeOder: Direktzugriff über Dokument Id BD1F0647606. Okt 2009CouchDB (Karl Glatz)15 / 36

Query: Blog Beispiel Map Funktion{"total rows":2,"offset":1,"rows":[function(doc) {{"id":"post1","key": "kglatz","value": {" id":"post1 8457"," rev":"7863091422","title":"How touse .","author":"kglatz","tagline":"Just aHow to","create date":"Mon Oct 05 200922:54:30 GMT 0200(CEST)","type":"post"}}if(doc.type "post"){emit(doc.author, doc);}}SchlüsselWert]} Nach Schlüssel wird sortiert http://localhost:5984/test1/ design/blog/ view/posts?key “kglatz“06. Okt 2009CouchDB (Karl Glatz)16 / 36

Reduce Funktion Reduce dient zur Aggregation von Daten Wird auf die Daten aus Map angewandt Beispiel: ,"size":12345},"tags":["tuna","shark"]}06. Okt 2009Mapfunction(doc) {emit("size", doc.info.size);}Reducefunction(keys, values, rereduce) {return sum(values);}CouchDB (Karl Glatz)17 / 36

Relationen Modellieren Keine Relation Speichern im Dokument Relation über id als Fremdschlüssel Effiziente Abfrage (Single Request) Map: Key und Value können JSON Objekte (Arrays)sein „complex keys“Mit Range (von – bis) Abfragen lassen sich soRelationen nachbauenAnleitung: ns06. Okt 2009CouchDB (Karl Glatz)18 / 36

Interna: Views/Indizes Views: Schlüssel zu den Daten Effizient gespeichert als B-Baum Zeit: O(log N) für Suche, Einfügenund Löschen Simple Zugriffsschicht Erzeugung zur Query-Zeit Langsam bei vielen neuen Dokumenten(meist: Import) Manuell erzeugenOptimierungsmöglichkeiten durchBeschränkung auf Keys06. Okt 2009CouchDB (Karl Glatz)19 / 36

Gleichzeitigkeit Locking Schreibzugriff: Warten bis „lock“ erhalten Sperrt (Lese-)Zugriff für alle anderen Anfällig unter hoher LastMVCC: Multi Version Concurrency Control Statt überschreiben Neues Dokument (neueBlöcke auf der Festplatte) Lesezugriff trotzdem möglich (alte Version) Von Last unabhängig Revisionsverwaltung06. Okt 2009CouchDB (Karl Glatz)DB20 / 36

Verteilte Aspekte Architektur ist für Replikation entworfen Eindeutige IDs für Dokument (UUID mit 128 Bit) Revisionsverwaltung (32Bit- Revisions Id)Fehlertolerant Akzeptiert mehrere Realitäten Lokale KonsistenzGrundsatz: „Dinge können schief gehen“ Fallacies of Distributed Computing(Irrtümer der verteilten Datenverarbeitung)06. Okt 2009CouchDB (Karl Glatz)21 / 36

Irrtümer der verteiltenDatenverarbeitung1. Das Netzwerk ist ausfallsicher2. Die Latenzzeit ist gleich Null3. Der Datendurchsatz ist unendlich4. Das Netzwerk ist sicher5. Die Netzwerktopologie wird sich nicht ändern6. Es gibt immer nur einen Netzwerkadministrator7. Die Kosten des Datentransports können mit Nullangesetzt werden8. Das Netzwerk ist homogen 06. Okt 2009CouchDB (Karl Glatz)22 / 36

Verteilte DatenbankenDas CAP lle fürKonsitenzSMBDRerzwungeneKonsitenz06. Okt rbarkeit(partition tolerance)CouchDB (Karl Glatz)möglicheKonsitenz23 / 36

Verteilte Architekturen #1 Möglichkeit 1: Mehre DBs eine RealitätAnwendung(dummer) HTTP Proxy (z.B. ngix)DB 1DB 2DB 3DB n.Replikator (Anwendung)06. Okt 2009CouchDB (Karl Glatz)24 / 36

Verteilte Architekturen #2 Möglichkeit 2: Mehre DBs, mehrere RealitätenAnwendungIntelligenter HTTP Proxy (CouchDB Lounge)DB 1DB 2DB 3DB n.06. Okt 2009CouchDB (Karl Glatz)Entscheidetwelche Datenbankgenutzt wird25 / 36

Verteilte Architekturen #3 Möglichkeit 3: Mehre DBs, mehrere RealitätenReplikatorDB 106. Okt 2009AnwendungDB 2DB 3CouchDB (Karl Glatz)Lokale DB26 / 36

Bi-direktionale Replikation Replikation muss angestoßen werden Kann unterbrochen werden Fortsetzung ohne Probleme möglichIn verteilten Systemen besteht immer lokaleKonsitzenz Zusatz: CouchDB LoungeAnwendungen funktionieren; Daten können veraltetseinKonflikte Besonderer Status (Zustand) des Dokuments06. Okt 2009CouchDB (Karl Glatz)27 / 36

Replikation mit Futon06. Okt 2009CouchDB (Karl Glatz)28 / 36

Geschwindigkeit Schnell genug! Viele Optimierungsmöglichkeiten noch Offen Status von CouchDB: BetaOptimierungen durch Kompromisse Speichern im RAM weniger Zuverlässig Gleichzeitigkeit: Schnell nur bei einem RequestZiel von CouchDB: „Es richtig machen“06. Okt 2009CouchDB (Karl Glatz)29 / 36

Pro und Contra Key-Value DBProContra Spontane Auswertungenvon Daten erschwertSpontanes ändern vonmehreren Dokumentenerschwert (UPDATE )Abbildung von Relationennicht direkt möglich Mehr Flexibilität Skaliert gut 06. Okt 2009Replikation / Verteilung„frei Haus“Freiheit für EntwicklerDokumentenmodell:Anwendungsdomäne vonWebAppsHohe VerfügbarkeitenrealisierbarCouchDB (Karl Glatz)30 / 36

Einsatzgebiete / Anwendungen Desktop: Integration in Ubuntu (9.10) Austausch über LAN, „Ubuntu One“ (Profildaten etc.)Web Anwendungen Sofa (Blog): http://jchrisa.net/ Swinger (Präsentationen)Projekte / Produkte BBC: Web Plattform Meebo.com: Kommerzielles Umfrage System06. Okt 2009CouchDB (Karl Glatz)31 / 36

CouchDB Apps: Das P2P Web Konzept ähnlich wie IBM Domino(Applikationsserver)Anwendungen laufen im Web-Browser (pur JavaScript) in CouchDB als Dokumente gespeichert (Attachments) Daten und Anwendung kann repliziert werden (p2p) Offline wie Online („disconnected“)06. Okt 2009CouchDB (Karl Glatz)32 / 36

Weitere „coole“ Features Transformationsfunktionen Validierungsfuktionen z. B. Lucene – VolltextsucheNotification Frei programmierbare Validierung von DokumentenExterne Indizes Darstellung als: HTML, RSS, XML etc.Funktion wird bei Ereignis ausgeführtCaching mit HTTP E-Tags06. Okt 2009CouchDB (Karl Glatz)33 / 36

Zusammenfassung CouchDB ist ein flexibler Datenspeicher Nutzt moderne und offene (Web-)Standards Programmierer erhält mehr Freiheit Schwächen bei spontanen Auswertungen („adhoc reporting“) Weniger geeignet für Finanzanwendungen, Statistik(viel Auswertungen)Gut Geeignet für (soziale) Web-Anwendungen Viele Nutzer, hohe Verfügbarkeit Cluster HW06. Okt 2009CouchDB (Karl Glatz)34 / 36

CouchDB ist nicht eine konkreteLösung für ein spezielles Problem vonverteilten Datenbanken. Sondern: Eine Zusammenfassung vongenerischen Mechanismen zur Erfüllungvon spezifischen Anforderungen an eineverteilte Datenbank (Anwendung).06. Okt 2009CouchDB (Karl Glatz)35 / 36

Vielen Dank für IhreAufmerksamkeit.Quellen 06. Okt 2009Sketch: http://couchdb.apache.org/img/sketch.pngOxygen Ions (modifiziert): ks.couchdb.orgCouchDB (Karl Glatz)36 / 36

Konkurrenz: Weitere NoSQL DBs Project Voldemort Cassandra Von Facebook, ähnlich wie Googles BigTable Gute Parallelität („write never fails“)Solr Automatische Replikation / Partitionierung der Daten; JavaAuf Volltextsuche optimiert (Lucene; Java)MongoDB Auf geschwindigkeit optimiert (C)06. Okt 2009CouchDB (Karl Glatz)37 / 36

06. Okt 2009 CouchDB (Karl Glatz) 37 / 36 Konkurrenz: Weitere NoSQL DBs Project Voldemort Automatische Replikation / Partitionierung der Daten; Java Cassandra Von Facebook, ähnlich wie Googles BigTable Gute Parallelität („write never fails“) Solr