Mittwoch, 23. Mai 2012


Artikel

Dezember 2009 | Artikel

NoSQL – Schöne neue Welt?

(Link zum Artikel: http://www.entwickler.de/jaxenter//002710)

Alternative Speichersysteme

Text: Matthias Wessendorf und Bartosch Warzecha
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Seit 2009 erhalten alternative Speichersysteme verstärkt Einzug in Plattformen wie Twitter oder Facebook. Die alternativen Speichersysteme werden von der "NoSQL-Bewegung" vorangetrieben. Die Community stellt dabei unterschiedliche Ansätze zur Verfügung, beispielsweise dokumentorientierte Ansätze vs. "Key/Value" Storage.
Teil 1   Teil 2   Teil 3   

Die Suche nach alternativen Speichersystemen ist nichts Neues: Mit der Verbreitung der Objektorientierung wurde bereits Ende der 80er Jahre nach neuen Speichermöglichkeiten gesucht. Daraus entstanden objektorientierte Datenbanksysteme (ODBMS) als Alternative zu traditionellen relationalen Datenbanken (RDBMS). Die meisten Anwendungen nutzen heutzutage RDBMS, da diese Systeme komfortable Vorteile wie Constraints, Transaktionen, Locking sowie Abfragemöglichkeiten wie SQL bieten.

Web-2.0-Zeitalter

Im Zeitalter von Web 2.0 sind schreibende Zugriffe mindestens genauso wichtig wie lesende. Anwendungen wie StudiVZ, Twitter oder Facebook leben davon, dass die Nutzer massenhaft Daten einstellen (z. B. ihren Facebook-Status). Allerdings scheinen RDBMS-Systeme Probleme mit der Verarbeitung und Skalierung großer Datenmengen zu haben.

Die alternativen Speichersysteme der NoSQL-Bewegung verzichten bewusst auf einige Vorteile moderner RDBMS, um eine bessere Performance zu erreichen. Am Beispiel von Twitter wird deutlich, dass die "Timeline" zwar (fast) immer verfügbar ist, diese allerdings nicht unmittelbar konsistent ist. Die endgültige Konsistenz der Daten wird hingegen gewährleistet. Ein weiteres Beispiel sind Content-Management-Systeme (CMS), die zwar Persistenz für die Dokumentenverwaltung benötigen, dafür aber nicht zwangsläufig auf komplexe Abfragemöglichkeiten wie SQL zurückgreifen müssen. Da die Struktur häufig bekannt ist, kann hier auf flexible Abfragemöglichkeiten zugunsten hoher Performance verzichtet werden.

Not only SQL

Wie bereits angedeutet, entstehen unterschiedlichste Systeme innerhalb der NoSQL-Bewegung. Stellt sich letztendlich die Frage: Was bedeutet NoSQL? Oft wird vermutet, dass sich hinter dem Ausdruck ein "No to SQL at all" verbirgt. Vielmehr ist NoSQL als "Not only SQL" zu verstehen. Unterschiedliche Probleme erfordern unterschiedliche Lösungen. Daher ist es konsequent, dass eine breite Menge von unterschiedlichen "Not only SQL"-Systemen existiert. Das wiederrum unterstreicht den Innovationsgeist der Community. Ebenfalls ist festzustellen, dass traditionelle Datenbanksysteme (RDBMS) nicht nur heute, sondern auch in Zukunft eine hohe Bedeutung haben werden.

Choice is good

Auf dem Markt existieren diverse NoSQL-Speichersysteme. Der Wikipedia-Eintrag zur NoSQL-Bewegung listet bereits mehr als 20 dieser Systeme auf. Ihr (theoretischer) Hintergrund ist ebenfalls unterschiedlich. Einige Systeme sind in Anlehnung an Googles Bigtable implementiert, z. B. Apache HBase oder Hypertable. Andere Systeme wie Riak realisieren das Dynamo-Paper von Amazon.com. Beide Ansätze werden durch hybride Systeme, die "das Beste" aus beiden Welten vereinen, repräsentiert. Daneben existieren Systeme, die spezifischere Einflüsse haben, z. B. Apache Jackrabbit, das aus dem CMS-Bereich kommt. Ein weiteres Produkt ist Oracles Berkeley DB.

Ein Hase als Dokumentenwächter

Das Apache-Jackrabbit-Projekt implementiert die JSRs 170 und 283. Bei diesen Standards handelt es sich um das Java Content Repository API (JCR) in den Versionen 1.0 und 2.0. Da die Dokumente nicht via SQL aus dem Repository geladen werden, sondern mittels JCR, versteht sich das Projekt als vollwertiges Mitglied der NoSQL-Bewegung. Die Installation von Jackrabbit ist einfach und wird ausführlich auf der Website des Projekts beschrieben. Das Arbeiten mit dem JCR erinnert stark an ein hierarchisches System:

  1. ...
  2. Repository rep = ...
  3. Session session = rep.login(...);
  4. Node root = session.getRootNode();
  5. root.addNode(“foo”).addNode(“bar”);
  6. ...

Der obige Code legt einen bar-Zweig unterhalb von foo ab. Innerhalb eines Unix-Verzeichnisbaums wäre dies das Äquivalent zu /foo/bar. Einem Node können Eigenschaften (als Key/Value Pairs) hinzugefügt werden. Die Abfrage des oben genannten Nodes sieht wie folgt aus: Node fooBar = session.getNode(„foo/bar“);. Das Sessionobjekt navigiert zur gewünschten Stelle der Dokumentenhierarchie und lädt den entsprechenden Node.

Teil 1   Teil 2   Teil 3   

Kommentare

Gravatar Peter Neubauer 01.12.2009
um 18:55 Uhr
Hallo,
guter Beitrag! Wenn man sich JCR und Apache Jackrabbit ansieht, sollte man nicht vergessen, dass gerade Graphen-datenbanken wie http://www.neo4j.org order http://www.sones.de sehr gut mit den hochvernetzten Datenstrukturen eines CMS zurechtkommen, während BigTable, CouchDB und Cassandra Verknüpfungen zwischen den "Shard"-Einheiten (Dokumente bei CouchDB) nur schlecht hantieren und sich mehr für Datenmengen eignen die sich leicht in viele unabhängige Bestandteile aufsplitten lassen.

Disclaimer: Ich bin Teils des Neo4j - Teams.
#zitieren
Gravatar Martin Wildam 07.12.2009
um 16:30 Uhr
Ich habe lange über diese Bewegung nachgedacht und auch einige Systeme ausprobiert, die über ganz freie Indexierungssysteme arbeiten - Lucene zähle ich da auch dazu.

Mir kommt vor, daß es vielen zu mühsam ist, eine Struktur/Ordnung in ihre Daten zu bekommen und da ist es angenehm, wenn ein System eigentlich alles und irgendwie "verkraftet". Das ganze System eignet sich dann hervorragend als Datenfriedhof.

Auf der anderen Seite ist es mir klar, daß manches sich nur schwer in komplexe Strukturen einordnen lässt...

Sehr amüsant dazu: http://entwickler.de/zonen/portale/psecom,id,99,news,52764.html
#zitieren
Gravatar Arne Kriedemann 02.02.2010
um 12:53 Uhr
Sehr schöner Artikel mit guter Übersicht über dieses doch nocht recht neue Feld der nicht-relationalen Datenbanken.
Auch den Artikel über die Gewährleistung der Konsistenz fand ich sehr interessant und gut geschrieben, auch wenn man etwas von Datenbanktechnik verstehen sollte, um ihn zu lesen.
Vielen Dank!
Greets, Arne
#zitieren
Gravatar Paul 15.03.2010
um 15:31 Uhr
Ich hab durch diesen Artikel das erste Mal etwas von diesem System gehört. Ich denke das eine Schnittstelle zusätzlich sich als sehr sinnvoll erweisen kann. Ich werde morgen mal meinem Professor darauf ansprechen. #zitieren
Gravatar LeMue 31.03.2010
um 10:32 Uhr
Na eigentlich sind nicht relationale Datenbanken mit proprietärer Indizierung doch ein alter Hut s. ISAM-Dateien und BTrieve. Einzig wird jetzt die Möglichkeit erwogen abhängig vom Anwendungsfall wieder auf diesen alten Ansatz zurückzugreifen. #zitieren
Gravatar TeBone 09.07.2010
um 11:59 Uhr
Btrieve und andere ISAM Systeme haben lange zeit einen negativen touch bekommen. Aufgrund der Anforderungen die heute stehen kann man es sich einfach nicht mehr leiste "nur" auf ein paradigma zu setzen. Gerade wenn heute Diskussionen auf Management Ebene geführt werden kommt oft die Frage "kann das SQL". Wir bei uns haben mehr und mehr spezialisierte Lösungen bei den Kunden. Wer heute zum Beispiel über HighFrequenzyTrading nachdenkt (http://www.dbcoretech.com/?p=129) der verwendet eventuelle SQLite Broker und Börsen können das nur noch mit Systemen wie VoltDB realisieren. Anders ist da die Frage bei DataWarehousing, hier sind es die Analytischen Fragen die im Vordergrund stehen. #zitieren
Gravatar Martin Wildam 09.07.2010
um 12:04 Uhr
Es ist doch immer dasselbe - da kommt irgendein "neues" Thema (oder auch älteres neu aufgeputzt) und immer wieder gibt es dann einen Schwarm von Leuten, die das dann überall als ultimative Lösung einsetzen wollen. Aber die Sachlage ist eben meist etwas genauer zu betrachten und die Anforderungen eben unterschiedlich. Da sind wir wieder bei der Hammer und Nagel-Geschichte... #zitieren
Gravatar RPR 10.07.2010
um 11:47 Uhr
Fakt ist, dass man bei Massendaten (schon immer) Probleme mit den traditionellen Datenbanken hat(te). Sie es:
- bei der Abfrage gigantischer Datenmengen,
- beim Massenimport oder
- beim ständigen Einfügen von Daten im laufenden Betrieb.

Und das schafft man eigentlich nur durch Skalierbarkeit auf mehr Festplatten bzw. Rechner mit Festplatten. Und das wiederum können bei trad. DBMS eigentlich nur extrem teure Systeme gut.

Eine "Systemart" zur Lösung wurde in dem Artikel noch nicht angesprochen: Column-oriented databases.
Und diese gibt es mit Vectorwise oder Calpont auch mit SQL-Frontend - und das wird IMHO die Zukunft in dem Bereich sein.
Sachen wie CouchDB könnte ich mir noch für Webfrickler vorstellen, die ohne Middleware arbeiten wollen.
#zitieren