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)

Key/Value-Datenbanken

Warum sind Key/Value-Datenbanken in letzter Zeit so populär geworden? Das liegt im Wesentlichen daran, das Key/Value-Datenbanken der Schlüssel zu erfolgreicher Skalierung sind. Das ist bei anderen Datenmodellen wie Graph-Datenbanken oder normalisierten relationalen Daten dagegen einfach problematischer, da deren Elemente stärker miteinander verknüpft sind oder traversiert werden müssen.

Spätestens seit dem Amazon Dynamo schossen Key/Value-Datenbanken wie Pilze aus dem Boden. Allein auf [1] sind einige Dutzend gelistet. Die erfolgreichsten sind: Riak, Redis, Membase, Tokyo, Voldemort und vielleicht kann man auch den Azure Table Storage von Microsoft dazu zählen. Hier seien nur kurz Riak und Redis vorgestellt.

Riak entstammt einem Entwicklerteam (Team Basho) um die Suchmaschine Akamai. Das Datenmodell bei Riak entspricht der Form

Bucket x Key x Document

Im Document Feld können JSON-Daten oder sonstige beliebige Daten stehen. Da Riak JSON interpretieren und durchsuchen kann, ist RIAK eigentlich eine interessante Dokumentendatenbank. Die Entwickler sind jedoch bescheiden und ordnen sich in die Kategorie Key/Value ein. Riak selbst ist in Erlang und C geschrieben und folgt dem BASE-Modell (eventually consistent). Als Schnittstelle bietet Riak ebenfalls REST und die Sprachen Erlang, Javascript, Java, PHP und Ruby an. Realisiert wird ein klassischer Consistent Hashing Ring mit bis zu 2^160 Elementen. Vorbild war auch hier wieder Amazon Dynamo. Für die Persistenz können beliebige Provider konfiguriert werden, auch relationale Datenbanken. In Riak kann durch eine einfache Konfiguration die Anzahl der Replikate im System, der erfolgreichen Lesebestätigungen und der erfolgreichen Schreibbestätigungen definiert werden. Damit lassen sich die System-Durability und das Antwortverhalten genau steuern.

Der Zugriff via REST erfolgt über die URL »http:// bucket/key « . Genauso können Abfragen hier über eine Art URL Pattern Matching durchgeführt werden. Hochinteressant an Riak ist die Fähigkeit, Links in JSON-Dokumente einbauen zu können:

links: [
 [Bucket1, Key2, Linkname3]
 [Bucket10, Key42, Linkname77]
 ...

Dies gibt Riak schon fast die Mächtigkeit einer Graph-Datenbank, weil ein Link-Walking möglich wird, das teilweise sogar kostenintensive Join-Operationen spart.

Riak offeriert einfachste Skalierbarkeit, Konfigurierbarkeit und Replikation (mit Hinted-Handoff-Selbstreparatur) sowie als ein besonders mächtiges Feature das Link-Walking über Links in Dokumenten. Nachteilig ist, dass bis jetzt noch keine Literatur zu Riak existiert.

Redis startete als One-Man-Entwicklung eines cleveren Italieners (Salvatore San Fillipo), die mittlerweile von VMware eingekauft wurde. Redis ist komplett in ANSI C geschrieben. Der Sourcecode erstreckt sich über nur wenige Dutzend Dateien. Der Datenzugriff ist über alle gängigen Programmiersprachen möglich.

Redis zeichnet sich besonders durch seine Performance aus. Zusammen mit OrientDB ist Redis vielleicht die schnellste Datenbank. Redis hält alle Daten im RAM des Servers und schreibt konfigurierbar auf die Platte. Via Virtual Memory kann es bei Speicherknappheit auch nur die Schlüssel im RAM halten. Values werden dann gegebenenfalls nachgeladen. Schnell bedeutet, dass auf normaler Hardware leicht über 100 000 Operationen pro Sekunde zu erreichen sind.

Die Values bei Redis können (wahlweise sortierte) Listen und Sets sein. Operationen lassen sich als Transaktionen gruppieren. Seit Version 2.0 sind sogar Publish/Subscribe-Operationen verfügbar. Redis auf einem frischen UNIX-System aufzusetzen, zu kompilieren, zu starten und Werte zu speichern, kostet weniger als eine Minute, was im Gegensatz zu einer typischen Oracle-Installation einfach mehr Spaß bedeutet.

Hochgeschwindigkeit

Redis ist damit der ideale Data-Structure-Server für Massendaten oder Log-Daten. Insbesondere in der Spieleindustrie ist Redis beliebt, wo etwa viele Writes in Hochgeschwindigkeit und wenige Reads auf einem Server nötig sind. Redis skaliert leider noch nicht nativ. Dieses Feature ist aber in Arbeit. Dennoch implementiert Redis eine sehr einfache aber leistungsfähige Replikation, mit der beliebige Shards aufgebaut oder die Read-Befehle auf beliebig viele andere Maschinen verteilt werden können.

In Abbildung 8 ist der eingebaute Redis Benchmark zu sehen. Ausgeführt auf einem VMware-Image von Ubuntu 9 unter Windows sind allein hier schon 34.270 Operationen pro Sekunde möglich. Auf einem nativen Unix-System (Redis kompiliert bisher nur unter Unix) ist dagegen ein Vielfaches dieser Performance – für alle Redis-Datenstrukturen – möglich.

Abbildung 8: Der eingebaute Redis Performance Test zeigt hier auf einer virtuellen Maschine schon erstaunliche 34000 Operationen pro Sekunde.

Das Listing 1 zeigt, wie mit der mitgelieferten Shell Werte geschrieben werden können. In diesem Fall eine Liste. Abfragen über die Programmiersprache sind ähnlich einfach.

Listing 1

Schreiben unter Redis

 

Es gibt kaum Datenbanken, die schneller sind als Redis, was auch für die Inbetriebnahme gilt. Alle Daten (zumindest die Schlüssel) müssen ins RAM passen. Automatische Skalierung ist noch nicht eingebaut, aber angekündigt.

Ähnliche Artikel

comments powered by Disqus
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 /2023