Was sind die Unterschiede zwischen NoSQL und einem traditionellen RDBMS?

71

Was sind die Unterschiede zwischen NoSQL und einem traditionellen RDBMS?

In den letzten Monaten wurde NoSQL häufig in den technischen Nachrichten erwähnt. Was sind die wichtigsten Merkmale eines herkömmlichen RDBMS? Auf welcher Ebene (physisch, logisch) treten die Unterschiede auf?

Wo kann man NoSQL am besten einsetzen? Warum?

Spredzy
quelle

Antworten:

61

NoSQL steht für "Nicht nur SQL" und bedeutet normalerweise, dass es sich bei der Datenbank nicht um eine relationale Datenbank handelt, die in den letzten Jahrzehnten sehr beliebt war.

Der Grund, warum NoSQL in den letzten Jahren so beliebt war, liegt hauptsächlich darin, dass es nicht mehr so ​​einfach ist, eine relationale Datenbank zu verwenden, wenn sie aus einem Server heraus wächst. Mit anderen Worten, sie lassen sich in einem verteilten System nicht sehr gut skalieren. Alle großen Websites, auf denen Sie Google, Yahoo, Facebook und Amazon erwähnt haben (ich weiß nicht viel über Digg), enthalten viele Daten und speichern diese aus verschiedenen Gründen in verteilten Systemen . Es kann sein, dass die Daten nicht auf einen Server passen oder dass Anforderungen an die Hochverfügbarkeit bestehen .

CAP-Satz

Die Eigenschaften eines verteilten Systems können durch das CAP-Theorem beschrieben werden . Von den drei Eigenschaften können Sie höchstens zwei haben:

  • C onsistency
  • Eine Verfügbarkeit
  • Toleranz gegenüber Netzwerk- P- Partitionierung

Amazon Dynamo verwendet Eventual Consistency , um alle drei Eigenschaften abzurufen. Das Papier Dynamo: Der hochverfügbare Key-Value-Store von Amazon ist eine Lektüre wert, wenn Sie sich mit NoSQL-Datenbanken und verteilten Systemen befassen. Amazon Dynamo verfügt über die Eigenschaften A und P.

Google geht mit BigTable einen anderen Weg , der die Eigenschaften C und A hat.

Andere NoSQL-Datenbanken

Wie ich am Anfang schrieb, gibt es viele andere Arten von NoSQL-Datenbanken, die für unterschiedliche Anforderungen ausgelegt sind. ZB Graphendatenbanken wie Neo4j , Dokumentendatenbanken wie CouchDB und Multimodel- / Objektdatenbanken wie OrientDB .

Abschließend möchte ich sagen, dass relationale Datenbanken weiterhin beliebt sind. Sie sind sehr flexibel und wartbar. Aber sie sind nicht immer die beste Wahl.

Jonas
quelle
1
Gute, vollständige Antwort.
TML
NoSQL bedeutet NICHT nicht relational, sondern nur etwas anderes als ein SQL-DBMS.
nvogel
1
Es scheint, dass Mark Madsen auf der jüngsten O'Reilly Strata-Konferenz eine neue Interpretation von "NoSQL" in seiner Datenbankgeschichte geprägt hat , um "Nicht nur SQL" zu ersetzen. Es ist jetzt: "Nein, SQL" ;-)
Lukas Eder
6
"Nicht nur" war eine Nachrüstung, die frühe NoSQL-Bewegung war tollwütig gegen relationale Datenbanken. Dann schlagen sie die reale Welt.
Gaius
22

NoSQL ist ein sehr weit gefasster Begriff und wird normalerweise als "Nicht nur SQL" bezeichnet. Der Begriff fällt in der Nicht-RDBMS-Community aus.

Sie werden feststellen, dass die NoSQL-Datenbank nur wenige gemeinsame Merkmale aufweist. Sie lassen sich grob in einige Kategorien einteilen:

  • Schlüssel- / Wertspeicher
  • Bigtable-inspirierte Datenbanken (basierend auf dem Google Bigtable-Papier)
  • Dynamo-inspirierte Datenbanken
  • verteilte Datenbanken
  • Dokumentendatenbanken

Dies ist eine große Frage, die in dieser Übersicht über verteilte Datenbanken jedoch ziemlich gut beantwortet wird .

Für eine kurze Antwort:

NoSQL-Datenbanken können auf verschiedene Teile von ACID verzichten, um bestimmte andere Vorteile zu erzielen - Partitionstoleranz, Leistung, Lastverteilung oder lineare Skalierung durch Hinzufügen neuer Hardware.

Wann sie eingesetzt werden müssen, hängt ganz von den Anforderungen Ihrer Anwendung ab.

Jeremiah Peschka
quelle
12

NoSQL ist eine Art Datenbank, die kein festes Schema wie ein herkömmliches RDBMS hat. Bei den NoSQL-Datenbanken wird das Schema vom Entwickler zur Laufzeit definiert. Sie schreiben keine normalen SQL-Anweisungen in die Datenbank, sondern verwenden eine API, um die Daten abzurufen, die sie benötigen. Die NoSQL-Datenbanken können in der Regel problemlos auf verschiedene physische Server skaliert werden, ohne dass Sie wissen müssen, auf welchem ​​Server sich die gesuchten Daten befinden.

Es gibt jedoch einige Nachteile für all diese Flexibilität: Die NoSQL-Datenbanken weisen im Vergleich zu RDBMS-Systemen wie SQL Server, Oracle, DB2, MySQL usw. ein ziemlich schlechtes Leistungsmerkmal auf. Es gibt keinen Service Broker, keine Transaktionsprotokollierung, keine ETL-Pakete usw.

NoSQL ist nichts Neues. Es gibt es schon seit 50-60 Jahren. Damals hieß es COBOL. Dieselbe genaue Idee, nur eine andere Gruppe hatte sie.

mrdenny
quelle
3
Punkt 1 ist für viele (alle?) NoSQL-Datenbanken falsch, es sei denn, Sie haben der Datenbank ausdrücklich mitgeteilt, dass es Ihnen egal ist, ob das Schreiben erfolgreich ist. Beispielsweise schreibt jede von Hadoop unterstützte Datenbank die Daten an drei Orte, die zur Hölle oder zum Hochwasser führen. Standardmäßig schreibt Cassandra an drei Speicherorte und bestätigt das Schreiben als erfolgreich, wenn zwei erfolgreich waren.
Jeremiah Peschka
3
Wie wird die Parallelität bei diesen Aktualisierungen behandelt? Gibt es eine verteilte Transaktion, die zwischen ihnen stattfindet, oder wird der Schreibvorgang vorab bestätigt und die Server erledigen den Rest im Hintergrund?
Mrdenny
Die Parallelität hängt vollständig von der Implementierung ab. Riak verwendet Vektortakte, um die Parallelität zu gewährleisten. Im Falle von Schreibkonflikten können diese zur Lösung an die aufrufende Anwendung zurückgegeben werden. Andere verwenden einen letzten Schreibzugriff.
Jeremiah Peschka
Was die Schreibbestätigung betrifft - In den meisten Fällen werden Schreibvorgänge erst bestätigt, wenn das Betriebssystem das Schreiben bestätigt. Sie können sogar die Bestätigung dauerhafter Schreibvorgänge anfordern, was bedeutet, dass die Bits tatsächlich auf die Festplatte geschrieben werden, anstatt sich im Betriebssystempuffer zu befinden. MongoDB bestätigt standardmäßig Schreibvorgänge in den Speicher, kann jedoch so konfiguriert werden, dass eine Bestätigung des Schreibvorgangs auf die Festplatte erforderlich ist. Die Replikation wird bei jedem Produkt anders gehandhabt. Mit Hadoop schreibt der Client auf Server A, der auf B schreibt, der auf C schreibt. Sobald C antwortet, ist der Schreibvorgang abgeschlossen und der Client erhält eine Schreibbestätigung.
Jeremiah Peschka
In diesem Fall stehe ich korrigiert. Ich habe die falsche Aussage entfernt. Habe ich noch etwas FUBAR?
Mrdenny
6

Der Verzicht auf das relationale Setup, auf Primär- und Fremdschlüssel und auf den zusätzlichen Aufwand für die Aufrechterhaltung der Transaktionssicherheit führt häufig zu extremen Leistungssteigerungen. Dies gilt jedoch nicht nur für die neuen Datenbanken / Datenspeicher, da MySQL unter Umgehung von Layern auf "NoSQL-Level" optimiert wurde.

Kurz gesagt, Sie können oft eine beeindruckende Leistung erzielen, wenn Sie das Risiko eingehen, möglicherweise Daten zu verlieren. Die meisten NoSQL-Systeme tun dies. Zum Beispiel führt MongoDB Datenänderungen durch, die geschrieben werden, wenn es bequem ist. Die Daten selbst sind sicher und transaktionssicher, werden jedoch flüchtig gespeichert (Speicher). Wenn Sie den Strom verlieren, können Sie nicht 100% sicher sein, dass Sie keine Daten verloren haben oder dass Sie keine beschädigten Daten haben.

Es ist ein Kompromiss zwischen Sicherheit und Leistung.

Johanna Larsson
quelle
5

Ein guter Anfang ist der Wikipedia-Eintrag . Anstatt Daten in einer Tabelle mit anderen zu verknüpfen, werden sie als Schlüsselwertpaare gespeichert, und es gibt kein Datenbankschema. Sie werden stattdessen im Code behandelt.

Einige Standorte verwenden sowohl NoSQL als auch die typischen RDBMS-Server gleichzeitig, speichern jedoch unterschiedliche Daten. Sie müssen sich also nicht für das eine oder andere entscheiden.

steve.lippert
quelle
Die Tatsache, dass der Großteil dieser Frage durch das Aufrufen von WP beantwortet werden kann, lässt mich mein Kinn reiben, während ich über die Antworten hier nachdenke. Ich denke, es ist ein bisschen zu "Füllfrage", aber das ist wirklich alles, was wir gerade haben.
Jcolebrand
1
Der wichtige Hinweis hierbei ist, dass das Vermeiden der Unterstützung von Beziehungen (Fremdschlüssel) in der Datenbank- / Serverinfrastruktur die Datenbank / Server vom Aufwand für die Last- und Sperrenverwaltung für die Aufrechterhaltung der referenziellen Integrität entlastet. Die Konsequenz daraus, der Kompromiss, ist, dass die referenzielle Integrität, Konsistenz und die anderen ACID-Bedenken dann an die Anwendungen weitergegeben werden. Viele Anwendungen profitieren davon, anstatt sich darauf zu beschränken. (Einige Anwendungen müssen in das Client / Server-Modell eingeklemmt werden.)
Jim Dennis
0

Ich habe intensiv an der MongoDB NoSQL-Datenbank und an Oracle gearbeitet.

Schema

Die SQL-Datenbank verfügt über ein eigenes vordefiniertes Schema zum Speichern strukturierter Daten.

In der NoSQL-Datenbank gibt es kein vordefiniertes Schema. Hier ist das Schema das dynamischste Element, das auf den Datenelementen basiert.

Skalierbarkeit

SQL-Datenbanken sind vertikal skalierbar. Wenn Sie also eine SQL-Basisdatenbank skalieren möchten, müssen Sie die Hardware erhöhen, auf der das DBMS-System installiert ist. Hier geht es manchmal um die Einschränkung der Skalierbarkeit.

NoSQL-Datenbanken sind horizontal skalierbar. Wenn wir sie skalieren möchten, müssen wir weitere Knoten hinzufügen und ein Verteilungsnetzwerk erstellen, das auf unserem eigenen Bedarf und der erforderlichen Leistung basiert. Auf diese Weise wird die Datenbank entlastet

Datenabruf

In SQL-basierten Datenbanken können wir zum Definieren und Bearbeiten von Daten SQL (Structured Query Language) verwenden, das heutzutage sehr leistungsfähig ist.

In Bezug auf die NoSQL-Datenbank konzentrieren sich die Abfragen auf Sammlungen und Dokumente. Manchmal wird es UnQL (Unstructured Query Language) genannt. Dies befindet sich noch in der Evolutionsphase und ist daher von Anbieter zu Anbieter der NoSQL-Datenbank unterschiedlich.

Weitere Informationen zu wichtigen Unterschieden finden Sie in meinem Blog: Unterschied zwischen SQL- und NoSQL-Datenbank

Virat Gaywala
quelle