Duell der Datenbanken: In einem Shootout messen sich MySQL und PostgreSQL. Der Schwerpunkt vom ADMIN 06/2011 überprüft, wer schneller ist und gibt einen ... (mehr)

Dokumenten-Datenbanken

Mit Dokumenten-Datenbanken verbinden sich nicht selten Missverständnisse. Es geht nicht darum, beliebige Dokumente wie in einem CRM-System zu verwalten oder ein Dateisystem nachzubilden. Was NoSQL-Datenbanken stattdessen auszeichnet, ist der Umstand, dass die Schemaverantwortung nicht mehr bei der Datenbank liegt, sondern beim Dokument und damit beim Entwickler. Dies ist die eigentliche Revolution. Jeder ist von relationalen Datenbanken gewohnt, in der Datenbank ein sauberes aber starres Schema zu definieren. Jetzt hingegen muss nur noch das Dokumentenformat festgelegt werden und eindeutig interpretierbar sein. Dabei überwiegt als Dateiformat in der Praxis JSON [11] . Es ermöglicht eine einfachere Notation als XML und bietet verschachtelte Objekte an, die aus Arrays, Strings, Zahlen oder booleschen Werten bestehen können.

Tatsächlich gibt es nur zwei relevante Document Stores in der NoSQL-Szene: CouchDB und MongoDB.

CouchDB ist eine echte Web-2.0-Datenbank und wurde von Damien Katz, einem ehemaligen Chefentwickler bei Lotus Notes, gestartet. CouchDB ist zudem ein Toplevel-Apache-Projekt und in Erlang geschrieben. Mit am interessantesten ist die REST-API. Zugriff ist daher auch über Javascript und fast alle Sprachen möglich. Alle CRUD-Operationen sind REST-Operationen, was das weiter unten folgende Beispiel zeigt. Die Objekte werden nach einem definierten Intervall via MVCC gespeichert und sind damit – im Gegensatz zu manch anderer Datenbank – nach dem entsprechenden »fsync« dauerhaft. Die vom Anwender angelegten Dokumente werden in B-Bäumen gesichert und mit einer ID und einer Revisionsnummer versehen. CouchDB erlaubt es, mit Map/Reduce via Javascript Anfragen zu erstellen und diese als Views zu materialisieren.

Eine der Stärken von CouchDB ist die Replikation. Über das Web-Interface oder mit einer HTTP-Anfrage lassen sich zwei Datenbanken synchronisieren oder replizieren. Damit eignet sich CouchDB ideal für Offline-Arbeiten und mobile Anwendungen, wo viele Datenbanken synchronisiert werden müssen. Skalieren lässt sich CouchDB mit dem Drittanbietertool Couch Lounge, welches verteiltes Partitionieren/Clustering im Consistent Hashing Ring ermöglicht. Mittels Oversharding kann jede Shard-Partition selbst wieder durch eine Lounge ersetzt werden, um so eine fraktale Skalierung zu erreichen.

Dank des einfachen Zugriffs via REST und Javascript, ermöglicht CouchDB Architekturen, die ohne Middleware auskommen. Es kommt sogar noch besser: Da CouchDB selbst einen Webserver und den Browser Futon mitbringt ( Abbildung 7 ), ist es möglich, die gesamte Anwendung als Javascript in der Datenbank selbst abzulegen (sogenannte CouchApps) und sie dynamisch zu verändern. Dies geschieht derzeit bei vielen Projekten im Web, wo viele Anwender CouchDB selbst dynamisch und evolutionär verbessern.

Abbildung 7: Die CouchDB-Oberfläche mit dem eingebauten Webbrowser Futon.

Eine CouchDB-Anfrage, die ein Dokument anlegt, lässt sich ganz einfach in der Konsole starten:

curl -X PUT http://127.0.0.1:5984/persons/ 2974a6283c85e98237405f3542ca1344 -d '{"name":"mahatma gandhi","job":"guru"}'

In der Anfrage ist daher mit »persons« die Dokumentenklasse und das konkrete Dokument mit einer ID enthalten.

CouchDB bietet die einfachste Master-Slave- und Master-Master-Replikation und eignet sich sehr gut für Webanwendungen.

MongoDB

MongoDB wird federführend von der Firma 10gen entwickelt. Einer der Chefs von 10gen ist ehemaliger CTO von DoubleClick. MongoDB wurde entwickelt, um die konkreten Anforderungen eines Web-Unternehmens zu befriedigen. MongoDB nimmt ebenfalls Daten im Format JSON an, verwendet für Austausch und Speicherung aber das Binärformat BSON. Der Zugriff erfolgt über APIs in fast allen gängigen Sprachen.

Das primäre Ziel bei MongoDB war Performance. Dies wird nicht nur durch das Binärformat, sondern auch durch Memory Mapped Files erreicht. Außerdem ist MongoDB in C++ geschrieben und erlaubt Zugriff über alle Programmiersprachen. Die große Stärke von MongoDB ist die Indexierung und die Anfrage-API. MongoDB ist besonders performant, erlaubt reichhaltige und dynamische Abfragen. Ein kleiner Nachteil ist, dass es teilweise keine Transaktionssicherheit bietet.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
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 /2022