Die Zusammenarbeit im Unternehmen wird immer dynamischer und flexibler. Aus diesem Grund wirft IT-Administrator in der April-Ausgabe einen Blick auf die ... (mehr)

Verwaltung über GUI

CouchDB ist über Port 5984 zu erreichen. Hinter der URL "http://localhost:5984/_utils" verbirgt sich ein Webinterface zur Administration. In Version 2.0 wurde das alte Frontend "Futon" durch die neue GUI namens "Fauxton" ersetzt. Dort lassen sich mit wenigen Klicks neue Datenbanken und CouchDB-Dokumente anlegen, verändern und löschen. Für neue Dokumente geben Sie entweder einen Wert für die spezielle Property "_id" ein, die den Datensatz eindeutig identifiziert, oder lassen die ID von CouchDB erzeugen.

In Fauxton finden Sie einen Menüpunkt, um die CouchDB-Konfiguration zu überprüfen (Bild 1). Leider stehen beim derzeitigen Entwicklungsstand nicht alle Funktionen in Fauxton zur Verfügung. Beispielsweise fehlt die Konfiguration eines CouchDB-Clusters. Zwar bietet Fauxton diese Option mit einem Button an, aber wenn der Anwender darauf klickt, erscheint eine Fehlermeldung, die besagt, er solle einen Cluster doch besser mit Chef, Ansible, Puppet oder Saltstack installieren.

Bei Clusterkonfigurationen verkompliziert sich die Port-Frage unter Umständen etwas, vor allem wenn der Cluster wie beim lokalen Beispiel-Setup auf einem einzigen Rechner läuft. Dann ist der erste Node unter der Portnummer 15984 zu erreichen, der zweite mit dem Port 25984, der dritte unter dem Port 35984 und so weiter. Zudem verwendet CouchDB 2.0 im Gegensatz zu seinem Vorgänger mit 5986 noch einen zweiten Port, der für Anfragen reserviert ist, die nur den einen Knoten betreffen. Dementsprechend sind manche API-Funktionen nur auf einem der beiden Ports erreichbar, etwa der "/_config"-Endpoint, der in der neuen Version nicht mehr auf Port 5984 zur Verfügung steht.

Im Admin-Frontend Fauxton können Sie auch die Administratoren und die Benutzer der einzelnen Datenbanken anlegen. Stellen Sie sicher, dass die sogenannte "Admin Party" ausgeschaltet ist – ein etwas beschönigender Begriff dafür, dass jeder mit allen Rechten auf die Datenbank zugreifen kann. Warum dies die Default-Einstellung der Datenbank ist, bleibt das Geheimnis der Entwickler. Abgeschaltet wird die "Admin Party", indem Sie einen Admin-User anlegen. Wenigstens ist per Default der CouchDB-Server nur über localhost erreichbar. Um die Datenbank auch übers Netz zu erreichen, ändern Sie die folgende Einstellung in der Datei "/usr/local/lib/couchdb/etc/local.ini":

[chttpd]
bind_address = 0.0.0.0

Im gleichen Verzeichnis finden Sie auch die Konfigurationsdatei "default.ini", an der Sie aber am besten nichts ändern sollten. Für Anpassungen ist "local.ini" gedacht. Die verwendeten Konfigurationsdateien zeigen Sie mit »couchdb -c« an. Weitere individuelle Config Files übergeben Sie mit dem Schalter "-a". Die Einstellungen lassen sich auch remote über die HTTP-API ändern. Ist CouchDB installiert, lässt sich der Server automatisch starten, wenn Sie beispielsweise das der Distribution beiliegende Init-Skript verwenden. Ansonsten müssen Sie sich auch um die Logfiles kümmern und sie beispielsweise mit Logrotate weiterverarbeiten, damit sie nicht maßlos anwachsen.

Bild 2: Die Fauxton-GUI zeigt die Datenbanken an und erlaubt es, neue anzulegen.

Neues Query-Interface: Mango

Zur Strukturierung von Anfragen dienen bei CouchDB 1.x sogenannte Views. In ihnen speichert der Datenbankadministrator oder Entwickler eine Abfrage dauerhaft in der Datenbank. Darin kann der Programmierer eigene Filterfunktionen in JavaScript definieren, die eine Menge von Resultaten sukzessive auf ein überschaubares Ergebnis reduzieren. Dieses Prinzip ist auch als Map/Reduce-Methode von Googles verteilter Datenbank Bigtable bekannt und im freien Projekt Hadoop implementiert. Für eine Abfrage nach einem bestimmten Attribut muss somit erst eine JavaScript-Funktion geschrieben werden, die auf alle Dokumente angewandt wird (Map) und das Attribut als Schlüssel ausgibt:

function (doc) { emit(doc.year, doc);}
GET /movies/_design/query?year=2001

Weil diese Herangehensweise vielen Anwendern fremd ist, haben die Entwickler in CouchDB 2.0 eine neue Abfragesprache namens Mango implementiert, die sich an MongoDB anlehnt. Dies soll einerseits Abfragen vereinfachen und andererseits für bessere Performance sorgen. Grundsätzlich bleibt die auf HTTP basierende REST-Schnittstelle aber erhalten, die sich mit Standard-Tools wie curl auf der Kommandozeile nutzen lässt. Eine neue Datenbank legen Sie mit dem folgenden Aufruf an:

$ curl -X PUT http://admin:7O4cTn9q@192.168.2.112:15984/movies

Hier wird die HTTP-Methode PUT verwendet, die curl hinter dem Schalter "-X" erwartet. Außerdem ist es zum Anlegen einer Datenbank nötig, sich als Admin-User zu authentifizieren, was hier über Basic Authentication in der URL (vor dem @-Zeichen) passiert. Alternativ legen Sie eine Datenbank in der Fauxton-GUI an (Bild 2). Alle Datenbanken listet:

curl http://192.168.2.112:15984/_all_dbs

Nun können Sie über HTTP-POST-Calls der Datenbank Dokumente hinzufügen. Dazu bietet curl den Schalter "-d", hinter dem die JSON-codierten Daten folgen. Außerdem ist es nötig, den richtigen MIME-Typ zu übergeben, weil CouchDB sonst einen Fehler meldet:

 

$ curl -d "{\"title\": \"2001: A Space Odyssey\", \"year\": \"1968\", \"director\": \"Stanley Kubrick\"}" -X POST -H "Content-type: application/json" http://192.168.2.112:15984/movies/

Wie Sie sehen, ist das Escapen der Anführungszeichen beim Aufruf in der Shell ein wenig mühsam, aber natürlich gibt es für praktisch jede Programmiersprache eine Bibliothek, die die CouchDB-API implementiert. Hier geht es nur darum, zu veranschaulichen, wie einfach sich die REST-Schnittstelle mit den HTTP-Aufrufen nutzen lässt. Alternativ dazu, die Daten auf der Kommandozeile direkt zu übergeben, verarbeitet curl auch JSON-Dateien, wenn Sie davor ein @-Zeichen setzen:

$ curl -d @A_History_Of_Violence.json -X POST -H "Content-type: application/json" http://192.168.2.112:15984/movies/

Für Abfragen nach einem bestimmten Attribut muss dafür ein Index existieren. Von Haus aus erzeugt CouchDB nur für die "_id"-Property einen Index. Weitere Indexe legt ein POST-Request an die Adresse "/movies/_index" an. Die übergebene JSON-Struktur sieht so aus:

{
    "index": {
       "fields": [
          "year"
       ]
    },
    "type": "json"

 

}

Wenn Sie diese in der Datei "index-year.json" gespeichert haben, legen Sie den Index für das year-Attribut an:

$ curl -d @index-year.json -X POST -H "Content-type: application/json" http://admin:7O4cTn9q@192.168.2.112:15984/movies/_index

Mit dem Index ist es möglich, die Dokumente nach dem year-Attribut abzufragen. Hierbei erwartet CouchDB eine JSON-Datei, die etwa so aussieht:

{
    "selector": {
       "year": {
          "$gt": 2004
       }
    }
}

Dabei steht das "$gt" für den Operator "greater than", also "größer als". Alle anderen verfügbaren Operatoren sind in der Mango-Dokumentation [4] zu finden. Dies ist der entsprechende curl-Aufruf für eine Abfrage, die alle Filme mit Produktionsdatum neuer als 2004 ausgibt:

curl -d @query.json -X POST -H "Content-type: application/json" http://192.168.2.112:15984/movies/_find

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023