Dieses Tutorial ist in Arbeit.
CouchDB ist eine dokumentorientierte Datenbank. In meinem Blog habe ich schon ausführlich erklärt, was das ist. Die Installation wird im Ubuntuusers.de Wiki beschrieben.
Da CouchDB eigentlich ein Datenbankserver UND ein Webserver ist, wird für einen Teil des Tutorials der Browser verwendet. Um zu testen, ob CouchDB läuft, öffnet man diesen Link http://127.0.0.1:5984/ Die Antwort sollte in etwa lauten
{"couchdb":"Welcome","version":"1.0.1"}
Die Version sollte mindestens 1.0.1 sein. Da im Browser nicht alles so ohne weiteres funktioniert wird auch noch das Programm curl benötigt. Da es nicht zu einer Standard Ubuntu Installation gehört muss es installiert werden.
~$ sudo apt-get install curl
Der Befehl
~$ curl http://127.0.0.1:5984/
sollte das gleiche Ergebnis liefern wie der Browser.
~$ curl -X GET http://127.0.0.1:5984/_all_dbs
Mit diesem Befehl kann man abfragen, welche Datenbanken auf dem Server existieren. Bei einem frisch installierten Server sollte nur eine Datenbank vorhanden sein. Die Ausgabe des Befehls sieht so aus.
["_users"]
Um eine Datenbank anzulegen wird das Programm curl benötigt, denn für diese Aktion benötigt man die PUT Anweisung.
~$ curl -X PUT http://127.0.0.1:5984/foo ~$ curl -X PUT http://127.0.0.1:5984/bar
Jetzt wurden zwei Datenbanken angelegt. Der Rückgabewert lautet jeweils
{"ok":true}
Führt man jetzt noch einmal den Befehl zur Datenbankabfrage aus sieht man das Ergebnis
~$ curl -X GET http://127.0.0.1:5984/_all_dbs ["foo","bar","_users"]
Wie man sieht erhält man einmal ein Ergebnis in geschweiften Klammern {} und einmal in eckigen Klammern []. Das Ergebnis in den geschweiften Klammern ist ein sogenanntes Dictionary oder assoziatives Array. Jeder Eintrag in einem Dictionary besteht aus einem Schlüssel und einem Wert, getrennt von einem Doppelpunkt. In diesem Beispiel lautet der Schlüssel (Key) „ok“ und der Wert (Value) ist true.
Das zweite Ergebnis ist eine Liste, erkennbar an den eckigen Klammern. Die Liste enthält derzeit drei Einträge, getrennt durch ein Komma.
Das Löschen einer Datenbank geschieht mit dem DELETE Kommando.
~$ curl -X DELETE http://127.0.0.1:5984/bar
{"ok":true}
Das Ergebnis ist wieder {„ok“:true}. Um zu testen was passiert, wenn man eine nicht existierende Datenbank löscht führt man den Befehl einfach noch einmal aus.
~$ curl -X DELETE http://127.0.0.1:5984/bar
{"error":"not_found","reason":"missing"}
Wie man sieht erhält man wieder ein Dictionary, jedoch diesmal mit zwei Key/Value Paaren, getrennt durch ein Komma. Man sieht auch, dass die Werte hier in “ “ stehen. Das bedeutet, es handelt sich dabei um Werte vom Datentyp String. Der Wert true steht nicht in Anführungszeichen, da es sich dabei um einen Boolschen Wert handelt. Man erfährt auch in dem Dictionary auch den Grund für den Fehler.
Von dem Erfolg der Löschaktion kann man sich auch noch überzeugen.
~$ curl -X GET http://127.0.0.1:5984/_all_dbs ["foo","_users"]
Wie man sieht handelt es sich bei der Schnittstelle zu CouchDB um ein normales HTTP Protokoll. Es ist daher nicht nur möglich, CouchDB als normalen Datenbankserver für eine beliebige Sprache zu verwenden sondern es ist auch möglich, komplette Webseiten zu erstellen, die vollständig auf dem CouchDB Server laufen.
Im bisherigen Teil des Tutorials wurde gezeigt, wie Datenbanken erstellt und gelöscht werden. Aber was ist eine Datenbank? CouchDB ist ein Datenbank Managementsystem, also ein Server, der beliebig viele Datenbanken verwalten kann. Wenn von einer Datenbank die Rede ist ist also nicht der komplette Server gemeint.
Wer bisher mit relationalen Datenbanken wie MySQL gearbeitet hat kann es am ehesten mit einem Schema vergleichen. Wer jedoch in einer CouchDB Datenbank mehrere Tabellen erwartet wird enttäuscht.
In einer CouchDB werden sogenannte Dokumente abgelegt. Struktur und Inhalt dieser Dokumente ist nahezu beliebig. Man kann sich eine CouchDB Datenbank eher wie einen Ordner vorstellen, in den man zum Beispiel Rechnungen abheftet. Die komplette Rechnung wäre ein einzelnes Dokument.
In jeder Datenbank lassen sich beliebig viele Design Dokumente ablegen. Dabei handelt es sich um eine spezielle Art von Dokumenten, um mit der Datenbank arbeiten zu können. Ein Design Dokument kann zum Beispiel spezielle Funktionen enthalten, um Informationen aus der Datenbank auszulesen.
Views, zu deutsch in etwa „Ansichten“, sind Funktionen in Design Dokumenten, die normalerweise in JavaScript programmiert sind. Ein View liefert ein bestimmtes Ergebnis auf eine Anfrage, zum Beispiel ein einzelnes Dokument, mehrere Dokumente aus einem bestimmten Bereich oder einzelne Informationen aus den Dokumenten.
Mittels Replikation lassen sich Daten zwischen Datenbanken austauschen. Die Datenbanken können dabei auf dem gleichen Server oder auf einem entfernten Server im Internet liegen. Mittels Replikation lassen sich Sicherungen erstellen, Datenbankcluster für hohe Performance aufbauen, Daten auf verschiedenen Rechnern synchron halten und einiges mehr.
Für die Initialisierung reicht es, in einem einfachen Befehl die Adresse beider Datenbanken anzugeben. Die Replikation kann in jeweils eine oder beiden Richtungen und einmalig oder kontinuierlich erfolgen.
Für die Erstellung eines Backups kann man die Replikation verwenden, indem man einfach alle Daten auf einen anderen Server kopiert. Wer die Daten richtig archivieren will sollte dies mit couchdb-dump tun. Die Syntax des Befehls lautet
couchdb-dump [Options] dbname
Der Befehl gibt das Backup in der Konsole aus. Man muss die Ausgabe also in eine Datei umleiten. Möchte man beispielsweise die Datenbank „adressbuch“ auf dem lokalen Server sichern sähe der Befehl so aus
couchdb-dump http://127.0.0.1:5984/adressbuch > adressbuch.txt
Um die Datenbank wieder herzustellen benutzt man den Befehl couchdb-load. Die Syntax lautet
couchdb-load [Options] dbname
Zunächst löscht man eine eventuell existierende Datenbank und erstellt eine leere.
curl -X DELETE http://127.0.0.1:5984/adressbuch curl -X PUT http://127.0.0.1:5984/adressbuch
Anschließend läd man mit couchdb-load das Backup wieder auf den Server.
couchdb-load --input=adressbuch.txt http://127.0.0.1:5984/adressbuch
Weiter geht es auf dem Futon