MongoDB, HBase, Redis, Apache Cassandra, Couch DB

Datenflut bereitet NoSQL den Weg

23.04.2013
Von Eberhard Wolff, Kai Spichale, Thomas  Westphal und Andreas Hartmann

CouchDB

CouchDB steht für "Cluster of unreliable Commodity Hardware Database". Bei diesem seit 2005 laufenden Projekt handelt es sich um einen Document Store. Der Vorteil dieser Datenbank ist, dass Dokumente sowohl dem natürlichen Objekt als auch dessen Repräsentation in einer objektorientierten Sprache entsprechen können. Ferner muss der Aufbau der Dokumente vor der Speicherung nicht bekannt sein, denn es handelt sich bei CouchDB um eine schemalose Datenbank.

Keine Schreib-Lese-Blockaden

Die Dokumente werden im JSON-Format verwaltet. Dabei versieht die Datenbank jedes JSON-Objekt mit einem eindeutigen Schlüssel und mit einer Versionsnummer. Mit Hilfe der Versionsnummer verwaltet CouchDB die konkurrierenden Zugriffe. Dazu wird die Versionsnummer bei jeder Änderung eines Dokuments erhöht. CouchDB erkennt beim Schreiben die Konflikte und meldet sie dem jeweiligen Client. Die bei anderen Systemen durch Locking entstehenden Schreib-Lese-Blockaden treten somit nicht auf. Dieses System, Multi-Version Concurrency Control genannt, wird auch bei der Replikation verwendet, um Konflikte zu entdecken und zu beheben.

Um auf Dokumente nicht nur anhand des Schlüssels zuzugreifen, verbindet CouchDB den dokumentenorientierten Ansatz mit der von Apache Hadoop bekannten MapReduce-Technik. Diese Abfragen werden bei CouchDB als "View" bezeichnet. Eine Abfrage stellt dabei eine Sicht auf die Daten dar und verändert diese nicht. Sie besteht aus einer Map- und aus einer optionalen Reduce-Funktion. Beide werden in Javascript beschrieben und können in CouchDB hinterlegt werden. Permanente Views werden, im Gegensatz zu temporären Views, als Design-Dokumente bezeichnet, die von CouchDB indiziert werden. Ein performanter Zugriff ist somit gewährleistet. Das Ergebnis der Views sind Schlüssel-Werte-Paare. Dabei besteht sowohl der Schlüssel als auch der Wert aus einem JSON-Dokument.

Der Zugriff auf Daten erfolgt über eine HTTP-REST-Schnittstelle. Für viele Programmiersprachen sind zusätzlich Bibliotheken verfügbar. Die Administration erfolgt per HTTP-REST oder über die Web-Oberfläche Futon. Mit dem in CouchDB integrierten Javascript-Web-Framework CouchApp lassen sich Web-Anwendungen erstellen, die direkt in der CouchDB laufen. Ein zusätzlicher Web-Server entfällt dabei.

Schwach ausgeprägte Konsistenz

CouchDB verfügt über einen inkrementellen Replikationsmechanismus mit schwacher Konsistenz und bidirektionaler Konfliktbehandlung: Konflikte durch Änderungen an einem Objekt auf verschiedenen Servern werden erkannt und behandelt. Dabei bleiben alle Versionen erhalten. Die Replikation lässt sich sehr einfach für fortlaufende Replikation einrichten oder ad hoc verwenden. Horizontale Skalierung durch Sharding beherrscht CouchDB nicht. Nur durch zusätzliche Produkte, die als Proxy zwischen Client und Datenbank arbeiten, kann Sharding realisiert werden. Das Open-Source-Projekt BigCouch bietet ebenfalls eine skalierbare Lösung für CouchDB an.

Die Datenbank ist zum größten Teil in der Programmiersprache Erlang geschrieben und für die meisten Plattformen verfügbar. Sogar auf einem Android-Smartphone oder auf einem iPhone kann eine CouchDB-Instanz betrieben werden. Auch Cloud-Angebote wie Cloudant und Iris Couch lassen sich nutzen.

CouchDB als Download sowie weitere Informationen zum Thema bieten die Apache Software Foundation (http://couchdb.apache.org) und die Firma Couchbase Inc. (http://www.couchbase.com). (ph)

CouchDB

Vorteile:

+ Flexibel, da die Dokumente keinem Schema entsprechen müssen;

+ Dokumente entsprechen sehr gut natürlichen Objekten: einfaches Design, kein objektrelationales Mapping und keine Normalisierung;

+ einfache Bedienung: einfache Web-Schnittstellen und bekannte Techniken wie HTTP-REST, JSON und Javascript;

+ einfacher bidirektionaler Replikationsmechanismus;

+ skaliert sowohl nach oben (Cluster) als auch nach unten (Smartphone).

Nachteile:

- Genügt keinen hohen Konsistenzanforderungen.

Im Video: NoSQL-Datenbanken - CouchDB