Schminktisch

Sowohl die gespeicherten Dokumente als auch die Ergebnisse von Abfragen lassen sich umformatieren und beispielsweise als HTML-Seite ausgeben. Dies übernimmt wieder eine Javascript-Funktion. Gibt diese nur den Inhalt eines einzigen Dokuments aus, handelt es sich um eine sogenannte Show-Funktion.

Einen einfachen Vertreter dieser Gattung zeigt Listing 7 ab der Zeile 5. Sie presst lediglich Namen, Straße und Ort des übergebenen Dokuments in eine einfache HTML-Seite und liefert diese zurück. Über die Fallunterscheidung prüfen Sie, ob es überhaupt ein Dokument gibt (beziehungsweise die Funktion eines erhalten hat).

Listing 7

{
"_id": "_design/adressbuch",
"views": {
  ...},
  "shows": {
    "htmladr": "function(doc, req) {
      if(doc) {
        return '<!DOCTYPE html><html><head><title>Ein Dokument</title></head><body><p>Name: '+doc.name+'</p> <p>Straße: '+doc.strasse+'</p> <p>Ort: '+doc.plz+' '+doc.ort+'</p></body></html>';
      } else {
        return '<p>Es gibt kein Dokument mit der ID '+req.id+'</p>';
      }
    }"
  }
}

Wie Listing 7 zeigt, müssen Sie die Funktion unter einem frei wählbaren Schlüsselwort (im Beispiel htmladr) im Design-Dokument unterhalb des Keys shows speichern. Hängen Sie im Browser an die URL noch die ID eines Dokuments an, erhalten Sie als Ergebnis die Webseite (Abbildung 5).

Abbildung 5: Die Show-Funktion presst hier drei Informationen aus dem Dokument mit der ID 6825dc0758d90d1ec96b57dbdc000c38 in eine HTML-Seite.

Anfragen wie in Abbildung 4 produzieren zwar eine Liste von Ergebnissen, intern handelt es sich dabei aber nur um einen einzelnen Wert. Über die List-Funktion bereitet CouchDB diesen auf. Die einfache List-Funktion aus Listing 8 gibt die Anzahl der Schmidts in der Datenbank als HTML-Dokument aus, das Ergebnis erhalten Sie über die entsprechende URL (Abbildung 6).

Listing 8

{
  "_id": "_design/adressbuch",
  "views": {
    ...
  },
  "lists": {
    "htmlschmidt": "function(head, req) {
      start({'headers': {'content-type': 'text/html'}});
      send('<!DOCTYPE html><html><head><title>Anzahl Schmidts</title></head><body>');
      var row = getRow();
      send('<p>Im Adressbuch sind: '+row.value+' Personen, die Schmidt heißen.</p></body></html>');
    }"
  }
}
Abbildung 6: Die HTML-Seite präsentiert das Ergebnis der Abfrage.

Wenn Sie die Webseiten jetzt noch ein wenig mit CSS und Javascript garnieren, haben Sie eine vollständige Web-Anwendung – eine CouchApp. Sie brauchen dazu noch nicht einmal einen Webserver. Das eingebaute Futon arbeitet übrigens nach dem exakt gleichen Prinzip.

Gefeuerte Replikanten

Bei Bedarf transferieren Sie eine Datenbank an andere laufende CouchDB-Instanz ("replizieren"). Die beteiligten Kollegen halten den Datenbestand dabei immer automatisch auf dem aktuellen Stand. CouchDB eignet sich somit hervorragend für verteilte (Web-)Anwendungen. Aus diesem Grund nutzte Canonical die Datenbank eine Zeit lang für seinen Dienst Ubuntu One. Dort sorgte CouchDB unter anderem für den Abgleich von Kontakten und Lesezeichen. Nach einer Weile stellte sich jedoch heraus, dass CouchDB den mehreren Millionen Benutzern nicht gewachsen war, sodass sich Canonical Ende 2011 dazu entschloss, die Software gegen eine Eigenentwicklung auszutauschen. Dabei heben die CouchDB-Entwickler gerade die gute Skalierbarkeit ihrer Datenbank gern hervor.

Fazit

Neben den gezeigten Funktionen bietet CouchDB noch viele weitere, darunter natürlich das obligatorische Verwalten der Rechte. Die Datenbank erfordert jedoch ein radikales Umdenken. Insbesondere Umsteiger von SQL dürften sich nur langsam an das Map-Reduce-Konzept gewöhnen.

Da es keine direkten Verknüpfungen mehr zwischen den Datensätzen gibt, ist es zudem in dokumentenorientierten Datenbanken durchaus üblich, Dokumente mehrfach zu speichern. Bei einer Bestellung könnte man beispielsweise die einzelnen Produkte noch einmal vollständig direkt im Datensatz zur Bestellung ablegen. Dadurch liegt jedes Produkt mehrfach in der Datenbank. Zusammen mit den älteren Versionen der Dokumente bläht sich der Bestand dann stetig auf.

CouchDB eignet sich folglich nicht für alle Einsatzgebiete gleichermaßen. Ein Haupteinsatzfeld stellen zweifelsohne kompakte Web-Anwendungen dar, bei denen die Datenbank sogar einen kompletten Webserver einspart.

Damien Katz stieg übrigens Anfang 2012 aus seinem Projekt aus und gründete Couchbase [7]. Das Unternehmen entwickelt eine Datenbank, die alle Vorteile der Konkurrenten CouchDB, Membase und Memcached vereinen möchte. 

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 03/2018 NEUE DISTRIBUTIONEN

Digitale Ausgabe: Preis € 5,95
(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!

Stellenmarkt

Aktuelle Fragen

Internet abschalten
Karl-Heinz Hauser, 20.02.2018 20:10, 0 Antworten
In der Symbolleiste kann man das Kabelnetzwerk ein und ausschalten. Wie sicher ist die Abschaltu...
JQuery-Script läuft nicht mit Linux-Browsern
Stefan Jahn, 16.02.2018 12:49, 2 Antworten
Hallo zusammen, ...folgender goldener Code (ein jQuery-Script als Ergebnis verschiedener Exper...
XSane-Fotokopie druckt nicht mehr
Wimpy *, 30.01.2018 13:29, 2 Antworten
openSuse 42.3 KDE 5.8.7 Seit einem Software-Update druckt XSane keine Fotokopie mehr aus. Fehler...
TOR-Browser stürzt wegen Wikipedia ab
Wimpy *, 27.01.2018 14:57, 0 Antworten
Tor-Browser 7.5 based on Mozilla Firefox 52.8.0 64-Bit. Bei Aufruf von http: oder https://de.wi...
Wifikarte verhindert Bootvorgang
Maik Kühn, 21.01.2018 22:23, 1 Antworten
iwlwifi-7265D -26 failed to load iwlwifi-7265D -25 failed to load iwlwifi-7265D -24 failed to l...