Apache Cassandra
Das Cassandra-Projekt ist eine Art hybride, hoch skalierbare Open-Source-Datenbank. Das Projekt wurde von einem der Autoren des Dynamo-Papiers entworfen und 2008 von Facebook an die Apache Software Foundation übergeben. Sie basiert auf Googles BigTable-Datenmodel, wobei sich die Infrastruktur an dem Dynamo-Papier orientiert. Da die Daten in Spalten gespeichert werden, besitzt Cassandra etwas mehr Struktur als einfache Key/Value-Datenbanken.
Durch die Verwendung einer Java-API ist der Einsatz für Java-Entwickler intuitiv. Nach dem Start der Datenbank kann der Benutzer beliebige Daten über eine geöffnete Verbindung mit dem folgenden Aufruf speichern:
client.insert("Keyspace1",key_user_id,new ColumnPath("column_family1", null, "artikel".getBytes("UTF-8")),"NoSQL Artikel".getBytes("UTF-8"),timestamp, ConsistencyLevel.ONE);
Über den Client werden die Daten anhand einer frei definierbaren key_user_id, eines Zeitstempels sowie des ConsitencyLevels (von asynchron im Hintergrund bis "streng" konsistent) in einer Column mit dem Namen artikel, die zu dem Keyspace Keyspace1 gehören, gespeichert.
Ein Keyspace stellt dabei eine Ansammlung von Tabellen dar, ähnlich eines Schemas oder einer Datenbank in RDBMS. Zu einem Keyspace gehören so genannte Column Families, die in etwa den Tabellen eines RDBMS entsprechen. Zu den Column Families wiederum gehören Columns, wie in unserem Beispiel die Column-Artikel, die den Spalten einer relationalen Datenbanktabelle entsprechen. Diese sind allerdings für jeden Datensatz einer Column Family frei definierbar. Eine sehr gute Einführung in das vollständige Datenmodel von Cassandra bietet. Mit dem folgenden Aufruf kann anschließend auf die gespeicherten Daten zugegriffen werden:
ColumnPath path = new ColumnPath("column_family1", null,"artikel".getBytes("UTF-8"));client.get("Keyspace1", key_user_id, path, ConsistencyLevel.ONE));
Nach dem Erstellen des columnPath kann durch die Angabe der key_user_id, des ConsistencyLevels und des Keyspace auf die Daten zugegriffen werden. Das Cassandra-Projekt befindet sich noch in einer relativ frühen Phase, sodass die Strukturen und die API durchaus noch größere Änderungen erfahren könnten.
Fazit und Ausblick
Die NoSQL-Bewegung ist kreativ – keine Frage. Dieser Artikel konnte lediglich auf einige Aspekte weniger Systeme eingehen. Allerdings kann man bereits daran wunderbar erkennen, wie im Augenblick zahlreiche NoSQL-Storage-Systeme entstehen. Ein bisschen erinnert dieser Trend an die Geschichte der (Java-)Webframeworks. Böse Zungen behaupten, dass jeder, der nicht 100%ig mit dem vorhandenem zufrieden ist, sich direkt sein eigenes System schreibt.
Fakt ist, dass die NoSQL-Bewegung am Anfang steht und eine Konsolidierung auch hier eintreten wird. Die zahlreichen Projekte sind teilweise sehr fortgeschritten, z. B. Jackrabbit oder CouchDB. Andere stecken jedoch noch in den Kinderschuhen, beispielsweise Apache Cassandra oder HBase (Unterprojekt von Apache Hadoop). Trotzdem werden diese Systeme bereits in produktiven Umgebungen wie Digg.com, Twitter oder Rackspace eingesetzt. Ebenfalls basiert der Datastore von Googles AppEngine auf einer Bigtable-Implementierung. Die Zukunft dieser neuen Bewegung bleibt spannend. Die Ideen der jungen Systeme sind innovativ und es macht Spaß, mit ihnen Anwendungen und Prototypen zu entwickeln.
Matthias Weßendorf ist PMC Chair von Apache MyFaces. Beruflich beschäftigt er sich mit Themen rund um das „Next Generation Web“. Matthias blogt regelmäßig auf http://matthiaswessendorf.wordpress.com (Twitter: @mwessendorf).
Links & Literatur
- http://www.allthingsdistributed.com/2008/12/eventually_consistent.html
- http://www.rackspacecloud.com/blog/2009/11/09/nosql-ecosystem/
- http://labs.google.com/papers/bigtable.html
- http://hadoop.apache.org/hbase/
- http://www.hypertable.org/
- http://riak.basho.com/
- http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf
- http://incubator.apache.org/cassandra/
- http://jackrabbit.apache.org
- http://www.oracle.com/technology/products/berkeley-db/index.html
- http://www.erlang.org/
- http://labs.google.com/papers/mapreduce.html
- http://www.infoq.com/interviews/CouchDB-Damien-Katz
- http://wiki.apache.org/couchdb/Getting_started_with_Java
- http://code.google.com/p/jcouchdb/
- https://mozillalabs.com/raindrop/2009/10/22/introducing-raindrop/
- http://damienkatz.net/2009/10/koala_on_the_loose.html
- http://books.couchdb.org/relax/
- http://couchio.com/
- http://cloudant.com/
- http://arin.me/code/wtf-is-a-supercolumn-cassandra-data-model
- http://en.wikipedia.org/wiki/Nosql
- http://googleappengine.blogspot.com/2009/02/back-to-future-for-data-storage.html



