Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 Dokumentenorientierte Datenbanken Eine Einführung am Beispiel von CouchDB.

Ähnliche Präsentationen


Präsentation zum Thema: "1 Dokumentenorientierte Datenbanken Eine Einführung am Beispiel von CouchDB."—  Präsentation transkript:

1 1 Dokumentenorientierte Datenbanken Eine Einführung am Beispiel von CouchDB

2 2 Wer bin ich? Mario Müller, 27 TWT Interactive GmbH - Düsseldorf PHP, Java, Groovy, Javascript, Python, Ruby Webservices, SOA, Software Qualität, diverse Frameworks MySQL, MongoDb, CouchDb Mac-Head & Linux Enthusiast Xing: http://bit.ly/mariomuellerhttp://bit.ly/mariomueller Twitter: http://twitter.com/xenjihttp://twitter.com/xenji Github: http://github.com/xenjihttp://github.com/xenji

3 3 Agenda Schemalosigkeit und Dokumente CouchDB... und Lotus Domino? ReST on the CouchDB Batteries included Map & Reduce Anwendungsbeispiele CouchDB... und sonst noch?

4 4 Schema? Nein! Trennung nach Datenbanken, einige kennen zusätzlich „Collections“ und „Subcollections“ Kein CREATE TABLE, kein ALTER TABLE Keine feste Definition der Datenstruktur und der Datentypen keine NULL Werte im RDBMS - Verständnis... keine SQL Queries ;)

5 5 Dokumente Entsprechen „in etwa“ einer Zeile in einer relationalen DB Haben „beliebig“ viele Attribute in „beliebiger“ Verschachtelung Normalisierung der Daten spielt eine geringere Rolle Dokumente kennen keine Relationen zu anderen Dokumenten (Foreign Keys oder Constraints) Viele Datenbanken können binäre Attachments verwalten

6 6 Abfragen Verschiedene Herangehensweisen Direkt per ID (eigentl. alle) Map & Reduce (z. B. CouchDB, Amazon SDB) Index (z. B. CouchDB, Google Bigtable) Volltext Index (z. B. per Lucene für CouchDB)

7 7 CouchDB

8 8 Erfinder ist Damien Katz Damien hat vorher Lotus Domino bei IBM (mit) entwickelt CouchDB ist in Erlang geschrieben Seit Nov. 2008 ein Apache Top-Level Projekt Läuft auf allen Systemen, dank der Erlang VM connect(Host, User, Password) -> {ftp_server,Host} ! {connect,self(),User,Password}, receive {ftp_server, Reply} -> Reply; Other -> Other after 10000 -> timeout end Erlang Beispiel

9 9 Herausragend ACID ähnliches Verhalten bei der Datenspeicherung dank MVCC Implementierung Map & Reduce als Abfrage- Sprache/Filter in Form von Views Entwickelt für verteilte Systeme, omni- direktionale Synchronisation Alle Dokumente sind im JSON Format abzubilden

10 10 ReST on the Couch CouchDB wird via ReST angesprochen Dokumente PUT /dbname GET /dbname/id POST /dbname/(id) DELETE /dbname/id Datenbanken werden nach dem selben Prinzip behandelt

11 11 MVCC MVCC = Multi-Version Concurrency Control Dokumente werden Versioniert Kommt eine Revision zustande, bekommen alle Requests solange den alten Stand, bis der neue geschrieben ist Verhindert jegliches Locking auf Dokument- oder Attributslevel Daraus resultiert eine sehr hohe Abfrage-Performance

12 12 Batteries Included Apache Futon, eine eingebaute GUI Versionierung von Dokumenten Authentifizierung via HTTP ReST API JavaScript & JSON Plugins für weitere Sprachen

13 13

14 14

15 15 PHP Bibliotheken Zend_Http_Client, http://framework.zend.comhttp://framework.zend.com PHPillow, http://kore-nordmann.de/projects/phpillow/index.htmlhttp://kore-nordmann.de/projects/phpillow/index.html CouchPHP, http://svn.pollinimini.net/couchphp/trunk/http://svn.pollinimini.net/couchphp/trunk/ PHPCouch, http://www.phpcouch.org/http://www.phpcouch.org CouchDB C-Extension, http://www.topdog.za.net/php_couchdb_extension http://www.topdog.za.net/php_couchdb_extension

16 16

17 17 Map & Reduce

18 18 Map & Reduce Ist eine Art, Datenbestände abzufragen, Die Kombination von Map&Reduce nennt CouchDB „View“ Besteht aus zwei/drei nacheinander gelagerten Schritten, wobei der Reduce Schritt n-Mal wiederholt werden kann Map Bildet Paare aus Schlüssel und Wert Für jedes Element aus der gesamten Datenmenge Reduce / Rereduce Übernimmt die Zwischenergebnisse aus der Map-Phase oder der vorherigen Reduce-Phase (= Rereduce) Kann Berechnungen auf Basis der Daten durchführen

19 19 Beispiel - Map Die Map-Funktion emittiert alle Tags aus der Liste jedes Dokuments Der Key ist die String-Repräsentation des Tags Der Key ist der Wert für genau diesen Tag Über Werte != 1 könnte man eine Gewichtung abbilden. CouchDB unterstützt Range-Angaben in Views function(doc) { for (tag in doc.tags) { emit(doc.tags[tag], 1); }

20 20 Beispiel Map&Reduce Über die Reduce-Funktion wird die Summe der Werte ermittelt Die Reduce-Funktion bekommt alle Werte aus der Map, also das gesamte Zwischenergebnis Damit die Vorkommnisse der Tags gezählt werden, muss in CouchDB der View mit dem Parameter „group“ aufgerufen werden. Damit werden doppelte Keys vor dem Reduce zusammengeführt. Dieser Vorgang wird auch „Combine“ Phase genannt Beim Combine werden nur die Keys gruppiert, nicht die Werte. Bei 12 Tags bleibt 12x der Wert 1 stehen, alle gleichen Keys (= Tags) werden jedoch Gruppiert. => Tag - Cloud Beispiel! function(doc) { for (tag in doc.tags) { emit(doc.tags[tag], 1); } function(keys, values) { return sum(values); }

21 21 Vor- und Nachteile von Map & Reduce Vorteile Hohes Maß an Parallelisierung möglich Komplexe Ergebnismengen sind möglich In CouchDB ist das Anlegen und Abfragen von Views sehr einfach Nachteile Simple „WHERE“ Abfragen sind kaum möglich Ohne Parallelisierung mit erhöhter Komplexität wenig sinnvoll Keine Indizes auf Feld-Ebene -> „Alles oder nichts“

22 22 Replikation

23 23 Replikation einfach gemacht Replikation findet über HTTP statt Konfiguration über Futon Dokumente werden auf Attributsbasis synchronisiert Konflikte werden werden, sofern möglich, automatisch behoben Unlösbare Konflikte werden ausgesteuert und im Futon angezeigt

24 24 Anwendungsbeispiele

25 25 Arbit Tracker Geschrieben in PHP5.3 von Kore Nordmann Nutzt CouchDB als alleinige Datenbank Nutzt Zend_Seach_Lucene als Volltext- Suche Infos http://arbitracker.org/news.htmlhttp://arbitracker.org/news.html

26 26 CouchApps Applikationen die direkt auf der CouchDB ausgeführt werden Bestehen aus HTML5 und Javascript Infos unter http://couchapp.orghttp://couchapp.org Beispiel App „Blue Ink“ ist ein kleines CMS basierend auf CouchDB Infos http://www.bigbluehat.com/products/bluei nk_cms http://www.bigbluehat.com/products/bluei nk_cms

27 27 Sonstige Anwendungsgebiete Content / Webservice Caching Queue Persistenz Personen Datenbank (ähnlich Filemaker oder Access) Warenkorb für ein Shop System Blogs Map & Reduce Engine für RDBMS (es gibt sicherlich bessere M&R Frameworks)

28 28 CouchDB... und sonst noch?

29 29 MongoDB Funktionsumfang „ähnlich“ zu CouchDB Es gibt Attributs-basierte Indexe Generell auf hohe Performanz ausgelegt Keine Versionierung Map & Reduce ist für die Verarbeitung von Daten intern, nicht für die Abfrage Native PHP C-Extension und div. Bibliotheken vorhanden Kein MVCC, sondern update-in-place, => BASE statt ACID

30 30 Amazon SimpleDB Cloud-basierte Datenbank SOAP & ReST-ähnliche API Jede Query darf max. 5 Sekunden dauern (von Amazon festgelegt) Format ist XML, kein JSON PHP Adapter von Amazon bereitgestellt Kostenpflichtig In Deutschland wg. Datenschutz nicht für pers. Bez. Daten einsetzbar

31 31 Google Bigtable (AppEngine) Gibt es nativ nur für Python & Java Kann per Quercus auch für PHP verwendet werden „Endloser Speicher“ für normale Inhalte Begrenzter Speicher für Binärdaten Abfragemöglichkeiten eingeschränkt vorhanden In Deutschland wg. Datenschutz eingeschränkt für pers. Bez. Daten einsetzbar

32 32 Vielen Dank für die Aufmerksamkeit!

33 33 Fragen


Herunterladen ppt "1 Dokumentenorientierte Datenbanken Eine Einführung am Beispiel von CouchDB."

Ähnliche Präsentationen


Google-Anzeigen