NoSQL im Überblick

Was ist NoSQL? Wie kommt es, dass NoSQL-Datenbanken derzeit auf so viel Interesse stoßen? Wird NoSQL herkömmliches SQL ersetzen? Unser Überblick will diese Fragen beantworten.

In Pocket speichern vorlesen Druckansicht 16 Kommentare lesen
Lesezeit: 11 Min.
Von
  • Dj Walker-Morgan
  • Dr. Oliver Diedrich
Inhaltsverzeichnis

Der Aufstieg von NoSQL-Datenbanken stellt das traditionelle relationale Datenbankmodell als Lösung für alle Probleme in Frage – nicht nur in der Theorie, sondern auch in der Praxis. In seinem Kern bedeutet NoSQL allerdings keine grundsätzliche Ablehnung von SQL: NoSQL steht eher für "Not Only SQL" (nicht nur SQL) als für "No SQL" (kein SQL). Die neue Strömung greift interessanterweise Datenbankmodelle auf, die in der Vergangenheit aus verschiedensten Gründen in Vergessenheit geraten sind. Dabei erfolgt die Innovation in erster Linie durch praktische Entwicklungen – häufig auf der Basis von Open-Source-Software –, nicht in Form datenbanktheoretischer Überlegungen. NoSQL, das schon vorweg, ist jedoch kein Wundermittel für alle Datenbankansprüche.

Der derzeitige NoSQL-Trend bringt die relationalen SQL-Datenbank allerdings nicht zum ersten Mal unter Beschuss. In den neunziger Jahren zum Beispiel machten die objektorientierten Datenbanken von sich reden. Sie boten Entwicklern auf den ersten Blick einen Ausweg aus der mühseligen Konvertierung ihrer Datenobjekte in Reihen und Spalten. In der Praxis waren die Implementierungen von objektorientierten Datenbanken jedoch häufig sehr komplex und fragil, sodass desillusionierte Entwickler sich erneut auf die Suche nach besseren Möglichkeiten begaben. In der Folge entstanden die objektrelationalen Mapper (ORM), die einen Großteil der Konvertierungsarbeit von Datenobjekten zwecks Speicherung in einer SQL-Datenbank erledigten.

Die aktuellen NoSQL-Datenbanken haben einige Eigenschaften gemeinsam: Sie verzichten in der Regel auf die starren Schemata der Tabellen ihrer relationalen Pendants. Als schemafreie Datenbanken setzen sie auf flexiblere Techniken, um festzulegen, wie Daten gespeichert werden; oder sie überlassen das gleich komplett den Anwendungen. Namensgebend ist der Einsatz anderer Protokolle für die Kommunikation mit den Clients als SQL. Die Architektur vieler NoSQL-Datenbanken ist auf Skalierbarkeit ausgelegt, sodass sich große Datenbestände in einem Cluster aus Standardsystemen verwalten lassen, statt sie auf einem einzigen Superserver zu speichern.

Bei näherer Betrachtung lassen sich die verschiedenen NoSQL-Ausprägungen in vier Hauptkategorien aufteilen: dokumentenorientierte Datenbanken ("document stores"), Key-Value-Datenbanken, spaltenorientierte Datenbanken und Graphendatenbanken.

Dokumentenorientierte Datenbanken speichern "Texte" von beliebiger Länge mit unstrukturierten Informationen und ermöglichen das Suchen auf Basis von Dokumentinhalten. Ein Beispieldokument wäre das Folgende:

"Vorname": "Wallace"
"Adresse": "62 West Wallaby Street"
"Interessen": ["Käse","Cracker","Mond"]

Die gespeicherten Dokumente müssen nicht die gleichen Felder enthalten: Eine Datenbankabfrage nach "Vorname" = "Wallace" würde nur Dokumente finden, die das Feld "Vorname" mit dem Wert "Wallace" enthalten. XML-Datenbanken sind dokumentorientierte Datenbanken mit semi-strukturierten Daten.

CouchDB ist ein typischer Vertreter der dokumentorientierten Gattung. Die Datenbank speichert Dokumente wie im obigen Beispiel. Abfragen – so genannte Views – definiert man in CouchDB mit Hilfe von Javascript-Funktionen. Sie erzeugen beim Aufruf Einträge in einem Index. Views können eine "Reduce"-Funktion enthalten, die die Suchergebnisse als sortierte Liste für weitere Filterungen oder Evaluierungen aufbereitet.

Die Views selbst werden auf dem Server als CouchDB-Dokumente abgelegt. Sie lassen sich jederzeit reaktivieren und aktualisieren. Durch dieses Vorhalten der Ergebnisse kann die Serverlast reduziert werden.

Als verteiltes Datenbanksystem mit einem effizienten Replikationsmechanismus zwischen verschiedenen Systemen lässt sich CouchDB gut skalieren. Die Replikation funktioniert dabei auch mit Systemen, die nicht immer online sind. Canonicals Speicherdienst Ubuntu One zum Beispiel setzt auf CouchDB, um Daten zwischen Client-PCs zu synchronisieren. Auch bei der BBC kommt die Datenbank als interne Datenablage für die diversen Webdienste des englischen Radio- und Fernsehsenders zum Einsatz.

Mehr Informationen zu CouchDB findet man in dem englischsprachigen CouchDB-Buch und auf der CouchDB-Website, die unter dem Dach der Apache Foundation beheimatet ist.

Eines der ressourcenintensivsten und kompliziertesten Dinge, die man in einer SQL-Datenbank speichern kann, ist die Beziehung zwischen verschiedenen Elementen – beispielsweise das Geflecht der Freunde, Follower etc. in einem sozialen Netz. Um eine Beziehung zu durchlaufen, können in einer SQL-Datenbank mehrere Abfragen erforderlich sein.

Graphen-Datenbanken legen den Fokus auf die Darstellung von Daten als Knotenpunkte und Beziehungen zwischen den Knoten. Neo4J ist ein Beispiel für diese Art von Datenbank. Statt herkömmlicher Datensätze erstellt man hier Knoten, die durch die Beziehungen, die man zwischen ihnen definiert, miteinander verknüpft werden. Ein Beispiel in Java-Code:

Node firstNode = graphDb.createNode();
Node secondNode = graphDb.createNode();
Relationship relationship = firstNode.createRelationshipTo(secondNode,MyRelationshipTypes.OWNS);

Hier werden zwei Knoten erstellt. Zwischen diesen beiden Elementen existiert eine Beziehung OWNS – "besitzt" –, die an anderer Stelle als einfaches Enum definiert ist.

Informationen zu den Knoten und ihre Beziehungen werden als Eigenschaften gespeichert:

firstNode.setProperty("name","Wallace");
secondNode.setProperty("name","Grommit");
relationship.setProperty("zahlt","Hundesteuer");

Der erste Knoten (Wallace) besitzt den zweiten Knoten (Grommit) – er zahlt Hundesteuer. Ausgehend von diesem einfachen Modell lassen sich leicht durchlaufbare Graphen von Beziehungen erstellen.

Ein anderes Beispiel für eine Graphen-Datenbank ist FlockDB, eine Schöpfung der Twitter-Entwickler. Sie wurde speziell dazu erstellt, aufzuzeigen, wer wem auf der Microblogging-Plattform folgt.

Graphen-Datenbanken spielen ihre Stärken bei der Darstellung von Elementen aus, bei denen die Beziehungen zueinander im Mittelpunkt stehen. Es lassen sich zwar auch nicht-beziehungsbezogene Informationen in einer Graphen-Datenbank speichern, doch stellt sich hier schnell die Frage, wie sinnvoll das ist.

Weitere Informationen zu Neo4J sind auf der Website des Projekts zu finden.