Was sind NoSQL-Datenbanken?
Veröffentlicht am 11.03.2024 von DomainFactory
NoSQL ist eine Bezeichnung für Datenbank-Managementsysteme (DBMS), die einem nicht-relationalen Ansatz folgen und dessen Nachteile vermeiden sollen. Im Gegensatz zu relationalen Datenbanken, die miteinander verknüpfte Tabellen mit vordefinierten Schemata zum Speichern von Daten verwenden, verwenden NoSQL-Datenbanken flexible Datenmodelle, die sich an Änderungen der Datenstrukturen anpassen können.
NoSQL-Datenbanken sind dadurch in der Lage, horizontal zu skalieren, um schnell wachsende Datenmengen zu verarbeiten und zu speichern – auch unstrukturierte und halbstrukturierte Daten. Kein Wunder also, dass das Thema NoSQL für die Softwareentwicklung im Big-Data-Zeitalter von enormer Bedeutung ist. Erfahren Sie in diesem Blogbeitrag alles, was Sie zum Thema NoSQL wissen müssen.
Was bedeutet NoSQL?
Nicht-relationale Datenbanken, zum Beispiel objekt- oder dokumentenorientierte DBMS, gibt es ebenso lange wie relationale – und ursprünglich stand der Begriff NoSQL auch noch gar nicht für „nicht-relational“, sondern buchstäblich für „nicht SQL“: Eine zuerst 1998 erschienene Datenbank dieses Namens war zwar relational, verzichtete aber auf SQL (Structured Query Language), die Standardsprache für die Kommunikation mit relationalen Datenbanken. Als Sammelbezeichnung für nicht-relationale Datenbanksysteme wird der Begriff NoSQL dem Informatiker Johan Oskarsson zugeschrieben, der ihn im Jahr 2009 auf einer Tagung über verteilte strukturierte Datenspeicherung eingeführt haben soll. Inzwischen ist in der Fachwelt jedoch vermehrt von „Not only SQL“ die Rede, da NoSQL-Datenbanken heute eine breite Palette unterschiedlicher Datenbankarchitekturen und Datenmodelle umfassen und durchaus auch mit SQL-artigen Abfragesprachen oder auch relationalen Datenbanken kombiniert werden können.
Warum NoSQL?
Um die Notwendigkeit von NoSQL-Ansätzen besser zu verstehen, hilft ein Blick auf die Geschichte von SQL: Vor dem Aufkommen relationaler Datenbanken verwendeten Unternehmen in der Regel hierarchische Datenbanksysteme mit einer baumartigen Struktur für die Datentabellen. Diese frühen Datenbank-Managementsysteme ermöglichten es den Benutzern, große Datenmengen zu organisieren. Sie hatten allerdings den Nachteil, sehr komplex zu sein, waren oft auf eine spezifische Anwendung zugeschnitten und nur begrenzt in der Lage, Daten aufzuspüren. Das führte schließlich zur Entwicklung relationaler Datenbank-Managementsysteme. Sie boten vor allem zwei Vorteile: Strikte Konsistenzanforderungen sorgten für eine zuverlässige Speicherung kritischer Unternehmensdaten (zum Beispiel Transaktionsdaten) und die SQL-Schnittstelle erlaubte die flexible Interaktion mit den gespeicherten Daten und auch sehr komplexe Abfragen.
Im Laufe der Zeit stiegen jedoch die Anforderungen an eine schnellere und differenziertere Nutzung großer Datenmengen – zum Beispiel für Web-Anwendungen (etwa im Bereich E-Commerce) oder solche, bei denen Datenströme in Echtzeit verarbeitet werden sollen. Relationale Datenbanken boten nicht die benötigte Skalierbarkeit und waren auch nicht für verteilte Datenbanken konzipiert, die benötigt wurden, um kontinuierlich und ausfallsicher kurze Antwortzeiten für Millionen von Anfragen zu gewährleisten. Programmierer brauchten also etwas Flexibleres als SQL-Datenbanken. So gewannen NoSQL-Datenbanksysteme bereits seit Ende der 1990er-Jahre zunehmend an Bedeutung.
Anwendungsbereiche von NoSQL
NoSQL-Datenbanken kommen häufig in Anwendungen zum Einsatz, bei denen größtenteils unstrukturierte Daten wie Textdokumente, Grafiken oder Multimedia-Dateien oder halbstrukturierte Daten wie E-Mails anfallen, große Datenmengen (zum Beispiel Massendaten von Sensoren) in Echtzeit verarbeitet und analysiert werden müssen oder verteilte Speicher-Cluster benötigt werden. Man findet sie zum Beispiel bei der Analyse sozialer Medien, im E-Commerce oder bei Spielen, in Logistik- oder IoT-Anwendungen (Internet of Things), im Dokumentenmanagement oder im Customer Relationship Management (CRM).
Obwohl NoSQL-Datenbanken offensichtliche Vorteile bieten, sind sie relationalen Datenbanken nicht grundsätzlich für alle Anwendungen vorzuziehen, da sie nicht das gleiche Maß an Datenkonsistenz und Transaktionsgarantien bieten. Bei der Auswahl eines Datenbankmanagementsystems ist es daher wichtig, die spezifischen Anforderungen einer Anwendung sorgfältig zu bewerten.
Beispiele
Geht es beispielsweise um ein System zur Bestellungsverwaltung in einem E-Commerce-Startup mit überschaubarem Produktkatalog, ist eine relationale Datenbank eine gute Wahl. Denn Kundendaten, Bestelldaten und Produktdaten können in entsprechenden Tabellen, die über einen eindeutigen, gemeinsamen Schlüssel wie eine Kunden-ID oder eine Bestell-ID miteinander verknüpft sind, gut abgebildet werden. Da es sich dabei größtenteils um Textdaten handelt, vielleicht ergänzt durch ein paar Bilder, ist auch die fehlende Skalierbarkeit kein Problem.
Anders liegt der Fall, wenn etwa ein Online-Dokumentenmanagement für ein großes Unternehmen aufgebaut werden soll, mit einer großen und schnell wachsenden Zahl von Dokumenten ganz unterschiedlicher Typen und womöglich einer Volltext-Suchfunktion. Dann sollten unbedingt auch NoSQL-Datenbanken in die engere Wahl. Denn zum einen können Sie bei diesen horizontal skalieren, also bei wachsendem Speicherbedarf einfach neue Datenbankserver hinzufügen. Zum anderen können sich bei einem solchen System im Laufe der Zeit neue Anforderungen ergeben, sodass es nützlich ist, die Datenstruktur leicht anpassen zu können. Und nicht zuletzt ist – im Gegensatz zu Anwendungen mit Finanzdaten – Datenkonsistenz bei einem solchen System oft weniger wichtig als Performance und Verfügbarkeit.
Typen von NoSQL-Datenbanken
Es gibt diverse Typen von NoSQL-Datenbanksystemen, die sich für verschiedene Anwendungsbereiche eignen. Wir stellen fünf interessante Konzepte vor:
Dokumentenorientierte Datenbanksysteme
Dokumentenorientierte Datenbanken speichern Daten als strukturierte oder unstrukturierte Dokumente zusammen mit einem Identifikator oder formalen Beschreibungen (Tags).
Die Verwendung von Dokumentendatenbanken hat mit der Verwendung von JavaScript und der JavaScript Object Notation (JSON) zugenommen. Moderne Dokumentendatenbanken speichern oft halbstrukturierte Dokumente zum Beispiel im JSON- oder XML-Format. Sie eignen sich zum Beispiel für die Verwaltung von Inhalten und die Verarbeitung von Daten für mobile Anwendungen wie Blogging-Plattformen, Web-Analytics und E-Commerce-Anwendungen. Couchbase Server, CouchDB, MarkLogic und MongoDB sind Beispiele für Dokumentendatenbanken.
Objektorientierte Datenbanksysteme
Objektorientierte Datenbanken verwalten Daten als „Objekte“ im Sinne der Objektorientierung in der Informatik, also als komplexe, hierarchisch (in Objektklassen) geordnete Entitäten mit Eigenschaften (Attributen), auf die über „Methoden“ zugegriffen werden kann. Mit objektorientierten Programmiersprachen wie JavaScript, C# oder Python und insbesondere in Anwendungen, deren Datenmodell gut zu diesen passt (z. B. wissenschaftliche Simulationen oder CAD/CAM), lassen sich solche Datenbanken häufig besser verwenden als welche mit relationalem Datenmodell (wo dann „objektrelationale Abbildung“ nötig wird). Beispiele für objektorientierte Datenbanken sind Intersystems Caché, Realm oder Gemstone.
Google Key-Value-Datenbanksysteme
Diese Datenbanken speichern Daten als sogenannte Schlüsselwert- oder Key-Value-Paare und sind für einfache und schnelle Lese- und Schreibvorgänge optimiert.
Key-Value-Datenbanken implementieren ein einfaches Datenmodell, bei dem ein eindeutiger Schlüssel mit einem zugehörigen Wert verknüpft wird. Aufgrund seiner Einfachheit lassen sich damit hoch skalierbare und leistungsfähige Anwendungen entwickeln. Key-Value-Datenbanken sind ideal für die Sitzungsverwaltung und das Zwischenspeichern von Daten in Webanwendungen, wie sie zum Beispiel für die Verwaltung von Einkaufswagendetails beim Online-Shopping oder für die Verwaltung von Sitzungsdetails für Multiplayer-Spiele benötigt werden.
Die Implementierungen unterscheiden sich im Hinblick auf ihre Ausrichtung bei der Arbeit mit RAM, Solid-State-Laufwerken oder Festplattenlaufwerken. Beispiele für beliebte Key-Value-Datenbanken sind Aerospike, DynamoDB, Redis und Riak.
Spaltenbasierte Datenbanksysteme
Spaltenbasierte Datenbanken speichern Daten als Spaltenfamilien, das heißt als Gruppen von Spalten, die als eine einzige Einheit behandelt werden. Das ermöglicht im Gegensatz zu zeilenorientierten Datenbanken die schnelle und effiziente Abfrage von großen Datenmengen, etwa beim Data Mining. Amazon DynamoDB und Bigtable nutzen dieses Datenmodell.
Google Graph-Datenbanksysteme
Graphdatenspeicher sind darauf ausgelegt, komplexe Beziehungen zwischen Daten zu verarbeiten. Sie organisieren Daten als Knoten, die den Zeilen in einer relationalen Datenbank ähneln, und sogenannten Edges, die Verbindungen zwischen Knoten darstellen. Da das Graphsystem die Beziehungen zwischen den Knoten speichert, unterstützt es die umfassende Darstellung von Datenbeziehungen. Im Gegensatz zu relationalen Modellen, die sich auf starre Schemata stützen, kann sich das Graphen-Datenmodell im Laufe der Zeit und der Nutzung weiterentwickeln. Graphdatenbanken werden in Systemen eingesetzt, die Beziehungen abbilden müssen. Dazu zählen Social-Media-Plattformen, Reservierungssysteme oder das CRM. Beispiele für Graphdatenbanken sind AllegroGraph, IBM Graph und Neo4j.
Vorteile von NoSQL-Datenbanken
- NoSQL-Datenbanken vereinfachen die Anwendungsentwicklung, insbesondere für interaktive Echtzeit-Webanwendungen, die beispielsweise eine REST-API und Webdienste verwenden.
- Sie bieten die nötige Skalierbarkeit für größere Datensätze, wie sie im Analytics-Bereich und bei KI-Anwendungen üblich sind.
- Sie sind besonders für die Anforderungen von Cloud, Mobile, Social Media und Big Data geeignet.
- Sie wurden für spezifische Anwendungsfälle entwickelt und sind dort einfacher zu verwenden als relationale Datenbanken.
Nachteile von NoSQL-Datenbanken
- Jede NoSQL-Datenbank hat ihre eigene Syntax für die Abfrage und Verwaltung von Daten. Das bringt im Gegensatz zu SQL, der Verkehrssprache für relationale und SQL-Datenbanksysteme, mehr Komplexität mit sich.
- Bei NoSQL-Datenbanken ist es komplizierter als bei SQL oder gar nicht möglich, komplexe Abfragen durchzuführen.
- Durch das Fehlen der in relationalen und SQL-Datenbanksystemen eingebauten Schutzmechanismen für die Datenintegrität und die verteilte Speicherung sind Daten beim Abruf manchmal inkonsistent. Das bedeutet, dass sie für Transaktionen, die sofortige Integrität erfordern, wie Bank- und Geldautomatentransaktionen, nicht gut geeignet sind.
- Da NoSQL-Datenbanken auf eine vergleichsweise kurze Geschichte zurückblicken, gibt es keine umfassenden Industriestandards wie bei relationalen und SQL-DBMS-Angeboten und auch keine großen Nutzer-Communities.
Hybrid-Datenbanken auf dem Vormarsch
Da jeder Datenbanktyp seine spezifischen Stärken und Schwächen hat und in der Regel eine Kombination erforderlich ist, um die nötige Flexibilität zu erreichen, kommen immer öfter Hybrid-DBMS zum Einsatz, die relationale- und nicht-relationale Datenbanken verbinden.
Titelmotiv: Photo by Pawel Czerwinski on Unsplash