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.
| Merkmal | Relationale Datenbank (RDB) | NoSQL |
|---|---|---|
| Darstellung der Daten | Tabellen (Relationen) aus Zeilen und Spalten, die über gemeinsame Werte (Fremdschlüssel) miteinander verknüpft sind | Je nach Typ verschieden: Schlüssel-Wert-Paare, JSON-ähnliche Dokumente, Gruppen von Spalten, Graphen aus Knoten und Kanten usw. |
| Schema | Spaltennamen und Typen werden vorab festgelegt; Änderungen erfordern eine Änderung der Tabellendefinition, etwa mit ALTER TABLE | Viele Produkte verlangen vorab kein strenges Schema (schemalos), sodass Datensätze mit unterschiedlichen Feldern zusammen gespeichert werden können |
| Abfragen | Suche nach Bedingungen, Aggregation, Sortierung usw. lassen sich deklarativ in SQL, einer Standardsprache, formulieren | Meist produktspezifische APIs oder Abfragesprachen; manche Produkte bieten SQL-ähnliche Sprachen |
| Joins | Mit JOIN sind Abfragen über mehrere Tabellen möglich | Viele beherrschen Joins schlecht; Daten, die zusammen gelesen werden, werden oft gemeinsam in einem Dokument oder Wert abgelegt |
| Transaktionen und Konsistenz | Transaktionen mit den ACID-Eigenschaften können Änderungen an mehreren Zeilen und Tabellen gemeinsam festschreiben | Viele 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 Skalierung | Vor allem Scale-up durch einen leistungsfähigeren Server; Lesezugriffe lassen sich auf Replikate verteilen, Schreibzugriffe auf viele Server zu verteilen ist aber schwierig | Scale-out ist einfach, indem die Daten nach Schlüssel auf viele Server verteilt werden |
| Normalisierung | Tabellen werden normalisiert, um doppelte Daten zu beseitigen und Änderungsanomalien zu verhindern | Dieselben Daten werden oft doppelt gehalten, um schnelles Lesen zu begünstigen |
| Geeignete Einsatzgebiete | Geschäftssysteme, in denen Integrität zählt und die Datenbeziehungen komplex sind, etwa Buchhaltung, Lagerbestand und Bestellwesen | Sitzungen 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.