Cassandra ist ein einfaches, verteiltes Datenbankverwaltungssystem für sehr große strukturierte Datenbanken (ein sogenanntes „NoSQL“-Datenbanksystem). Es ist auf hohe Skalierbarkeit und Ausfallsicherheit bei großen, verteilten Systemen ausgelegt. Die Daten werden in Schlüssel-Wert-Relationen abgelegt. Es ist offen dokumentiert und als Freie Software in Java implementiert.
Es wurde ursprünglich bei Facebook von Avinash Lakshman (einem der Autoren von Amazons Dynamo) und Prashant Malik für das Inbox-Search-Problem bei Facebook entwickelt und im Juli 2008 freigegeben. Danach haben auch andere große Unternehmen wie IBM, Rackspace und Twitter zum Code beigetragen. Das Projekt wurde im März 2009 bei der Apache Software Foundation als Unterprojekt in den Apache Incubator aufgenommen. Am 17. Februar 2010 wurde Cassandra von der Apache Software Foundation zum „Top-Level“ Projekt erklärt und ist somit kein Unterprojekt von Apache Incubator mehr. Es bedient bei Facebook hunderte Millionen von Mitgliedern und wird außerdem bei Twitter und Digg genutzt.
Design
Cassandra kann als Mischung aus Amazon Dynamo und Google BigTable gesehen werden, da es leicht weiterentwickelt die Replikationsmechanismen von Dynamo nutzt, gleichzeitig aber nach außen die Datenstruktur von BigTable anbietet.
Amazon Dynamo
Amazon Dynamo ist genau wie Amazon S3 oder das Google File System ein verteiltes Dateisystem und ist damit ebenso im Kontext von Infrastructure as a Service einzuordnen. Wie auch das Google File System ist Dynamo für eine konkrete Anwendung optimiert, die auf die Anforderungen einiger Amazon Web Services zugeschnitten ist, die eine hohe Ausfallsicherheit benötigen.
Anforderungen
Amazon-Anwendungen erwarten, dass ein Storagesystem hoch verfügbar und extrem ausfallsicher ist. Insbesondere muss in jeder Situation gespeichert werden können.
„[…]even if disks are failing, network routes are flapping, or data centers are being destroyed by tornados. „
„[…]selbst wenn Festplatten versagen, Netzwerkverbindungen verrückt spielen oder Rechenzentren von Tornados zerstört werden.“
Das System muss jederzeit inkrementell skalierbar sein, um Belastungsspitzen abdecken zu können, beispielsweise im Weihnachtsgeschäft. Komplizierte Datenbankzugriffe werden vermieden, der Zugriff erfolgt direkt über einen Schlüssel. Weiterhin muss an dieser Stelle auch nicht auf Sicherheit geachtet werden, da sich das System in einer „freundlichen“ Umgebung innerhalb der Amazon-Services befindet, die von außen abgeschottet ist.
Aufbau
Dynamo baut auf einem Netz vollständig gleichberechtigter Rechner auf, d.h. es gibt keine zentrale Steuerung oder Verwaltung, jeder Knoten kann jede Aufgabe wahrnehmen. Diese Architektur wurde gewählt, um die Skalierbarkeit des Systems zu gewährleisten.
Dienste wie der Shopping Cart Service (der Dienst, der den Warenkorb verwaltet) erwarten, dass auf das Storagesystem immer schreibend zugegriffen werden kann, das System hoch verfügbar ist und geringe Latenzzeiten aufweist. Da die in den ACID-Kriterien definierten Eigenschaften der Konsistenz und der hohen Verfügbarkeit gegensätzlich sind, wurde – im Gegensatz zu traditionellen Datenbanksystemen – die Konsistenz zu einer eventual consistency („irgendwann schließlich konsistent“) aufgeweicht. Eine weitere Eigenschaft war, dass überwiegend kleine (weniger als 1MB große) Dateien in Form von key-value-Paaren gespeichert werden sollen. Komplizierte Datenbankanfragen müssen nicht unterstützt werden.
Google BigTable
BigTable ist ein proprietäres Hochleistungs-Datenbanksystem des Unternehmens Google. Es baut unter anderem auf dem Google File System (GFS) und Chubby Lock Service auf. Es wird zurzeit beispielsweise beim Platform-as-a-Service-Dienst (PaaS) Google App Engine genutzt.
Geschichte
Die Entwicklung von BigTable begann 2004. Es wird mittlerweile von vielen Google-Produkten, wie etwa MapReduce, Google Reader, Google Maps, Google Bücher, YouTube oder Google Earth, genutzt. Da BigTable-Datenbanken sehr groß werden können, wurde besonderer Wert auf Skalierbarkeit (durch Unterstützung sehr großer Computercluster) und Geschwindigkeit (durch eine nichtrelationale Struktur) gelegt.
Design
Charakteristisch für in BigTable gespeicherte Daten ist, dass sehr häufig Datensätze hinzugefügt werden, vorhandene Datensätze aber sehr selten geändert werden. Eine BigTable besteht grundlegend aus sehr vielen Zeilen, die durch einen Datensatzidentifikator benannt werden. Innerhalb einer Zeile können beliebig viele Spalten definiert werden. Im Gegensatz zu relationalen Datenbanken können die Spalten für jede Zeile unterschiedlich groß sein. Lediglich die sogenannten Family Columns, die einen gleichen Datentyp (wie beispielsweise einen Link, der auf eine Seite verweist), müssen bei der Implementierung der Datenbank bekannt sein, können aber beliebig viele Instanzen pro Zeile enthalten.
Jede Tabelle ist mehrdimensional. Zur Versionierung erhält jeder Eintrag einen Timestamp. Mithilfe von Timestamps kann stets die neueste Version der Daten berücksichtigt werden, ohne ältere Daten zu bearbeiten oder zu löschen.
Beispiel
Google selbst beschreibt in einer Publikation ein Beispiel für die Verwendung von BigTable durch die Google-Suchmaschine: Für jede zuvor durch einen Crawler gescannte neue Webseite wird eine Zeile in der entsprechenden BigTable angelegt. Die erste Spalte enthält den ersten Inhalt (in HTML-Syntax) der Seite. Die Multidimensionalität entsteht durch spätere Versionen der gleichen Seite und den zugeordneten Zeitstempel (Timestamp). Die nachfolgenden Spalten entstammen alle der gleichen FamilyColumn „anchor“ und enthält jeweils die URL einer anderen Seite, die auf die entsprechende Seite verlinkt. Somit kann die Anzahl der Spalten theoretisch unendlich groß werden. Die gesammelten Links sind eine Grundlage des PageRank-Verfahrens.
Quelle: Wikipedia (Verschiedene Artikel)