CouchDB - angesagter Vertreter der "NoSQL"-Datenbanken

Seite 2: Innenleben & Sicherheit

Inhaltsverzeichnis

CouchDB ist in Erlang implementiert. Zugriffe auf die Datenbank erfolgen nicht über SQL-Befehle, sondern nach den Prinzipien des REST-Paradigmas (Represential State Transfer; siehe Glossar) über HTTP-Befehle: Speicheroperationen über HTTP PUT beziehungsweise POST und Leseoperationen über HTTP GET. Gemäß dem Oberbegriff "NoSQL" wird aus einem SELECT * FROM <Tabelle> ein http://<SERVER>:<PORT>/<DBName>/<Ressource>. Abfrageergebnisse wiederum lassen sich über ein Map/Reduce-Verfahren (siehe Glossar) mit JavaScript-Funktionen ermitteln. Ein weiterer für Webentwickler bekannter Begriff ist das JSON-Datenformat, das CouchDB verwendet.

Wer sich in der Vergangenheit mit der Entwicklung von Webanwendungen beschäftigt hat, findet sich in CouchDB schnell zurecht, und wird bestätigen, dass CouchDB das Rad nicht neu erfindet, sondern auf seit Langem in der Praxis bewährten Prinzipien aufbaut. Am Beispiel des verwendeten JSON-Formats (siehe Glossar) erfolgt das etwa mit der Überlegung, dass es sinnig ist, in Webanwendungen mit dem JSON-Format ausgetauschte Objekte auch in dem Format zu speichern. Man vermeidet dadurch Performance-Einbußen bei der alternativen Umwandlung der JSON-Objekte in andere (Speicher-)Formate.

Das grundlegende CouchDB-Speicherprinzip ist – wie bei vielen anderen NoSQL-Datenbanken – die Speicherung von Key-Value-Paaren. Die interne Speicherung erfolgt in B-Bäumen. CouchDB besitzt eine Plug-in-Architektur, das heißt, es lassen sich Erweiterungen in unterschiedlichen Sprachen entwickeln und hinzufügen. Das alles hört sich noch nicht grundlegend neu an. Was ist also das Besondere von CouchDB?

CouchDB speichert Dokumente ohne Schemavorgabe, das heißt Dokumente mit beliebiger Syntax. Im Gegensatz zu relationalen Datenbanken, bei denen man in der Regel als ersten Schritt ein Datenbankschema entwirft, das den Vorgaben der Projektspezifikation entspricht, benötigt CouchDB solch präzisen Vorgaben nicht. Grundsätzlich lässt sich jedes Dokument in einer CouchDB-Instanz ablegen. Die Dokumente liegen mit einer eindeutigen ID versehen in der Datenbank und sind über sie zudem wieder auszulesen. Das allein wäre noch kein Grund, ein Datenbanksystem einzusetzen, denn das könnte man auch erreichen, indem man die Dokumente einfach ins Dateisystem ablegt. Wer eine Datenbank verwendet, will auch komplexere Abfragen über mehrere Dokumente unterschiedlichen Typs durchführen.

Bei CouchDB übernehmen das Views. Eine solche zu erstellen bedeutet, eine JavaScript-Funktion zu schreiben (andere Sprachen sind ebenfalls denkbar). Sie wird anschließend für jedes Dokument aufgerufen und erzeugt Einträge in einem Index. Solche Einträge sind über JavaScript ermittelte Teile des Dokuments. Konkret legt sie die JavaScript-Funktionen in sogenannten Design-Dokumenten ab, mit deren Hilfe die Indizes und damit die nach außen sichtbaren Views immer auf dem neuen Stand zu halten sind.

Wie in anderen Datenbanken gibt es für die Zugriffssicherheit ein Nutzersystem mit unterschiedlichen Rechten. Administratoren haben unter anderem Zugriff auf die Design-Dokumente, in denen die View-Funktionen abgelegt sind. Pro Dokument lässt sich festlegen, welche Nutzer das Dokument (oder Teile davon über Views) lesen dürfen. Auch zur Rechteprüfung bei Schreiboperationen lassen sich mit JavaScript-Funktion Regeln festlegen.

Ein wichtiges Thema im Umfeld von Web- und Cloud-Anwendungen ist das Thema Replikation. Ein logischer Datenbankserver kann aus mehreren physikalischen Servern mit eigenen Datenbeständen bestehen. CouchDB ist ein verteiltes Datenbanksystem, mit dem es – auch im Offline-Modus – möglich ist, von mehreren unabhängigen Stellen aus Änderungen am gesamten Datenbestand durchzuführen, die anschließend vom Nutzer aufgerufene Datenbankmechanismen auf Konsistenz prüfen und in den Gesamtbestand übernehmen.