Relationale Datenbank (RDB) vs. NoSQL: Datenmodell, Schema, Joins, Konsistenz und Skalierung

Eine relationale Datenbank (RDB) stellt Daten als Tabellen aus Zeilen und Spalten dar und wird mit SQL abgefragt. Sie erlaubt komplexe Abfragen, die Tabellen verknüpfen, und hält die Daten über die ACID-Eigenschaften von Transaktionen und Einschränkungen wie Primär- und Fremdschlüssel streng konsistent. NoSQL ist ein Sammelbegriff für Datenbanken, die nicht relational sind, darunter Key-Value-, Dokument-, Wide-Column- und Graphdatenbanken. Die meisten machen das Datenformat flexibel und das Verteilen auf viele Server einfacher, verzichten dafür aber auf komplexe Abfragen wie Joins und auf einen Teil der strengen Konsistenz. Statt dass eine Seite besser wäre, entscheiden die Form der Daten und die benötigten Eigenschaften.

MerkmalRelationale Datenbank (RDB)NoSQL
Darstellung der DatenTabellen (Relationen) aus Zeilen und Spalten, die über gemeinsame Werte (Fremdschlüssel) miteinander verknüpft sindJe nach Typ verschieden: Schlüssel-Wert-Paare, JSON-ähnliche Dokumente, Gruppen von Spalten, Graphen aus Knoten und Kanten usw.
SchemaSpaltennamen und Typen werden vorab festgelegt; Änderungen erfordern eine Änderung der Tabellendefinition, etwa mit ALTER TABLEViele Produkte verlangen vorab kein strenges Schema (schemalos), sodass Datensätze mit unterschiedlichen Feldern zusammen gespeichert werden können
AbfragenSuche nach Bedingungen, Aggregation, Sortierung usw. lassen sich deklarativ in SQL, einer Standardsprache, formulierenMeist produktspezifische APIs oder Abfragesprachen; manche Produkte bieten SQL-ähnliche Sprachen
JoinsMit JOIN sind Abfragen über mehrere Tabellen möglichViele beherrschen Joins schlecht; Daten, die zusammen gelesen werden, werden oft gemeinsam in einem Dokument oder Wert abgelegt
Transaktionen und KonsistenzTransaktionen mit den ACID-Eigenschaften können Änderungen an mehreren Zeilen und Tabellen gemeinsam festschreibenViele Produkte beschränken Änderungen auf einen einzelnen Schlüssel oder ein Dokument oder erlauben Eventual Consistency, bei der Replikate nicht sofort übereinstimmen; manche Produkte bieten ACID-Transaktionen
Art der SkalierungVor allem Scale-up durch einen leistungsfähigeren Server; Lesezugriffe lassen sich auf Replikate verteilen, Schreibzugriffe auf viele Server zu verteilen ist aber schwierigScale-out ist einfach, indem die Daten nach Schlüssel auf viele Server verteilt werden
NormalisierungTabellen werden normalisiert, um doppelte Daten zu beseitigen und Änderungsanomalien zu verhindernDieselben Daten werden oft doppelt gehalten, um schnelles Lesen zu begünstigen
Geeignete EinsatzgebieteGeschäftssysteme, in denen Integrität zählt und die Datenbeziehungen komplex sind, etwa Buchhaltung, Lagerbestand und BestellwesenSitzungen und Caches für Webdienste mit sehr vielen Zugriffen, Daten ohne feste Form, große Mengen an Logs, Beziehungen zwischen Personen oder Dingen (Graphen)

Die Zahlenwerte sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.

Wann welche Variante?

Relationale Datenbank
Für Daten, die während einer Änderung nicht inkonsistent werden dürfen, wie Geld oder Lagerbestände, und für Daten, die unter verschiedenen Bedingungen verknüpft und aggregiert werden sollen. Sie ist die Standardwahl für die meisten Geschäftssysteme.
NoSQL
Wenn Datenmenge oder Zugriffe für einen einzelnen Server zu groß sind, wenn die Form der Daten uneinheitlich ist und sich oft ändert oder wenn überwiegend einfach per Schlüssel gelesen und geschrieben wird. Wichtig ist, den zum Zweck passenden Typ zu wählen.

Häufige Fragen

Bedeutet NoSQL „kein SQL“?

Meist wird es als „Not only SQL“ (nicht nur SQL) erklärt und weniger als Ablehnung von SQL denn als Sammelbegriff für Alternativen zu relationalen Datenbanken verwendet. Tatsächlich lassen manche Produkte SQL-ähnliche Abfragesprachen zu.

Welche Arten von NoSQL-Datenbanken gibt es?

Es gibt vier Hauptarten. Key-Value-Stores sind auf einfaches Lesen und Schreiben von Werten per Schlüssel spezialisiert. Dokumentdatenbanken speichern Dokumente mit verschachtelten, JSON-ähnlichen Strukturen und können auch nach Feldern innerhalb der Dokumente suchen. Wide-Column-Stores erlauben jeder Zeile andere Spalten und eignen sich, um große Datenmengen verteilt auf viele Server zu schreiben. Graphdatenbanken stellen Beziehungen zwischen Daten als Knoten und Kanten dar und eignen sich für Abfragen, die diesen Beziehungen folgen.

Wie hängt das CAP-Theorem mit diesem Vergleich zusammen?

Das CAP-Theorem zeigt, dass eine verteilte Datenbank mit Replikaten auf mehreren Servern bei einer Netzwerkpartitionierung nicht zugleich Konsistenz (jeder Lesezugriff liefert den neuesten Wert) und Verfügbarkeit (jede Anfrage erhält eine Antwort) vollständig garantieren kann. Viele NoSQL-Produkte geben der Verfügbarkeit Vorrang und setzen auf Eventual Consistency, bei der sich die Replikate mit der Zeit angleichen.

Werden beide auch im selben System eingesetzt?

Häufig. Zum Beispiel kommen Daten, bei denen Integrität zählt, etwa Bestellungen und Zahlungen, in eine relationale Datenbank; Sitzungen angemeldeter Nutzer und Caches häufig gelesener Daten in einen Key-Value-Store; und Daten ohne einheitliche Form, etwa Produktbeschreibungen, in eine Dokumentdatenbank.

Verständnis prüfen

Welche Aussage beschreibt unter den als NoSQL bezeichneten Datenbanken die Eigenschaften eines Key-Value-Stores im Allgemeinen richtig?

  1. AEr kann komplexes SQL einschließlich Joins und Unterabfragen schneller verarbeiten als eine relationale Datenbank
  2. BBevor Daten geschrieben werden, müssen Namen und Typen aller Spalten streng als Schema definiert sein
  3. CEr ist auf das einfache Lesen und Schreiben eines Werts über die Angabe seines Schlüssels spezialisiert und lässt sich leicht auf mehrere Server verteilen, eignet sich aber nicht für komplexe Abfragen wie Joins
Antwort und Erläuterung anzeigen

Antwort: C. Er ist auf das einfache Lesen und Schreiben eines Werts über die Angabe seines Schlüssels spezialisiert und lässt sich leicht auf mehrere Server verteilen, eignet sich aber nicht für komplexe Abfragen wie Joins

NoSQL ist ein Sammelbegriff für Datenbanken, die keine relationalen Datenbanken sind, darunter Key-Value-, Dokument-, spaltenorientierte (Wide-Column-) und Graphdatenbanken. Ein Key-Value-Store speichert Paare aus einem Schlüssel (Bezeichner) und einem Wert und ist auf das einfache Abrufen eines Werts über die Angabe seines Schlüssels spezialisiert. Da sich die Daten leicht nach Schlüsseln aufteilen und auf mehrere Server verteilen lassen, wird er von Webdiensten mit sehr hohem Verkehrsaufkommen genutzt, etwa um Informationen zu angemeldeten Nutzern (Sitzungen) zu speichern. Andererseits ist er schwach bei der Suche nach dem Inhalt von Werten und bei komplexen Abfragen wie Joins, sodass die Anwendung dies ausgleichen muss. Viele Produkte verlangen zudem nicht, dass das Format der Werte vorab streng festgelegt wird (schemalos). Manche Produkte erlauben außerdem Eventual Consistency, bei der Änderungen nicht sofort in allen verteilten Kopien ankommen.

Welche Beschreibung des CAP-Theorems für eine verteilte Datenbank, die Kopien der Daten auf mehreren Servern hält, ist zutreffend?

  1. AIst das Netzwerk zwischen den Servern partitioniert, lassen sich Konsistenz (jeder Server liefert den neuesten Wert) und Verfügbarkeit (jede Anfrage erhält eine Antwort) nicht gleichzeitig vollständig erfüllen
  2. BBei geeignetem Entwurf lassen sich Konsistenz, Verfügbarkeit und Partitionstoleranz stets alle gleichzeitig erfüllen
  3. CPartitionstoleranz bedeutet, Netzwerkverbindungen doppelt auszulegen, damit das Netzwerk zwischen den Servern nie partitioniert wird
Antwort und Erläuterung anzeigen

Antwort: A. Ist das Netzwerk zwischen den Servern partitioniert, lassen sich Konsistenz (jeder Server liefert den neuesten Wert) und Verfügbarkeit (jede Anfrage erhält eine Antwort) nicht gleichzeitig vollständig erfüllen

Das CAP-Theorem zeigt, dass eine verteilte Datenbank die folgenden drei Eigenschaften nicht alle gleichzeitig vollständig erfüllen kann: Konsistenz (Consistency: Lesen von einem beliebigen Server liefert das Ergebnis des letzten Schreibvorgangs), Verfügbarkeit (Availability: Jeder nicht ausgefallene Server beantwortet jede Anfrage) und Partitionstoleranz (Partition Tolerance: Das System arbeitet weiter, auch wenn die Kommunikation zwischen Servern unterbrochen ist). Da sich Netzwerkpartitionen in der Praxis nicht vermeiden lassen, lautet der Kern: Tritt eine Partition auf, muss das System wählen, ob es der Konsistenz Vorrang gibt und die Antwort auf manche Anfragen einstellt oder der Verfügbarkeit Vorrang gibt und weiter antwortet, wobei veraltete Werte zurückgegeben werden dürfen. Ohne Partition lassen sich Konsistenz und Verfügbarkeit beide erfüllen. Viele NoSQL-Produkte geben der Verfügbarkeit Vorrang und setzen auf Eventual Consistency, bei der sich die Kopien mit der Zeit angleichen. Partitionstoleranz bedeutet nicht, Verbindungen doppelt auszulegen, sondern die Eigenschaft, auch bei einer Partition weiterzuarbeiten.

Was ist der Hauptzweck der Normalisierung von Tabellen in einer relationalen Datenbank?

  1. ADie Zahl der Tabellen zu verringern, damit jede Suche ohne Joins schnell ausgeführt werden kann
  2. BDaten zu verschlüsseln, damit Unbefugte sie nicht lesen können
  3. CDoppelt gespeicherte Daten zu beseitigen und Anomalien zu verhindern, etwa dass Inhalte nach einer Änderung widersprüchlich werden
Antwort und Erläuterung anzeigen

Antwort: C. Doppelt gespeicherte Daten zu beseitigen und Anomalien zu verhindern, etwa dass Inhalte nach einer Änderung widersprüchlich werden

Die Normalisierung ist ein Entwurfsverfahren, das Tabellen anhand funktionaler Abhängigkeiten zwischen Spalten (eine Beziehung, bei der der Wert einer Spalte den Wert einer anderen eindeutig festlegt) aufteilt, damit dieselbe Tatsache nicht an mehreren Stellen gespeichert wird. Steht zum Beispiel in jeder Zeile einer Mitarbeitertabelle auch der Abteilungsname, müssen bei der Umbenennung einer Abteilung alle Zeilen ihrer Mitarbeiter geändert werden, und wird eine übersehen, sind die Inhalte widersprüchlich (Änderungsanomalie). Weitere Probleme entstehen: Eine Abteilung ohne Mitarbeiter lässt sich noch nicht erfassen (Einfügeanomalie), und das Löschen des letzten Mitarbeiters einer Abteilung löscht auch die Angaben zur Abteilung (Löschanomalie). Werden die Abteilungsangaben in eine eigene Abteilungstabelle ausgelagert, muss ein Abteilungsname nur an einer Stelle korrigiert werden. Andererseits erfordert die Aufteilung beim Suchen mehr Joins, sodass Normalisierung Suchen nicht unbedingt beschleunigt.

  1. In einer Datenbank, die überwiegend zum Lesen und Aggregieren dient, werden normalisierte Tabellen manchmal absichtlich zu einer zusammengeführt, sodass dieselben Daten mehrfach gehalten werden (Denormalisierung). Welche Kombination aus Vorteil und Nachteil dieses Entwurfs ist richtig?
  2. Welche der ACID-Eigenschaften, die eine Transaktion haben sollte, besagt, dass eine Überweisung, die Konto A belastet und Konto B gutschreibt, entweder vollständig oder gar nicht ausgeführt wird, selbst wenn zwischendurch ein Fehler auftritt?

Übungsfragen zu Grundlagen der Datenbanken

Wichtige Begriffe erklärt

Relationale Datenbank
Datenbank, die Daten als Tabellen (Relationen) aus Zeilen und Spalten darstellt und Tabellen über gemeinsame Werte miteinander verknüpft; auch RDB genannt. Abfragen und Änderungen erfolgen in SQL, und Integritätsbedingungen wie Primär- und Fremdschlüssel halten die Daten konsistent.
NoSQL
Sammelbegriff für Datenbanken, die keine relationalen Datenbanken sind, darunter Key-Value-, Dokument-, spaltenorientierte und Graphdatenbanken. Viele Produkte lassen sich leicht auf mehrere Server verteilen und erlauben flexible Datenformate, sind aber oft schwach bei komplexen Abfragen wie Joins und bei strikter Konsistenz.
SQL
Standardsprache relationaler Datenbanken zum Definieren von Tabellen, zum Suchen, Einfügen, Ändern und Löschen von Daten und zum Steuern von Berechtigungen. Sie ist durch ISO/IEC genormt (in Japan zudem als JIS). Zu ihren Anweisungen gehören SELECT, INSERT, UPDATE, DELETE, CREATE TABLE und GRANT.
Transaktion
Folge von Operationen auf einer Datenbank, die als eine Einheit behandelt wird. COMMIT macht die Ergebnisse dauerhaft, ROLLBACK stellt den Zustand vor Beginn wieder her. Das DBMS verwaltet Transaktionen mit Sperren und Protokollen so, dass sie Atomarität, Konsistenz, Isolation und Dauerhaftigkeit (die ACID-Eigenschaften) erfüllen.
ACID-Eigenschaften
Anfangsbuchstaben von vier Eigenschaften, die eine Transaktion erfüllen sollte: Atomarität (Atomicity: alles wird ausgeführt oder nichts), Konsistenz (Consistency: Integritätsbedingungen bleiben erfüllt), Isolation (gleichzeitig laufende Transaktionen beeinflussen einander nicht) und Dauerhaftigkeit (Durability: festgeschriebene Ergebnisse gehen auch bei einem Ausfall nicht verloren).
Normalisierung
Entwurfsverfahren, das Tabellen einer relationalen Datenbank anhand funktionaler Abhängigkeiten zwischen Spalten aufteilt, damit dieselbe Tatsache nicht an mehreren Stellen gespeichert wird. Es beseitigt doppelt gespeicherte Daten und verhindert Änderungs-, Einfüge- und Löschanomalien. Zu den Stufen gehören die erste bis dritte Normalform und die Boyce-Codd-Normalform.
Primärschlüssel
Spalte oder Spaltenkombination, mit der eine Zeile einer Tabelle eindeutig identifiziert wird. Sie unterliegt den Bedingungen, dass sich ihre Werte nicht wiederholen und nicht NULL sein dürfen. Der Primärschlüssel wird aus den minimalen Spaltenkombinationen ausgewählt, die eine Zeile eindeutig identifizieren können (Schlüsselkandidaten).
Fremdschlüssel
Spalte, die auf den Primärschlüssel (oder eine eindeutige Spalte) einer anderen Tabelle verweist. Über die Bedingung der referenziellen Integrität, die nur in der referenzierten Tabelle vorhandene Werte oder NULL zulässt, verhindert sie Daten, die auf nicht existierende Zeilen zeigen. Auch das Verhalten beim Löschen oder Ändern einer referenzierten Zeile (Zurückweisen, kaskadierendes Löschen usw.) lässt sich festlegen.

Verwandte Vergleiche