Erklärung von NoSQL-Datenbanken

Erklärung von NoSQL-Datenbanken

 

Was ist NoSQL?

NoSQL ist eine Herangehensweise an Datenbanken, die die Abkehr von konventionellen relationalen Datenbanksystemen (RDBMS) darstellt. Um eine Definition für NoSQL zu geben, muss man zuerst SQL erklären, eine Abfragesprache in relationalen Datenbanken. Relationale Datenbanken stützen sich auf Tabellen, Spalten, Zeilen oder Schemas, um Daten zu organisieren oder abzurufen. Im Gegensatz dazu haben NoSQL-Datenbanken diese Strukturen nicht, sondern nutzen flexiblere Datenmodelle. NoSQL kann „nicht SQL“ oder „nicht nur SQL“ bedeuten. Da relationale Datenbanken den Anforderungen an Performance, Skalierbarkeit und Flexibilität nicht mehr gerecht werden, die für die datenhungrigen Applikationen der nächsten Generation von Bedeutung sind, gehören NoSQL-Datenbanken bereits jetzt zum Standardrepertoire der meisten Unternehmen. NoSQL eignet sich insbesondere zur Speicherung unstrukturierter Daten, die sich im Vergleich zu strukturierten Daten viel schneller vermehren und in relationalen Datenbankschemas nicht verarbeitet werden können. Typische Beispiele für unstrukturierte Daten sind: Benutzer- und Sitzungsdaten, Chat-, Messaging- und Protokolldaten, Zeitreihendaten wie IoT- und Gerätedaten sowie große Objekte wie Videos und Bilder.

NoSQL-Datenbanktypen

Es gibt verschiedene NoSQL-Datenbankvarianten, die jeweils unterschiedliche Anforderungen und Anwendungsfälle unterstützen. Sie lassen sich in folgende vier Hauptkategorien unterteilen:

  • Key-Value-Datenbanken: Key-Value-Systeme stehen unter den NoSQL-Datenbanken für Einfachheit und sind sehr hilfreich, wenn bei einer Anwendung Highspeed-Lese- und Schreibzeiten für nicht transaktionale Daten erreicht werden sollen. Die gespeicherten Werte können jedes beliebige Binärobjekt sein: Text, Video, JSON-Dokumente usw. Der Zugriff auf die Werte erfolgt über einen Schlüssel. Die Anwendung hat vollständige Kontrolle darüber, was in dem Wert gespeichert wird, weshalb dieses NoSQL-Modell die flexibelste Variante ist. Daten werden in einem Cluster partitioniert und repliziert, um die gewünschte Skalierbarkeit und Verfügbarkeit zu erreichen. Deshalb unterstützten Key-Value-Datenbanken meist keine Transaktionen. Anwendungen, die nicht transaktionale Daten mit hoher Geschwindigkeit verarbeiten, können jedoch überaus effektiv skaliert werden.
  • Dokumentdatenbanken: Dokumentorientierte Datenbanken speichern in der Regel selbstbeschreibende JSON-, XML- und BSON-Dokumente. Sie haben eine gewisse Ähnlichkeit mit Key-Value-Systemen, doch die Werte sind in diesem Fall Einzeldokumente, in denen sämtliche Daten zu einem spezifischen Schlüssel gespeichert werden. Häufig abgefragte Felder können für schnelle Abrufzeiten indexiert werden, ohne dass dafür der Schlüssel bekannt sein muss. Jedes Dokument kann dieselbe oder eine andere Struktur haben.
  • Wide Column Stores: Spaltenorientierte NoSQL-Datenbanken, auch Wide Column Stores genannt, speichern Daten in Tabellen mit Zeilen und Spalten, ähnlich wie relationale Datenbanken. Der Unterschied ist jedoch, dass Name und Format der Spalten innerhalb einer Tabelle in jeder Zeile anders sein können. In spaltenorientierten Datenbanksystemen werden Spalten mit ähnlichen oder verwandten Daten in Gruppen angeordnet. So können zusammenhängende Daten in einem einzigen Vorgang abgefragt werden, weil nur die Spalten abgerufen werden, die mit der Abfrage verknüpft sind. In einer relationalen Datenbank sind Daten in unterschiedlichen Zeilen an unterschiedlichen Orten auf der Festplatte gespeichert, weshalb für Abfragen mehrere Festplattenoperationen erforderlich sind.
  • Graphendatenbanken: In einer Graphendatenbank werden Graphenstrukturen genutzt, um Beziehungen zu speichern, abzubilden und abzufragen. Sie bieten eine indexlose Nebeneinanderstellung der Elemente, sodass diese ohne Verwendung eines Index miteinander verknüpft werden.

Multimodale Datenbanken: Nutzen eine Kombination der vier beschriebenen Typen und können somit eine größere Bandbreite an Anwendungen unterstützen.

Vorteile von NoSQL

NoSQL-Datenbanken bieten Unternehmen wichtige Vorteile gegenüber konventionellen relationalen Datenbanken:

  • Skalierbarkeit: NoSQL-Datenbanken nutzen eine horizontale Scale-out-Methode, mit der Kapazitäten mithilfe von Standardhardware schnell, einfach und unterbrechungsfrei aufgestockt oder reduziert werden können. Damit lassen sich die enormen Kosten und das komplexe manuelle Sharding vermeiden, die für die Skalierung relationaler Datenbanken erforderlich wären.
  • Performance: Unternehmen können die Performance ihrer NoSQL-Datenbanken erhöhen, indem sie ihre Infrastruktur ganz einfach mit Standardressourcen aufstocken. Das bietet den Vorteil, dass sie weiterhin schnelle Services für ihre Nutzer liefern und dabei den Return-on-Invest für zusätzlich Ressourcen vorausbestimmen können – auch hier ohne Gemeinkosten für manuelles Sharding.
  • Hochverfügbarkeit: Der allgemeine Zweck von NoSQL-Datenbanken ist, die Hochverfügbarkeit sicherzustellen und die Komplexität relationaler Datenbanksysteme mit primären und sekundären Knoten zu vermeiden. Einige „verteilte“ NoSQL-Datenbanken nutzen eine Masterless-Architektur, die Daten automatisch gleichmäßig auf verschiedene Ressourcen verteilt, sodass die Anwendung auch bei Ausfall eines Knotens weiterhin für Lese- und Schreibvorgänge verfügbar bleibt.
  • Globale Verfügbarkeit: Indem Daten automatisch auf verschiedene Server, Datencenter oder Cloud-Ressourcen repliziert werden, können NoSQL-Datenbanken die Latenz minimieren und für Nutzer an jedem Ort der Welt ein gleichmäßiges Anwendungserlebnis sicherstellen. Ein weiterer Vorteil ist der erheblich reduzierte Verwaltungsaufwand für Datenbanken im Gegensatz zu manuellen relationalen Datenbankkonfigurationen, wodurch sich die Mitarbeiter im operativen Bereich stärker auf andere Unternehmensprioritäten konzentrieren können.
  • Flexible Datenmodellierung: NoSQL bietet die Möglichkeit, flexible und flüssige Datenmodelle zu implementieren. Anwendungsentwickler können die Datentypen und Abfrageoperationen nutzen, die am besten für den jeweiligen Anwendungszweck geeignet sind, und nicht, was am besten zum Datenbankschema passt. Im Ergebnis werden einfachere Interaktionen zwischen Anwendung und Datenbank sowie eine schnellere, agilere Entwicklung erreicht.