Login
Newsletter
Werbung

Do, 8. Juli 2010, 15:58

CouchDB – Datenbank mal anders

CouchDB mit curl nutzen

Alternativ zur Weboberfläche kann man CouchDB auch über das HTTP-basierte API abfragen. Dazu werden im Folgenden einige Beispiele unter Verwendung von curl gezeigt. Die Abfragen lassen sich auch auf eine ähnliche Art und Weise per JavaScript über dessen XMLHttpRequest durchführen.

Möchte man den Eintrag in der Programmdatenbank zu gedit komplett abrufen, so geschieht dies mit dem Befehl:

curl -X GET http://localhost:5984/fm/Gedit

Das Ergebnis sieht dann so aus:

{"_id":"Gedit","_rev":"1-bab8730b676e3b9c86cdacc95afba681","os":["Linux"],"lizenz":"GPL",
"beschreibung":"Texteditor, durch zahlreiche Plugins erweiterbar, Teil des GNOME-Projekts"}

wobei die Revisionsnummer höchstwahrscheinlich anders ist.

Möchte man via curl eine Ansicht abrufen, so lautet der Befehl ähnlich wie bei der Abfrage eines einzelnen Eintrags. Im folgenden Beispiel wird davon ausgegangen, dass die Ansicht zur Anzeige des Durchschnittspreises im Design Document "fm_bsp" unter dem Namen "durchschnittspreis" gespeichert ist:

curl -X GET http://localhost:5984/fm/_design/fm_bsp/_view/durchschnittspreis

Natürlich kann man auch Daten in die Datenbank schreiben. Im folgenden Beispiel wird ein Eintrag für Rhythmbox hinzugefügt:

curl -X PUT http://localhost:5984/fm/Rhythmbox -d '{"_id":"Rhythmbox","os":["Linux"],"lizenz":"GPL","beschreibung":"Mediaplayer, mit Plugins erweiterbar"}'

Wichtig ist dabei, dass die geschweiften Klammern, welche die Schlüssel-Werte-Paare umschließen, zusätzlich in einfache Hochkommas ' ', so genannte Single Quotes, gesetzt werden.

Um das Ergebnis zu überprüfen, kann man via Futon nachsehen, ob der Eintrag auch wirklich geschrieben wurde. Das erfolgreiche Schreiben wird aber auch von CouchDB mittels einer Rückmeldung wie unten zu sehen signalisiert.

{"ok":true,"id":"Rhythmbox","rev":"1-d0bc0c400fa6eaa2e8c563fc0a2471d7"}

Im letzten Beispiel wird gezeigt, wie man mittels curl eine temporäre Ansicht generiert:

curl -X POST http://localhost:5984/fm/_temp_view -d '{"map":"function(doc) {var worte = doc.beschreibung.split(\" \"); emit (\"Worte:\",worte.length);}","reduce":"function(key,values,rereduce) {return sum(values)}"}'

Die Ansicht besteht aus einer MapReduce-Funktion, welche die Gesamtanzahl der Worte in den Beschreibungstexten zählt. Wie man im Beispiel sieht, ist es wichtig, dass alle Anführungsstriche, welche innerhalb eines Schlüssels oder Wertes vorkommen, mittels Backslash maskiert werden. Dies ist in dieser Form innerhalb von Futon nicht notwendig, dort wird es automatisch erledigt.

Anregungen

Wer Gefallen an CouchDB gefunden hat, kann basierend auf diesem Beispiel sicherlich noch weiterführende Experimente machen. So kann man z.B. alle Dokumenten mit einem Feld "kategorie" versehen (Büro, Multimedia etc.) und darüber Ansichten generieren. Oder man speichert die unterstützen Betriebssysteme nicht in einem Array, sondern als separate Werte. Dabei sollte der Schlüssel der Betriebssystemname sein, ein Wert ist nicht unbedingt notwendig, dieser kann also null sein. Wer unbedingt einen Wert einsetzen möchte, kann den Booleschen Wert true einsetzen. Wahrheitswerte dürfen übrigens innerhalb von CouchDB nicht in Anführungsstriche gesetzt werden.

Nach dem gleichem Schema wie die Programmdatenbank lässt sich aber z.B. auch eine Datenbank für ein einfaches Blogsystem generieren. Die Ausgabe könnte man direkt mittels einer shows-Funktion formatieren.

Zusammenfassung

CouchDB ist eine interessante Datenbank, die jetzt schon sehr viel Potential und Einsatzmöglichkeiten bietet. Sobald ein umfassenderes Rechtesystem vorhanden ist, wird CouchDB sicherlich für einen noch größeren Kreis von Nutzern und Entwicklern interessant. Wer hauptsächlich Daten in Form von Text speichert, sollte auf jeden Fall einen Blick auf CouchDB oder eine der Alternativen werfen.

Autoreninformation

Jochen Schnelle ist zufällig im Internet auf CouchDB gestoßen und hat damit aus Neugier ein wenig experimentiert. Nachdem gedanklich der SQL-Ballast über Bord geworfen war, entstand eine Python-basierte Intranet-Applikation, bei der die Daten zur Erstellung von Datenblättern von CouchDB geliefert werden.

Dieser Artikel ist in freiesMagazin 06/2010 erschienen. Veröffentlichung mit freundlicher Genehmigung des Autors.

  • Dieses Werk wurde unter der GNU Free Documentation License veröffentlicht. Das Kopieren, Verbreiten und/oder Modifizieren ist erlaubt unter den Bedingungen der GNU Free Documentation License, Version 1.2 oder einer späteren Version, veröffentlicht von der Free Software Foundation.

    - Weitere Informationen
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung