Dokumentenorientiere Datenbanken am Beispiel CouchDB

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

description

 

Transcript of Dokumentenorientiere Datenbanken am Beispiel CouchDB

Page 1: Dokumentenorientiere Datenbanken am Beispiel CouchDB

1

Dokumentenorientierte Datenbanken

Eine Einführung am Beispiel von CouchDB

Page 2: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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/mariomueller

Twitter: http://twitter.com/xenji

Github: http://github.com/xenji

Page 3: Dokumentenorientiere Datenbanken am Beispiel CouchDB

3

Agenda

Schemalosigkeit und Dokumente

CouchDB ... und Lotus Domino?

ReST on the CouchDB

Batteries included

Map & Reduce

Anwendungsbeispiele

CouchDB ... und sonst noch?

Page 4: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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 ;)

Page 5: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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

Page 6: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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)

Page 7: Dokumentenorientiere Datenbanken am Beispiel CouchDB

7

CouchDB

Page 8: Dokumentenorientiere Datenbanken am Beispiel CouchDB

8

CouchDB

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

Page 9: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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

Page 10: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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

Page 11: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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

Page 12: Dokumentenorientiere Datenbanken am Beispiel CouchDB

12

Batteries Included

Apache Futon, eine eingebaute GUI

Versionierung von Dokumenten

Authentifizierung via HTTP

ReST API

JavaScript & JSON

Plugins für weitere Sprachen

Page 13: Dokumentenorientiere Datenbanken am Beispiel CouchDB

13

Page 14: Dokumentenorientiere Datenbanken am Beispiel CouchDB

14

Page 15: Dokumentenorientiere Datenbanken am Beispiel CouchDB

15

PHP Bibliotheken

Zend_Http_Client, http://framework.zend.com

PHPillow, http://kore-nordmann.de/projects/phpillow/index.html

CouchPHP, http://svn.pollinimini.net/couchphp/trunk/

PHPCouch, http://www.phpcouch.org/

CouchDB C-Extension, http://www.topdog.za.net/php_couchdb_extension

Page 16: Dokumentenorientiere Datenbanken am Beispiel CouchDB

16

Page 17: Dokumentenorientiere Datenbanken am Beispiel CouchDB

17

Map & Reduce

Page 18: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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

Page 19: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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); }}

Page 20: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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);

}

Page 21: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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“

Page 22: Dokumentenorientiere Datenbanken am Beispiel CouchDB

22

Replikation

Page 23: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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

Page 24: Dokumentenorientiere Datenbanken am Beispiel CouchDB

24

Anwendungsbeispiele

Page 25: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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.html

Page 26: Dokumentenorientiere Datenbanken am Beispiel CouchDB

26

CouchApps

Applikationen die direkt auf der CouchDB ausgeführt werden

Bestehen aus HTML5 und Javascript

Infos unter http://couchapp.org

Beispiel App „Blue Ink“ ist ein kleines CMS basierend auf CouchDB

Infos http://www.bigbluehat.com/products/blueink_cms

Page 27: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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)

Page 28: Dokumentenorientiere Datenbanken am Beispiel CouchDB

28

CouchDB ... und sonst noch?

Page 29: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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

Page 30: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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

Page 31: Dokumentenorientiere Datenbanken am Beispiel CouchDB

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

Page 32: Dokumentenorientiere Datenbanken am Beispiel CouchDB

32

Vielen Dank für die Aufmerksamkeit!

Page 33: Dokumentenorientiere Datenbanken am Beispiel CouchDB

33

Fragen