AA_sofa_malalena_sxc_1341306.jpg

© Malalena, sxc.hu

Daten für Web-Applikationen verwalten mit der NoSQL-Datenbank CouchDB

Komfortables Sofa

Mit CouchDB und wenigen Javascript-Kenntnissen programmieren Sie im Nu eine Web-Applikation inklusive Datenbank. Ganz ohne Umdenken greift das neue Konzept aber nicht.

Eine Datenbank aufzusetzen, übersteigt die Möglichkeiten der meisten Heimanwender. Bietet der gemietete Webspace zusätzliche keine vorkonfigurierte Datenbank an, war das früher der Todesstoß für einigermaßen komplexe Anwendungen im Web. CouchDB [1] eröffnet einen einfacheren Weg, um nicht nur Daten, sondern komplette Programme zu speichern und auszuliefern.

Die Wurzeln des Projektes reichen zurück bis in die Zeit kurz nach der Jahrtausendwende: Nach seinem Studium arbeitete Damien Katz lange Zeit bei IBM an Lotus Notes. 2002 verließ er seinen Arbeitgeber und begann eine eigene Open-Source-Datenbank zu entwickeln. Sie sollte wie die von Notes arbeiten, aber wesentlich mehr Funktionen bieten. Als Programmiersprache wählte er Erlang [2] – mit dem sich die parallelen Zugriffe auf die gespeicherten Daten besonders einfach umsetzen ließen. Die erste Version der CouchDB getauften Datenbank erschien schließlich 2005.

Da Damien Katz in dieser Phase kaum Geld mit der Software verdiente, arbeitet er kurzzeitig für MySQL, das Unternehmen hinter der gleichnamigen Datenbank. Schließlich landete er wieder bei IBM. Dort durfte er weiterhin an CouchDB schrauben, musste aber die Rechte an der Datenbank an die Apache Software Foundation übergeben. Seit Ende 2008 ist das Programm ein vollwertiges Apache-Projekt und steht somit komplett unter der freien Apache-Lizenz.

2010 erreichte CouchDB die Versionsnummer 1.0. Bis dahin lief sie jedoch schon in zahlreichen Projekten und erfreute sich einer recht große Anhängerschaft. Mittlerweile gehört die Applikation zu den bekanntesten Datenbanken, die auf SQL als Abfragesprache verzichten. Solche Datenbanksysteme firmieren derzeit unter dem zwar modischen, aber leicht missverständlichen Begriff NoSQL.

Installation

CouchDB liegt einigen wenigen Distributionen bereits bei – allerdings mitunter in ziemlich alten Versionen. Das Repository von Ubuntu 12.04 bietet beispielsweise die Version 1.0.1 an, zum Redaktionsschluss aktuell war aber bereits die Version 1.2.0. Folglich kommen Sie meist nicht umhin, selbst den CouchDB-Quellcode zu übersetzen.

Dazu installieren Sie zunächst über den Paketmanager Erlang OTP (in der Version R12B5 oder höher), Make, GCC für C++, ICU, OpenSSL, Mozilla SpiderMonkey (mindestens in Version 1.7), Libcurl und Help2man. Unter Ubuntu 12.04 und Debian geht das am schnellsten über den folgenden Befehl in einem Terminal:

$ sudo apt-get install build-essential erlang erlang-eunit libicu-dev libmozjs-dev libcurl4-openssl-dev

Anschließend laden Sie von der CouchDB-Homepage oder der Heft-DVD das Archiv herunter und entpacken Sie es im Home-Verzeichnis. Dort übersetzen und installieren Sie CouchDB mit den folgenden drei Befehlen:

$ ./configure
$ make
$ sudo make install

Anschließend starten Sie CouchDB via sudo couchdb. Steuern Sie jetzt in einem Browser die Adresse http://127.0.0.1:5984/ an, meldet sich CouchDB mit {"couchdb":"Welcome","version":"1.2.0"}.

Schriftstücke

CouchDB speichert immer komplette Dokumente – wenn auch nicht Dateien im Sinne eines LibreOffice-Dokuments, sondern Textdateien im Austauschformat JSON [3]. Listing 1 zeigt ein kleines Beispiel für ein solches Dokument. In den geschweiften Klammern stehen alle zu speichernden Informationen. Um diese später einfacher auffinden und unterscheiden zu können, erhält jeder Wert zunächst einen eindeutigen Namen, den sogenannten Key.

Listing 1

{
"name": "Max Mustermann",
"strasse": "Musweg 4",
"ort": "Beidorf",
"plz": 74214,
"telefonnummern": [ "0123/4546780", "9876-543201" ]
}

Listing 1 führt beispielsweise die Ortsangabe Beidorf unter dem Key ort. Der Key selbst steht immer in Anführungszeichen. Ihm folgen ein Doppelpunkt und dann die eigentliche Information. Sofern es sich dabei um einen Text handelt, steht dieser ebenfalls in Anführungszeichen, bei Zahlen dürfen sie diese weglassen.

Die zu speichernden Daten trennen jeweils Kommas – in Listing 1 am Ende einer jeden Zeile. Aufzählungen beziehungsweise Listen stehen zwischen eckigen Klammern, wobei ebenfalls wieder Kommata die einzelnen Werte trennen. Welche Daten ein Dokument enthält, dürfen Sie frei festlegen. Als Werte erlaubt die Software übrigens wiederum JSON-Strukturen, wie das Beispiel aus Listing 2 zeigt.

Listing 2

{
"name": "Max Mustermann"
"bestellung": 1
"produkte": [
{"bestellung": "T-Shirt"
"anzahl": 1
},
{
"bestellung": "Schuhe"
"anzahl": 2
} ]
}

Anfragen und Anweisungen nimmt CouchDB über das HTTP-Protokoll entgegen, das Browser zum Abrufen von Webseiten verwenden. Vereinfacht gesagt: Sie rufen spezielle URLs auf, die CouchDB dann wiederum als Anweisungen interpretiert. Das Prinzip ist unter dem Namen RESTful [4] bekannt.

Am einfachsten setzen Sie solche Anfragen über das Hilfsprogramm cURL [5] ab, das sich in den Repositories aller gängigen Distributionen findet. Eine neue Datenbank adressbuch erzeugen Sie über den folgenden Aufruf:

$ curl -X PUT http://127.0.0.1:5984/adressbuch

Das Kommando PUT bezeichnet die entsprechende HTTP-Methode. Sie weist CouchDB an, etwas zu erstellen oder zu verändern. Hinter der Adresse 127.0.0.1 verbirgt sich der eigene Rechner, auf dem CouchDB standardmäßig am TCP-Port 5984 lauscht. CouchDB liefert also grundsätzlich auch alle Ausgaben in der JSON-Notation zurück. Die Rückmeldung auf diesen Befehl sollte {"ok":true} lauten.

Nummern-Girl

Die erstellte Datenbank können Sie jetzt mit Daten füllen – wie etwa denen aus Listing 1. Wie alle in CouchDB gespeicherten Dokumente benötigt auch dieses allerdings noch einen eindeutigen Namen – CouchDB speichert ihn später im Dokument unter dem Key _id.

Sie dürfen sich für jedes Dokument selbst einen Namen ausdenken, solange er keine Sonderzeichen enthält und nicht mit einem Unterstrich beginnt – solche Namen reserviert CouchDB für interne Zwecke. Wichtig ist, dass Sie einen eindeutigen Namen wählen. Um das sicherzustellen, generieren Sie diesem am einfachsten über CouchDB (Abbildung 1):

$ curl -X GET http://127.0.0.1:5984/_uuids
Abbildung 1: Den Namen des Dokuments hängen Sie einfach an die URL an. In diesem Fall dient als Name die zuvor von CouchDB erzeugte UUID.

Als Ergebnis erhalten Sie eine lange, kryptische Zeichenkette: einen sogenannten Universally Unique Identifier, kurz UUID [6]. Unter Verwendung des Namens können Sie jetzt das Dokument in die Datenbank stecken, den dazu nötigen cURL-Befehl zeigt Listing 3.

Listing 3

$ curl -X PUT http://127.0.0.1:5984/adressbuch/6825dc0758d90d1ec96b57dbdc000c38 -d '{"name": "Max Mustermann","strasse": "Musweg 4","ort": "Beidorf","plz": 74214,"telefonnummern": [ "0123/4546780", "9876-543201" ]}'

Durch das angehängte Dokument verwandelt der Befehl sich in einen ziemlich unhandlichen Bandwurm. Wollen oder müssen Sie Dokumente per Hand in die Datenbank stopfen, sollten Sie deshalb die Hilfe der mitgelieferten Oberfläche in Anspruch nehmen. Sie erreichen sie mit einem Browser unter der Adresse http://127.0.0.1:5984/_utils/.

Sie sehen dann die in CouchDB eingebaute Web-Applikation namens Futon (Abbildung 2). In dieser klicken Sie die entsprechende Datenbank in der Liste an, im Beispiel also das adressbuch. Die anderen Datenbanken, deren Name mit einem Unterstrich beginnt, nutzt CouchDB für interne Zwecke. Im Zweifelsfall erstellen Sie mit Create Database unkompliziert eine neue Datenbank.

Abbildung 2: CouchDB bringt ein eingebautes Frontend mit dem Namen Futon mit, über das Sie die Datenbanken etwas komfortabler verwalten.

In der geöffneten Datenbank legt Futon über New Document ein weiteres leeres Dokument an und vergibt dafür automatisch eine ID. Die müssen Sie nur über die entsprechende Checkbox bestätigen – oder aber den Vorschlag mit einer eigenen ID überschreiben.

Per Add Field ergänzen Sie jetzt sukzessive weitere Datenfelder. Für eine Änderung genügt ein Klick auf den entsprechenden Eintrag (Abbildung 3). Alternativ geben Sie auf dem Register Source das komplette Dokument in der JSON-Notation ein beziehungsweise bearbeiten es.

Abbildung 3: Futon ermöglicht das komfortable Anlegen und Bearbeiten eines Dokuments – hier der Adresse von Max Mustermann.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Kommentare

Infos zur Publikation

LU 09/2016: Ciao, Windows!

Digitale Ausgabe: Preis € 5,99
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Aktuelle Fragen

Scannen nicht möglich
Werner Hahn, 19.08.2016 22:33, 3 Antworten
Laptop DELL Latitude E6510 mit Ubuntu 16,04, Canon Pixma MG5450. Das Drucken funktioniert, Scann...
Wie kann man das berichtigen
Udo Muelle, 17.07.2016 20:39, 1 Antworten
Fehlschlag beim Holen von http://extra.linuxmint.com/dists/rosa/main/binary-i386/Packages Hash-S...
Installation Genimotion
Horst Müller, 15.07.2016 17:00, 1 Antworten
Hallo, ich kann Genimotion nicht installieren. Folgende Fehlermeldung habe ich beim Aufruf erh...
Probleme beim Hochfahren der Terastaion 5400 mit Unix-Distrib
Sheldon Cooper, 10.07.2016 09:32, 0 Antworten
Hallo ihr lieben, habe seit zwei Tagen das Problem, das das NAS (Raid5) nicht mehr sauber hoch...
Mit Firewire Videos improtieren?
Werner Hahn, 09.06.2016 11:06, 5 Antworten
Ich besitze den Camcorder Panasonic NV-GS330, bei dem die Videos in guter Qualität nur über den 4...