Unterschied SQL- und NoSQL-Datenbanken
Historie
SQL-Datenbanken sind schon in den 1970er Jahren entwickelt worden. Damals lag ein starker Fokus darauf Redundanzen zu vermeiden, hauptsächlich um den zu dieser Zeit sehr teuren Speicherplatz optimal zu nutzen. NoSQL-Datenbanken wurden hingegen erst in den späten 2000ern bekannt um eine schnelle Entwicklung zu ermöglichen.
Datenbankschema
Das Schema in relationalen Systemen wird nach der Definition relativ fest vorgegeben. Änderungen der Struktur betreffen auch immer alle bestehenden Datensätze und erfordern häufig eine Blockierung des Zugriffs auf die Tabelle und damit eine vorübergehende Downtime die vor allem bei großen Datenmengen zu Problemen führen kann. In der moderneren Variante der NoSQL-Datenbanken ist man abgesehen von wenigen Einschränkungen an keine vorherigen Vorgaben gebunden.
Joins
In NoSQL-Datenbanken werden zusammenhängende Informationen an einem Ort gespeichert, bei SQL-Systemen werden sie hingegen in unterschiedlichen Tabellen gespeichert die über sogenannte Joins miteinander verknüpft werden müssen um die entsprechenden Daten bereit zu stellen.
Transaktionalität
Beim sogenannten ACID-Prinzip spricht man von der Einhaltung gewisser Regeln zur Durchführung einer Datenbanktransaktion bei der eine Abfolge von Operationen zu einer Transaktion zusammengefasst werden.
- atomicity – eine Transaktion wird vollständig oder gar nicht ausgeführt
- consistency – nach einer Transaktion befinden sich die Daten in einem konsistenten Zustand
- isolation – Transaktionen isolieren sich von anderen parallel laufende Transaktionen damit sie sich nicht gegenseitig beeinflussen
- durability – durchgeführte Änderungen sind dauerhaft gespeichert sobald eine Transaktion beendet ist
Relationale Datenbanksysteme folgend diesem ACID-Prinzip, nicht relationale Datenbanken hingegen in den meisten Fällen nicht.
Skalierung
SQL-Systeme werden vertikal skaliert, das heißt durch hinzufügen von mehr Ressourcen wie Arbeitsspeicher oder CPUs kann die Leistung verbessert werden. NoSQL-Datenbanken hingegen setzen vorrangig auf eine horizontale Skalierung, verteilen sich also über mehrere Server und ermöglichen dadurch signifikant mehr Transaktionsvolumen.
Datenspeicherung
Datensätze werden bei relationalen Systemen in Tabellen mit vordefinierten Spalten abgelegt. Bei NoSQL Datenbanken hängt das stark von der verwendeten Kategorie ab:
- dokumentorientierte Datenbanken: JSON
- Graphendatenbanken: Knoten und Kanten
- Key-Value Datenbanken: sogenannte Key-Value pairs
Haupteinsatzgebiet
SQL-Datenbanken sind nach wie vor die weltweit am meisten verbreiteten Datenbanksysteme, NoSQL ist seit einigen Jahren aber stark auf dem Vormarsch und holt stetig auf. SQL, sowie dokumentorientierte Datenbanken werden für generelle Zwecke eingesetzt, Key-Value Datenbanken für große Datenmengen welche über einen einfachen Schlüssel aufgefunden werden können und Graphendatenbanken für die Analyse und der Nachverfolgung von Objekten die miteinander in einer Beziehung stehen.