NoSQL: Wie moderne Datenbanken arbeiten

Lesetipp

Das Java Magazin 11.2011 beschäftigt sich intensiv mit den Themen MapReduce und Apache Hadoop. Auch HBase wird in dieser Ausgabe behandelt:

http://www.javamagazin.de.

Die NoSQL-Spielarten

Weil es für diese Vielzahl an Herausforderungen als Lösung nicht eine einzige Technologie geben kann, ist der Begriff „NoSQL“ nur vage definiert. Üblich ist die Übersetzung von NoSQL mit „Not only SQL“, sodass auch objektorientierte und XML-Datenbanken dazu zu zählen sind. Im NoSQL-Archiv [1] sind mehr als 120 NoSQL-Vertreter aufgelistet, die unterschiedlicher nicht sein könnten. Die NoSQL-Bewegung widerspricht also dem „One size fits all“-Ansatz und liefert spezialisierte Datenbanken für die spezifischen Anforderungen. Obwohl sich die Datenbankmodelle der NoSQL-Vertreter stark voneinander unterscheiden, haben sie dennoch eine Gemeinsamkeit. So weichen alle NoSQL-Vertreter vom klassischen Relationenmodell ab. Die folgenden vier Kategorien bilden nach dem üblichen Verständnis den Kern des NoSQL-Spektrums:

  • Key/Value-basierte Datenbanken: Diese NoSQL-Systeme haben das einfachste Datenmodell. Unter einem eindeutigen Schlüssel wird ein einzelner Wert gespeichert. Die Struktur des Werts wird von der Datenbank nicht interpretiert. Einzelne NoSQL-Datenbanken weichen von diesem einfachen Schlüssel- und Wertschema ab. Redis bietet beispielsweise auch Listen und Mengen. Amazon SimpleDB gruppiert Schlüsselwertpaare zu Domänen. Mit diesem Datenmodell können komplexere Datenstrukturen kaum effektiv abgebildet werden. Das Datenmodell bietet jedoch den großen Vorteil, dass die Daten sehr leicht auf mehrere Rechner verteilt werden können. Jedem Rechner wird dabei eine Menge an Keys zugeordnet, für die er zuständig ist. Key/Value-basierte Datenbanken sind also am ehesten eine Lösung für das enorme Datenwachstum, aber nicht für die neuen Strukturen der Daten.
  • Wide Column Stores: Diese Speichersysteme basieren auf Tabellen. Sie bieten die Möglichkeit, in einer Zeile mehrere Attribute zu speichern. Der Attributname und der Attributwert bilden ein Schlüssel-Wert-Paar, das als Spalte (Column) bezeichnet wird. Es gibt aber kein festgelegtes Schema. Zu einer Zeile können beliebig viele Spalten hinzugefügt werden und die Anzahl der Spalten kann zwischen einzelnen Zeilen variieren. Somit ist dieses Datenmodell sehr gut für Sparse Data geeignet, also für Daten mit vielen Nullwerten. Bekannte Vertreter sind Google Bigtable [2] und Bigtable-Klone wie Apache Cassandra [3], Apache HBase [4] und Hypertable [5]. Allerdings sind bei Anfragen keine Joins über mehrere Tabellen möglich. Durch den Verzicht auf Joins können genauso wie bei Key/Value die Daten auf mehrere Server verteilt werden. Bei Joins müssten verschiedene Server miteinander kommunizieren, was das Management der Datenbank verkomplizieren und beim Ausfall eines Servers zu Verfügbarkeitsproblemen führen würde. Im Gegensatz zu Key/Value kann Wide Column aber mit komplexer strukturierten Daten arbeiten, sodass es einfacher nutzbar ist. In gewisser Weise bietet es auch eine Lösung für die Herausforderung der neuen Datenstrukturen.
  • Dokumentenorientierte Datenbanksysteme: Die Daten werden in Form von semi-strukturierten Dokumenten gespeichert. Die Dokumente werden mit einem Schlüssel gespeichert und geladen. Abfragen nach Dokumenten mit bestimmten Bestandteilen sind möglich. Dennoch ist das Datenmodell schemalos und damit sehr flexibel. Relationen zwischen verschiedenen Dokumenten werden nicht unterstützt. Zu den dokumentenorientierten Datenbanksystemen zählen CouchDB [6] und MongoDB [7]. Dieser Ansatz ist vor allem für semi-strukturierte Daten nützlich, während die Skalierbarkeit „nach oben“ keine so große Rolle spielt. Skalierung „nach unten“, also beispielsweise auf Mobilgeräte, ist hingegen auch bei diesen Datenbanken oft auf der Agenda.
  • Graphendatenbanken: Diese NoSQL-Datenbanken sind auf das Speichern von Graphen spezialisiert, also auf Knoten und ihre Beziehungen. Das Graphenmodell ist für einfaches und effizientes Durchlaufen der Graphen optimiert. Graphendatenbanken eignen sich beispielsweise zur Abbildung der Beziehungen eines sozialen Netzwerks oder für Fahrplanoptimierungen und Verkehrsleitsysteme. Datenmodelle sind ja sowieso oft als Graphen organisiert. Zu den modernen Vertretern dieser NoSQL-Kategorie gehören Neo4J [8] und HyperGraphDB [9]. Bei diesen Datenbanken steht ebenfalls die Struktur der Daten im Vordergrund und weniger die Skalierbarkeit.

Abb. 1: Skalierbarkeit und Unterstützung für semi-strukturierte Daten bei einigen NoSQL-Varianten

Abb. 2: Persistenzherausforderungen und Lösungsansätze der NoSQL-Technologien
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.