Login
Newsletter
Werbung

Do, 8. Juli 2010, 15:58

CouchDB – Datenbank mal anders

Wenn von einer Datenbank gesprochen wird, denkt man normalerweise als erstes an relationale, SQL-basierte Datenbanken wie Oracle, MySQL, PostgreSQL oder SQLite. Aber es gibt auch einen völlig anderen Ansatz: die dokumentenorientierte Datenbank CouchDB. Der Name der Datenbank steht in erster Linie nicht für das besonders bequeme Arbeiten, sondern ist ein Akronym für Cluster Of Unreliable Commodity Hardware Data Base.

Die Entwicklung von CouchDB wurde 2005 begonnen, ab 2008 wurde das Projekt unter der Obhut der Apache Foundation fortgeführt. Dort hat CouchDB den Status eines Top-Level-Projekts, das heißt die Datenbank steht prinzipiell auf einer Stufe mit dem Apache-Webserver oder Tomcat.

Dieser Artikel und das angeschlossene Beispiel beziehen sich auf CouchDB in der Version 0.10. Diese ist z.B. in der aktuellen Ubuntu-Version 10.04 Lucid Lynx enthalten. Große Teile des Artikels gelten aber auch für die neuere Version 0.11, welche im April 2010 erschienen ist.

Dokument vs. Relation

Die Herangehensweise von CouchDB ist komplett anders als bei relationalen Datenbanken: Eine Datenbank besteht aus beliebig vielen Dokumenten, welche wiederum aus beliebig vielen Schlüssel-Werte-Paar-Feldern bestehen können. Dabei spielt es keine Rolle, ob die Schlüssel im Dokument A denen im Dokument B entsprechen oder ob die Anzahl der Einträge im Dokument C der Anzahl in Dokument A entspricht. Außerdem besteht keine Notwendigkeit, die Art des Werts (z.B. Text, Zahl, Wahrheitswert) vorab festzulegen. Die Datenbank ist komplett schemalos, es gibt keine Relationen und keinen Zwang für vordefinierte Felder. Dies ist ein deutlicher Unterschied zu relationalen Datenbanken, wo die Arbeit in der Regel mit dem Entwurf eines Datenbankschemas, dem sogenannten Entity-Relationship-Diagramm beginnt. Anschließend müssen ein oder mehrere Tabellen angelegt und darin die Spalten, deren Typ (z.B. Text, Fließkommazahl, Datum) sowie die Feldlänge festgelegt werden.

Das Arbeiten mit CouchDB kann dagegen direkt begonnen werden, es ist keinerlei Vorabdefinition notwendig. Allerdings ist es natürlich auch hier sinnvoll, insbesondere bei größeren Projekten, sich vorher zu überlegen, wie man seine Daten speichern möchte, um diese später möglichst sinnvoll und einfach abfragen zu können.

Installation

CouchDB ist für eine Vielzahl von Betriebssystemen verfügbar: Linux, OpenSolaris, Windows, MacOS sowie diverse BSD-Varianten. Viele aktuelle Linux-Distributionen bieten fertige Pakete über die Paketquellen an. Weitere Installationsanleitungen für alle Systeme findet man im Wiki von CouchDB.

Je nach Installationsmethode muss man CouchDB zuerst noch von Hand starten. Hat man die Datenbank über die Paketverwaltung installiert, passiert dies normalerweise automatisch, kann ansonsten aber über den Befehl couchdb -b erfolgen.

Nach erfolgreicher Installation läuft CouchDB dann auf localhost und lauscht auf Port 5984. Soll die Datenbank über das Internet erreichbar sein, so muss man in der Konfiguration die Bind-Addresse auf 0.0.0.0 umstellen. Je nach Notwendigkeit kann auch der Port geändert werden.

Technik und Schnittstellen

CouchDB ist in der Programmiersprache Erlang geschrieben. Die Datenabfrage erfolgt mittels JavaScript, welches von Mozillas JavaScript Engine Spidermonkey ausgeführt wird. Die Datenbank erfüllt das ACID-Prinzip.

Ergebnisse aus Abfragen werden in der JSON-Notation zurückgegeben, und auch die Daten werden in Form von JSON-Objekten gespeichert. Erlaubt ist hierbei alles, was ein gültiges JSON-Objekt ist, also z.B. Strings, Boolesche Wahrheitswerte, Datumsobjekte, JavaScript-Arrays usw. JSON hat den Vorteil, dass es zum einen für Menschen und Maschinen gut lesbar und zum anderen ein Quasi-Standard im Internet für das Versenden von Daten ist. Über Javascript hinaus können viele andere Programmiersprachen auch mit JSON-Objekten umgehen.

Eine weitere Besonderheit ist, dass das API von CouchDB komplett HTTP-basiert ist. Es unterstützt REST; Abfragen werden über HTTP-Anfragen durchgeführt. Genutzt werden hierbei die Anfragetypen GET, POST, PUT, DELETE und die CouchDB-spezifische Erweiterung COPY. Das HTTP-basierte API ist insofern bemerkenswert, als dass somit jede Programmiersprache, welche HTTP-Anfragen unterstützt, direkt mit CouchDB kommunizieren kann, ohne dass ein Zusatzmodul notwendig ist. Somit ist es auch möglich, mittels HTML und JavaScript Applikationen zu schreiben, die Daten aus der Datenbank verarbeiten, komplett clientseitig laufen und nichts weiter brauchen als einen über das Internet erreichbaren CouchDB-Server sowie einen Browser mit aktiviertem JavaScript.

Man kann auch noch einen Schritt weitergehen und ganz auf eine Programmiersprache verzichten. HTTP-Anfragen kann man z.B. über das auf Linux- und Unix-Systemen gängige Kommandozeilen-Programm curl absetzen. Oder man nutzt das betagte Telnet-Protokoll. Wer es komfortabler mag, kann aber auch auf eines der CouchDB-Module zurückgreifen, welche für eine Vielzahl von Programmiersprachen verfügbar sind.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung