NoSQL

NoSQL (englisch für Not only SQL) bezeichnet Datenbanken, die einen nicht-relationalen Ansatz verfolgen und damit mit der langen Geschichte relationaler Datenbanken brechen. Diese Datenspeicher benötigen keine festgelegten Tabellenschemata und versuchen Joins zu vermeiden. Sie skalieren dabei horizontal. Im akademischen Umfeld werden sie häufig als „strukturierte Datenspeicher“ (engl. structured storage) bezeichnet.[1][2][3]

Bekannte Implementierungen sind Riak, Apache Cassandra, CouchDB, MongoDB und Redis.

Geschichte

Der Begriff NoSQL (im Sinne von no SQL) wurde erstmals für eine 1998 erschienene einfache Open-Source-Datenbank verwendet, die keine SQL-Zugriffsmöglichkeit bereitstellte. Carlo Strozzi, der Entwickler dieser Datenbank, unterscheidet allerdings die NoSQL-Datenbank von der NoSQL-Bewegung insofern, als erstere eine Datenbank ist, welche auf die Verwendung der Sprache SQL verzichtet, während letztere ein Konzept ist, das vom relationalen Modell Abstand nimmt.[4]

Der Begriff NoSQL (im Sinne von Not only SQL) wurde Anfang 2009 von Johan Oskarsson für ein Treffen über verteilte strukturierte Datenspeicher neu eingeführt.[5] Der Name war ein Versuch einer gemeinsamen Begriffsfindung für die wachsende Zahl an nicht relationalen, verteilten Datenspeichersystemen, die meist auch auf ACID-Eigenschaften verzichteten.

Dieses Thema ist nicht ganz neu. Die Bestrebung, Daten ohne die Einschränkungen des relationalen Modells zu speichern, war bereits früher unter dem Titel dokumentenorientierte Datenbank bekannt. Insofern sind alle Vertreter dieser Thematik auch als NoSQL-Systeme zu betrachten.

Obwohl sich NoSQL-Systeme kontinuierlich verbreiten, wird der Markt nach wie vor deutlich von relationalen Systemen dominiert (Stand 2013).[6]

Architektur

Relationale Datenbanken leiden üblicherweise unter Leistungsproblemen bei datenintensiven Applikationen wie Indexierung großer Dokumentmengen, Webseiten mit hohen Lastaufkommen sowie Streaming-Media-Applikationen. Relationale Datenbanken sind nur dann effizient, wenn sie für häufige, aber kleine Transaktionen oder für große Batch-Transaktionen mit seltenen Schreibzugriffen optimiert sind. Sie können aber schlecht mit gleichzeitig hohen Datenanforderungen und häufigen Datenänderungen umgehen.[7] NoSQL dagegen kann mit vielen Schreib-/Leseanfragen umgehen.[8]

NoSQL-Architekturen bieten meist nur schwache Garantien hinsichtlich Konsistenz wie beispielsweise eventual consistency oder auf einzelne Datensätze eingeschränkte Transaktionen. Einige Systeme unterstützen auch ACID, beispielsweise durch Hinzufügung spezieller Middleware wie CloudTPS.[9]

Viele NoSQL-Implementierungen unterstützen verteilte Datenbanken mit redundanter Datenhaltung auf vielen Servern, beispielsweise unter Nutzung einer verteilten Hashtabelle. Damit können die Systeme einfach skalieren und Ausfälle einzelner Server überstehen.[10]

Unterscheidung nach Datenmodell

NoSQL-Implementierungen können folgendermaßen gegliedert werden:

Merkmal Beispiele
Dokumentenorientierte Datenbanken Apache Jackrabbit, BaseX, CouchDB, eXist, IBM Notes, MongoDB, OrientDB
Graphdatenbanken Generisch Neo4j, OrientDB, InfoGrid, HyperGraphDB, Core Data, DEX
RDF-Zentriert AllegroGraph, 4store, andere
Verteilte ACID-Datenbanken MySQL Cluster
Key-Value-Datenbanken Festplattenspeicher Chordless, Google BigTable, GT.M, InterSystems Caché
Caches im RAM Membase, memcached, Redis, Aerospike
Eventually-consistente Speicher Amazon Dynamo, Project Voldemort, Riak
Sortierte Key-Value-Speicher Berkeley DB, Memcachedb
Multivalue-Datenbanken OpenQM, Rocket U2
Objektdatenbanken Db4o, ZODB
Spaltenorientierte Datenbanken Apache Cassandra, Google BigTable, HBase, SimpleDB
Datenstrom RethinkDB, PipelineDB

Unterscheidung aufgrund des CAP-Theorems

CAP-Konfiguration Relational Key-Value Spaltenorientiert Dokumentorientiert
Consistent + Available (CA) Microsoft SQL Server, Oracle, MySQL, Postgres, Sybase, Aster Data, Greenplum Vertica
Consistent + Partition-Tolerant (CP) Spanner Scalaris[11], Berkeley DB, memcached, Redis BigTable, Hypertable[12], HBase MongoDB, Terrastore[13]
Available + Partition-Tolerant (AP) Riak[14], Dynamo, Voldemort, Kyoto Cabinet[15], KAI[16] Cassandra SimpleDB, CouchDB

Leistung

Nach Ben Scofield kann die Leistung von NoSQL-Datenbanken wie folgt bewertet werden:[17]

Datenmodell Leistung Skalierbarkeit Flexibilität Komplexität Funktionalität
Key–Value hoch hoch hoch keine unterschiedlich (keine)
Spaltenorientiert hoch hoch mittel gering minimal
Dokumentenorientiert hoch unterschiedlich (hoch) hoch gering unterschiedlich (gering)
Graphbasiert unterschiedlich unterschiedlich hoch hoch Graphentheorie
Relational unterschiedlich unterschiedlich gering mittel Relationale Algebra

Literatur

  • Stefan Edlich, Achim Friedland, Jens Hampe, Benjamin Brauer, Markus Brückner: NoSQL: Einstieg in die Welt nichtrelationaler Web 2.0 Datenbanken. 2., aktualisierte und erweiterte Auflage. Hanser Verlag, München 2011, ISBN 978-3-446-42753-2.
  • Pramodkumar J. Sadalage, Martin Fowler: NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence. Addison-Wesley, Amsterdam 2012, ISBN 978-0-321-82662-6 (englisch).

Einzelnachweise

  1. Avinash Lakshman, Prashant Malik: Cassandra – A Decentralized Structured Storage System. (PDF, 133 kB) Cornell University, 2009, abgerufen am 24. Juni 2010 (englisch).
  2. Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach, Mike Burrows, Tushar Chandra, Andrew Fikes, Robert E. Gruber: Bigtable: A Distributed Storage System for Structured Data. (PDF, 221 kB) Google, abgerufen am 22. April 2012 (englisch).
  3. HBase: structured storage of sparse data for Hadoop (Memento vom 6. April 2012 im Internet Archive)
  4. NoSQL: A Relational Database Management System. Strozzi.it, 2. Oktober 2007, abgerufen am 24. Juni 2010 (englisch): „While the former is a well-defined software package, is a relational database to all effects and just does intentionally not use SQL as a query language, the newcomer is mostly a concept (and by no means a novel one either), which departs from the relational model altogether and it should therefore have been called more appropriately “NoREL”, or something to that effect.“
  5. Eric Evans: NOSQL 2009. 12. Mai 2009, abgerufen am 24. Juni 2010 (englisch): „Johan Oskarsson has organized a meetup for folks interested in distributed structured data storage and is calling it NOSQL.“
  6. RDBMS dominate the database market, but NoSQL systems are catching up. Abgerufen am 24. November 2013 (englisch).
  7. Rakesh Agrawal et al.: The Claremont report on database research. In: ACM (Hrsg.): SIGMOD Record. Band 37, Nr. 3, September 2008, ISSN 0163-5808, S. 9–19, doi:10.1145/1462571.1462573 (englisch).
  8. Eric Lai: No to SQL? Anti-database movement gains steam. 1. Juli 2009, abgerufen am 4. Dezember 2011 (englisch).
  9. CloudTPS: Scalable Transactions for Web Applications in the Cloud. Globule.org, Februar 2010, abgerufen am 24. Juni 2010 (englisch): „CloudTPS is a scalable transaction manager to allow cloud database services to execute the ACID transactions of web applications, even in the presence of server failures and network partitions“
  10. Avinash Lakshman, Prashant Malik: Cassandra: Structured Storage System over a P2P Network. (PDF, 410 kB) Last.fm.com, abgerufen am 24. Juni 2010 (englisch).
  11. scalaris.zib.de
  12. hypertable.org
  13. code.google.com
  14. basho.com
  15. fallabs.com
  16. KAI. In: SourceForge. Abgerufen am 20. August 2015 (Distributed Key-Value Datastore, Amazon Dynamo Klon).
  17. Ben Scofield: NoSQL – Death to Relational Databases(?). 14. Januar 2010, abgerufen am 26. Juni 2014.