>>
Wissensdatenbank
/
Datenmodellierung und Datenbanksysteme
NoSQL-Datenbanksysteme
Neben den weit verbreiteten relationalen Datenbanken gibt es auch DBMS in denen die Daten nicht auf Basis des relationalen Datenmodells
gespeichert werden. Diese Kategorie von Datenbanken wird als NoSQL bezeichnet.
Motivation und Grundidee
Mit dem Aufkommen von schnell wachsenden, weltweit verbreiteten Webanwendungen mit oft mehreren hunderttausend Nutzern und einem ebenso
schnell wachsenden Datenbestand, wurden Datenbanksysteme benötigt, deren Kapazität sich schnell und ohne Beschaffung teurer
Spezialhardware vergrößern lässt. Unter dem Begriff NoSQL werden verschiedene, neuartige Datenbanksysteme zusammengefasst, mit
denen die Anforderungen von schnell wachsenden Internetanwendungen wie hohe Verfügbarkeit, einfache Skalierung und die Verarbeitung
großer Datenmengen gezielt adressiert werden. NoSQL ist dabei kein standardisierter Begiff, sondern wurde durch die Community geprägt.
Eine weithin akzeptierte Bedeutung lautet "Not only SQL" und spielt darauf an, dass NoSQL-Datenbanken nicht oder nicht nur mit der Standard
DB-Anfragesprache SQL zu verwenden sind.
Bedeutung NoSQL
Wann ein DBMS im konkreten Fall in die Kategorie der NoSQL-Systeme fällt, kann nicht immer eindeutig entschieden werden. Ein Indiz, ob
eine Datenbank zur Klasse der NoSQL-Datenbanken zählt, ist sinngemäß die Berücksichtigung einiger der folgenden Punkte:
- Das zugrundeliegende Datenmodell ist nicht relational.
Das relationale Datenmodell ist zwar das aktuell am meisten verwendete Datenmodell, jedoch gibt es zum Beispiel mit Wide Column
Stores, Key-Value-Systemen, Document Stores und Graphdatenbanken noch eine Reihe anderer Datenmodelle. Diese zeichnen sich
häufig unter anderem auch durch ein flexibleres Datenschema aus.
- Konsequente Ausrichtung auf eine verteilte und horizontale Skalierbarkeit.
Schnell wachsende Nutzerzahlen bedeuten in der Regel auch einen schnell wachsenden Datenbestand. Darüber hinaus sollen
häufig auch datenintensive Objekte wie Filme, Musik oder Bilder verwaltet werden. Der Betrieb eines DBMS muss daher sehr schnell
auf einen schnell steigenden Bedarf an Datenbankkapazität reagieren können. Mit horizontaler Skalierbarkeit ist das
Ändern der Kapazitäten durch Hinzu- oder Abschalten eines weiteren DBMS bei laufendem Betrieb der Anwendung möglich.
Dadurch entsteht ein verteiltes Datenbanksystem, bei dem die Gesamtheit aller Daten auf mehreren einzelnen DBMS gespeichert ist. Durch
die Verteilung der Daten auf mehrere Systeme wird auch die Last eines einzelnen DBMS auf viele Systeme verteilt. Wurden beim Betrieb
klassischer DBMS die internen Kapazitäten der Spezialhardware eines DBMS angepasst (Scale-up-Prinzip), so wird bei NoSQL-Systemen
die Kapazität durch Hinzuschaltung weiterer Systeme geregelt (Scale-out-Prinzip).
- Aufgrund der verteilten Architektur unterstützt das System eine einfache Datenreplikation.
Das Replizieren des Datenbestands eines DBMS ist eine wichtige Eigenschaft, um eine horizontale Skalierung zu ermöglichen. Daher
bieten viele NoSQL-DBMS eine einfache Möglichkeit, die in ihnen gespeicherten Daten zu replizieren, d.h. mehrfach abzuspeichern.
Teilweise wird dazu nur ein Datenbankkommando benötigt.
- Das System ist schemafrei oder hat nur schwächere Schemarestriktionen.
Seit dem Internetboom in den 1990er Jahren werden Anwendungen agil entwickelt. Der Funktionsumfang vieler Webanwendungen entwickelt sich
mit den Bedürfnissen einer schnell wachsenden Nutzeranzahl und dem Geschäftsmodell des Betreibers. Dabei muss es jedoch allen
Nutzern permanent zur Verfügung stehen. Mit dem Funktionsumfang einer Anwendung ändert sich in der Regel auch das Datenschema.
NoSQL Datenbanken verlagern die Verantwortung der Schemadefinition und der Einhaltung der durch das Datenschema vorgegebenen
Beschränkungen in die Logik der Anwendung. Daher muss bei Anpassungen des Datenschemas nicht die gesamte Datenbank gesperrt und
umstrukturiert werden. Mit NoSQL-Datenbanken wird der Datenbestand bei Schemaänderungen versioniert und die Konvertierung der
Daten als Hintergrundprozess angestoßen. Das System bleibt verfügbar, es gibt jedoch eine Zeitspanne, in der das DBMS bei einer
Anfrage noch nicht konvertierte alte Daten im neuen Schema ausliefert. Diese Einschränkungen bei der Konsistenz sind jedoch bei
vielen (Unterhaltungs-)Anwendungen hinnehmbar. In sicherheitskritischen Systemen oder Systemen, bei denen große Mengen Geld verwaltet
werden, sind hingegen Abschwächungen der Anforderungen an die Datenkonsistenz nicht akzeptabel.
- Dem System liegt meistens ein anderes Konsistenzmodell zugrunde: Eventually Consistent und BASE, aber nicht ACID.
Für die meisten relationalen Datenbanken gilt das ACID-Konsistenzmodell, das sehr hohe Anforderungen unter anderem an die Konsistenz
von Transaktionen stellt. Viele Anwendungen aus dem Web 2.0 und Unterhaltungsumfeld haben im Gegensatz zu Systemen von
Finanzdienstleistern wie Banken und Versicherungen jedoch keine besonders hohen Anforderungen an die Konsistenz. So können
beispielsweise Nachrichten oder Statusinformationen in sozialen Netzwerken für einen bestimmten kurzen Zeitraum inkonsistent sein,
ohne dass diese Inkonsistenz bemerkt wird oder ein Schaden entsteht. Fällt jedoch das System nur für einen kurzen Moment aus,
hat das zum Teil deutliche Auswirkungen auf die Nutzerakzeptanz. Daher reicht für viele Anwendungen ein BASE-Konsistenzmodell
(Basically Available, Soft state, Eventual consistency), in dem das Kriterium Verfügbarkeit höher als das Kriterium
Datenkonsistenz gewichtet wird. Eventually Consistent bedeutet in dem Zusammenhang, dass der Datenbestand für kurze Zeit inkonsistent
sein kann, jedoch nach einer gewissen Zeit ohne weitere Änderungen am Datenbestand wieder einen konsistenten Zustand erreicht.
Einige, jedoch nicht alle, NoSQL-Systeme unterstützen das BASE-Konsistenzmodell. Die konkreten Anforderungen an Verfügbarkeit
und Konsistenz bestimmen maßgeblich die Auswahl eines geeigneten DBMS.
- Das System bietet eine einfache API.
Die technische Schnittstelle zu relationalen Datenbanken ist die seit Jahrzehnten ausgereifte Structured Query Language. Mit ihr
können sehr komplexe Anfragen an die Datenbank formuliert werden. NoSQL-Systeme ohne relationales Datenmodell bieten keine
SQL-Schnittstelle an. Hier erfolgen die Anfragen an das DBMS über definierte technische Schnittstellen (engl.: application
programming interface, kurz: API). Diese Schnittstellen sind in der Regel sehr einfach gehalten und bieten (noch) keine Unterstützung
komplexer Anfragen.
- Das NoSQL-System ist Open Source.
Viele ursprüngliche NoSQL-Systeme sind Open Source Systeme oder aus ursprünglich als Open Source entwickelten
Datenbanksystemen entstanden.