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 12/2017: Perfekte Videos

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

Huawei
Pit Hampelmann, 13.12.2017 11:35, 1 Antworten
Welches Smartphone ist für euch momentan das beste? Sehe ja die Huawei gerade ganz weit vorne. Bi...
Fernstudium Informatik
Joe Cole, 12.12.2017 10:36, 2 Antworten
Hallo! habe früher als ich 13 Jahre angefangen mit HTML und später Java zu programmieren. Weit...
Installation Linux mint auf stick
Reiner Schulz, 10.12.2017 17:34, 3 Antworten
Hallo, ich hab ein ISO-image mit Linux Mint auf einem Stick untergebracht Jetzt kann ich auch...
Canon Maxify 2750 oder ähnlicher Drucker
Hannes Richert, 05.12.2017 20:14, 4 Antworten
Hallo, leider hat Canon mich weiterverwiesen, weil sie Linux nicht supporten.. deshalb hier die...
Ubuntu Server
Steffen Seidler, 05.12.2017 12:10, 1 Antworten
Hallo! Hat jemand eine gute Anleitung für mich, wie ich Ubuntu Server einrichte? Habe bisher...