Viele Webanwendungen verwenden zur Speicherung von Daten sogenannte NoSQL-Datenbanken. Deren bekanntester Vertreter ist derzeit wohl MongoDB, aber gestartet wurde der Trend von einer NoSQL-Datenbank, die etwas in Vergessenheit geraten ist: CouchDB [1]. Vom ehemaligen IBM-Mitarbeiter Damien Katz gestartet, ist CouchDB zu einem Apache-Projekt geworden. Ein herausragendes Merkmal von CouchDB ist dessen Fähigkeit zur Datensynchronisation, also Dokumente zwischen Datenbanken zu replizieren und dabei Konflikte aufzulösen.
Im Lauf der Jahre sind in CouchDB viele Patches der Entwickler von Cloudant geflossen, einem Unternehmen, das mit Bigcouch eine skalierende, kommerzielle Version von CouchDB entwickelte und 2014 ausgerechnet von IBM aufgekauft wurde. Mit der neuen Version 2.0 von CouchDB wurde der Code von Bigcouch, der die Datenbank über einen Cluster hinweg skaliert, in das Projekt integriert.
Die in CouchDB gespeicherten Daten müssen keiner vorab erstellten Definition genügen, dem bei relationalen Datenbanken so genannten Schema, weshalb CouchDB auch als schemalose Datenbank bezeichnet wird. Die Flexibilität geht soweit, dass Dokumente einer einzigen Sammlung auch unterschiedliche Elemente/Felder enthalten dürfen. Als Netzwerkprotokoll verwendet CouchDB das Webprotokoll HTTP und liefert Daten im JSON-Format aus. Gemäß dem REST-Prinzip, das Datenservices auf der Basis von HTTP realisiert, stehen zum Speichern in der Datenbank die Operationen PUT oder POST, zum Lesen der bekannte GET-Request zur Verfügung. Im einfachsten Fall sieht eine Abfrage so aus wie eine Web-URL
http://Server:5984/Datenbank/Ressource
Eine Liste aller Datenbanken liefert CouchDB bei einem Aufruf von "http://»Server:
«
5984/_all_dbs".
CouchDB ist in Erlang geschrieben, der ehemals hausinternen Programmiersprache von Ericsson, die unter Webentwicklern eine kleine Fangemeinde gewonnen hat. Deshalb ist zum Kompilieren von CouchDB die Erlang-Umgebung nötig, die zwar alle gängigen Distributionen in den Repositories führen, aber nicht unbedingt in der passenden Version. CouchDB 2.0 setzt mindestens Erlang R16B03-1, R17 oder R18 voraus. Glücklicherweise bietet Erlang Solutions, eine Firma, die Dienstleistungen rund um Erlang verkauft, Binärpakete für viele Linux-Distributionen an. Es genügt, das passende Paket von [2] herunterzuladen und zu installieren:
$ wget http://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
$ sudo dpkg -i erlang-solutions_1.0_all.deb
$ sudo apt-get update
$ sudo apt-get -f install
Wir haben einen Release-Kandidaten von CouchDB getestet und aus dem Quellcode selbst übersetzt. Das wird mit dem Erscheinen der finalen Version wohl nicht mehr nötig sein, aber wenn Erlang und ein paar Abhängigkeiten installiert sind, lässt sich CouchDB mit den üblichen Aufrufen der Befehle »configure
«
und »make
«
kompilieren:
$ sudo apt-get -y install build-essential erlang-base erlang-dev erlang-manpages erlang-eunit erlang-reltool erlang-nox libicu-dev libmozjs185-dev libcurl4-openssl-dev pkg-config
»make install
«
installiert die Dateien per Default unterhalb von "/usr/local". Alternative Verzeichnisse stellen Sie mit "configure" ein. Mehr Informationen dazu liefert ein Aufruf von
configure --help | grep DIRECTORY
Im Test trat im letzten Schritt reproduzierbar das Problem auf, dass der Installer einige Manpages nicht finden konnte. Es lässt sich – wenig elegant – dadurch lösen, dass man die ins Leere zeigenden Symlinks löscht. Alternativ zum Selbstkompilieren steht eine Installation per Docker zur Verfügung [3].
Um CouchDB zu starten, sind keine Root-Rechte nötig, allerdings muss der entsprechende User Schreibrechte in einigen Verzeichnissen besitzen. Die CouchDB-Dokumentation empfiehlt, für diesen Zweck den Benutzer "couchdb" anzulegen, dem Sie die Dateien und Verzeichnisse übereignen:
$ sudo mkdir -p /usr/local/var/run/couchdb
$ sudo mkdir -p /usr/local/var/log/couchdb
$ sudo chown -R couchdb /usr/local/var/lib/couchdb
$ sudo chown -R couchdb /usr/local/var/log/couchdb
$ sudo chown -R couchdb /usr/local/var/run/couchdb
$ sudo chown -R couchdb /usr/local/lib/couchdb/etc
Alternativ können Sie eine Gruppe "couchdb" anlegen, sich selbst dieser Gruppe hinzufügen und den betreffenden Verzeichnissen Gruppenschreibrechte geben. Wenn die Rechte stimmen, lässt sich die Datenbank einfach mit dem Aufruf von couchdb starten. Die Quellcode-Distribution enthält auch das Python-Skript "dev/run", das auf dem Rechner testweise einen Cluster mit drei CouchDB-Nodes startet. Dazu müssen Sie nicht einmal "make install" ausführen, sondern können die Anwendung nach dem Kompilieren direkt im Quellcode-Verzeichnis starten. Darüber hinaus ist auch eine Konfigurationsdatei für HAProxy vorhanden, der als Frontend und Loadbalancer für einen CouchDB-Cluster fungieren kann.
Als dieser Artikel entstand, gab es noch zwei weitere Wege, CouchDB 2.0 zu installieren: ein Ansible-Playbook, das CouchDB auf CentOS 6 installiert, sowie ein Docker-Image, das mit dem oben erwähnten Aufruf lokal einen Cluster mit drei Nodes startet.