Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Wilhelm Neumann Geändert vor über 8 Jahren
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
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.