Warum ist NoSQL schneller als SQL?

48

Kürzlich wurde ich gefragt:

Warum ist NoSQL schneller als SQL?

Ich war mit der Prämisse der Frage nicht einverstanden ... es ist nur Unsinn für mich persönlich. Ich kann keine Leistungssteigerung durch die Verwendung von NoSQL anstelle von SQL feststellen. Möglicherweise SQL über NoSQL, aber nicht auf diese Weise.

Vermisse ich etwas über NoSQL?

cnd
quelle
3
Wenn Sie keine Leistungssteigerung sehen, sagen Sie das auch. Fakt ist, dass die meisten NoSQL-Lösungen auf eine (oder mehrere) der ACID-Eigenschaften einer relationalen Datenbank verzichten und daher weniger tun.
Oded
1
Es gibt einige Workflows (und Datenstrukturen), die nicht einfach auf eine herkömmliche ACID-fähige relationale Datenbank abgebildet werden können. Für diese können Sie mithilfe einer NoSQL-Datenbank enorme Leistungssteigerungen feststellen . Wenn Sie jedoch einfach eine vorhandene (gut gestaltete) SQL-Datenbank in eine NoSQL-Datenbank aufnehmen, wird Ihre Leistung mit Sicherheit darunter leiden.
Joachim Sauer
1
Die Antwort lautet: Wurde es als schneller festgestellt? Und in was schneller? Entwicklungszeit? Lesezeit? Zeit schreiben? Welche Art zu schreiben? Womit vergleichen wir das? Abfragen mit mehreren Tabellen? Beitritt?
Rolf

Antworten:

65

Es gibt viele NoSQL-Lösungen, von denen jede ihre eigenen Stärken und Schwächen hat. Daher muss Folgendes mit ein wenig Salz aufgenommen werden.

Aber im Grunde genommen verlassen sich viele NoSQL-Datenbanken auf Denormalisierung und versuchen, sie für den denormalisierten Fall zu optimieren. Angenommen, Sie lesen einen Blog-Beitrag zusammen mit seinen Kommentaren in einer dokumentenorientierten Datenbank. Oft werden die Kommentare zusammen mit dem Beitrag selbst gespeichert. Dies bedeutet, dass es schneller ist, alle zusammen abzurufen, da sie am selben Ort gespeichert sind und Sie keinen Join durchführen müssen.

Natürlich können Sie dies auch in SQL tun, und Denormalisierung ist eine gängige Praxis, wenn Leistung benötigt wird. Es ist nur so, dass viele NoSQL-Lösungen von Anfang an so entwickelt wurden, dass sie immer auf diese Weise verwendet werden. Sie erhalten dann die üblichen Kompromisse: Zum Beispiel ist das Hinzufügen eines Kommentars im obigen Beispiel langsamer, weil Sie das gesamte Dokument damit speichern müssen. Sobald Sie denormalisiert haben, müssen Sie dafür sorgen, dass die Datenintegrität in Ihrer Anwendung erhalten bleibt.

Darüber hinaus ist es in vielen NoSQL-Lösungen unmöglich, willkürliche Verknüpfungen und damit willkürliche Abfragen durchzuführen. Bei einigen Datenbanken, wie z. B. CouchDB, müssen Sie die erforderlichen Abfragen überdenken und sie in der Datenbank vorbereiten.

Alles in allem läuft es darauf hinaus, ein denormalisiertes Schema zu erwarten und Lesevorgänge für diese Situation zu optimieren, und dies funktioniert gut für Daten, die nicht sehr relational sind und die viel mehr Lesevorgänge als Schreibvorgänge erfordern.

Andrea
quelle
4
Dies kann übrigens mit einer einfachen materialisierten Ansicht oder einer Cache-Ebene realisiert werden, während immer noch von der SQL-Güte profitiert wird. Alles, was richtig modelliert wurde, ist relational, und die logische Datenvervielfältigung ist keine Lösung (die Hauptansicht ist eine Vervielfältigung, aber keine logische Vervielfältigung, da sie einfach ein Abbild von etwas anderem ist).
Morg.
Wie ich in der Antwort gesagt habe, kann man dasselbe in SQL tun; Es ist nur so, dass NoSQL-Datenbanken in der Regel schneller und natürlicher zu verwenden sind, wenn dies anstelle der Ausnahme zur Regel wird. Theoretisch ist SQL das beste Modell, das man verwenden kann. Wenn Daten jedoch über eine bestimmte Größe hinauswachsen, können einige Modelle nicht mehr berücksichtigt werden, und die Duplizierung von Daten wird schneller und einfacher.
Andrea
3
Das ist Stier. Das relationale Modell deckt alles ab, was Sie in NoSQL machen können und vieles mehr. Der einzige Vorteil von NoSQL ist, dass ein einfacher und inkonsistenter Ansatz zur Skalierung eingebaut und einfach zu verwenden ist. Es hat nichts mit SQL zu tun, und alles, was damit zu tun hat, sich nicht um ACID-Eigenschaften zu kümmern. Sie können Synchronisationsjobs zwischen unabhängigen SQL-Knoten erstellen, die genau dieselben (sehr schlechten) Skalierungs- und Konsistenzmerkmale wie die NoSQL-Speicher aufweisen. Der Unterschied besteht darin, dass SQL-Knoten AUCH Konsistenz haben können, wenn Sie dies wünschen.
Morg.
1
Was ist, wenn Sie über 5.000.000.000 Datenzeilen verfügen und unter bestimmten Bedingungen den Kommentar von allen erhalten möchten? Wäre es nicht schneller, wenn Sie mit SQL einen Index für das Kommentarfeld der Tabelle hätten? Die Volltextindizierung würde dies weiter verbessern.
Jwize
@morg - "Das relationale Modell deckt alles ab, was Sie in NoSQL machen können und vieles mehr." Nicht wirklich, nein. Es gibt viele Beispiele für Datentypen, die so schlecht zum relationalen Modell passen, dass das Erzwingen der Daten zu massiver Ineffizienz führt. Beispiel: Ein Online-Spiel verfügt über eine Funktion zum Speichern des Inventars der Spieler. Die Spieler haben eine begrenzte Anzahl von nummerierten Slots, in denen jeweils ein oder mehrere Gegenstände eines bestimmten Typs gespeichert werden können. Es gibt ungefähr 50 verschiedene Arten von Gegenständen, von denen jede 4 bis 6 zugeordnete Attribute hat, mit einigen Überlappungen, so dass es ungefähr 80 mögliche Attribute gibt ...
Jules
27

Was Sie an NoSQL vermissen, ist, dass NoSQl in keiner Weise mit SQL verglichen werden kann. NoSQL ist der Name aller Persistenztechnologien, die nicht SQL sind. Dokument-DBs, Schlüsselwert-DBs und Ereignis-DBs sind alle NoSQL. Sie unterscheiden sich in fast allen Aspekten, sei es die Struktur der gespeicherten Daten, die Abfrage, die Leistung und die verfügbaren Tools.

Wenn Ihnen also jemand im Interview eine solche Frage stellt, sollte dies die Antwort sein.

Euphorisch
quelle
4
Wenn es ein Killer-Feature von NoSQL gibt, dann ist es die Skalierbarkeit. Deshalb benutzen es die Facebooks und die Googles. Wegen des riesigen Datenvolumens. NoSQL: Wenn Sie mit enormen Datenmengen umgehen müssen.
Pieter B
16

'NoSQL'-Datenbanken (oder genauer: nicht relationale Datenbanken) geben einige Funktionen der herkömmlichen Datenbanken aus Gründen der Geschwindigkeit auf, was jedoch für die horizontale Skalierbarkeit wichtiger ist.

Die fehlenden Funktionen hängen vom konkreten Produkt ab. Im Allgemeinen werden vollständige ACID-Eigenschaften oder sogar Verknüpfungsoperationen nicht unterstützt. Das ist der Preis für die Mehrleistung.

Karl
quelle
1
Die Beschreibung von NoSQL als nicht relational ist nicht genauer. Es gibt andere alte nicht relationale DBs, die nicht in die Kategorie NoSQL fallen. NoSQL bedeutet viel mehr als nur nicht relational. Lesen Sie dies für weitere Informationen: martinfowler.com/bliki/NosqlDefinition.html
eddyP23
8

Du hast recht, es wäre Unsinn, das in einer pauschalen Aussage zu sagen. Welches ist wahrscheinlich der springende Punkt; Anstelle einer einzelnen Antwort erwartet der Interviewer wahrscheinlich, dass Sie mit Fragen antworten, um herauszufinden, in welchem ​​Kontext sich das Problem befindet (welche Art von Daten, wie viel davon, in welcher Betriebsumgebung usw.), welche NoSQL-Lösung . Sie versuchen herauszufinden, wie Sie Probleme analysieren, und bekommen dabei eine Vorstellung davon, wie viel Sie über die verschiedenen Lösungen wissen, die es gibt.

Eelco
quelle
Ja, es ist eine pauschale Aussage, und wenn wir akzeptieren, dass sie wahr ist, lautet die Antwort auf die Frage: Es kommt darauf an.
Rolf
5

NoSQL-Datenbanken sind normalerweise nur dann sinnvoll, wenn Sie Ihre Daten darauf aufbauen.

Wenn Sie sie einfach als RDBMS-Ersatz verwenden möchten, erhalten Sie möglicherweise weniger Leistung als mehr, insbesondere wenn Sie nicht über genügend Budget verfügen, um für Server mit hohem RAM-Speicher zu zahlen.

Schauen Sie sich diesen Artikel an, der die Speicherplatznutzung von MySQL mit der von MongoDB vergleicht: http://blog.trackerbird.com/content/mysql-vs-mongodb-disk-space-usage

Clifford
quelle
3

Welche NoSQL-Datenbank? Welche SQL-Datenbank? Wenn Ihnen jemand sagt, dass NoSQL schneller als SQL ist, sollten Sie weggehen. Oder besser noch dieses Video anschauen:

http://www.youtube.com/watch?v=b2F-DItXtZs

Ich werde nicht sagen, dass die Hälfte der Dinge, die über NoSQL behauptet werden, falsch sind, aber ich werde sagen, dass es eine Menge NoSQL-Fanboyismus von Leuten gibt, die es wirklich nicht sehr gut verstehen.

SQL hat (natürlich) seine Grenzen, aber es ist auch eine sehr ausgereifte Technologie, die gut verstanden wird und über einen großen Pool von Entwicklern verfügt, die wissen, wie man sie gut einsetzt. Ich kann nicht für alle Formen von NoSQL dasselbe sagen.

Zachary K
quelle
-2

NoSql wird von spaltenorientierten Datenbanken unterstützt, wobei RDBMS eine zeilenorientierte Datenbank ist. Nehmen wir beispielsweise an, wir haben eine Employee-Tabelle mit Name, Alter, Gehalt, Adresse, EmployeeId usw. Wir fügen dieselbe Tabelle in MySql (RDBMS-Unterstützung) und HBase ein (NoSQL-Unterstützung). Wenn ein Kunde / Kunde eine Anfrage schreibt, um die durchschnittlichen Alters- oder Gehaltsangaben von 1Lakh-Mitarbeitern zu erhalten, was passiert dann?

In RDBMS wird jede Zeile durchlaufen und der Wert sowie die Summe und Division für das Ergebnis gesammelt. Wenn es um Columnar-Datenbanken geht, müssen Sie sich nicht um alle Iterationen einer Zeile kümmern. Aber beschäftige dich nur mit einer Zeile, die schneller zu berechnen ist. Auf diese Weise ist NoSQL manchmal schneller als SQL. In diesem Fall kümmert sich NoSQL nicht um ACID-Beschwerden, die es wert sind!

kiran teja avvaru
quelle
2
Ich habe die Formatierung ein wenig korrigiert, obwohl ich nicht sicher bin, was Sie zwischen den beiden versuchen. Und ACID wird auch von RDBMS nicht immer unterstützt.
-3

Vergessen Sie die Theorie rund um Datenbanken. Sobald Sie Ihre Abfragen verstanden haben, können Sie Daten in nosql-Datenbanken genau so speichern, wie sie in Ihrer Anwendung tatsächlich verwendet werden.

Nehmen wir zum Beispiel dieses Beispiel: Sie haben ein Kundenmodell mit vielen Bestellungen und vielen Artikeln, die mit jeder Bestellung verknüpft sind. Dann haben sie auch viele gespeicherte Artikel für spätere Einkäufe ... wenn Sie ein großes E-Commerce-Geschäft mit beispielsweise 10 Millionen Kunden und 50 Kunden sind Millionen Bestellungen. Und dieser Kunde meldet sich in seinem Dashboard an, in dem genau diese Daten angezeigt werden. Wie viel Arbeit muss eine SQL-Datenbank leisten, um den Kunden zu finden, die Bestellungen und jede Werbebuchung und gespeicherte Artikel zu verknüpfen. In einer SQL-Datenbank müssen all diese Daten wahrscheinlich auf irgendeine Weise verknüpft werden ... oder Sie können eine Sammlung in Ihrer Datenbank mit dem Namen usercache erstellen und diese Daten genau so speichern, wie Sie sie im wirklichen Leben verwenden. Dies kann also wirklich eine einzelne Abfrage in einem einzelnen Feld [id] sein, um alle diese Daten zurückzugewinnen. Darüber hinaus tut die NOSQL-Datenbank nicht '

Kann eine SQL-Datenbank also ein einzelnes ID-Feld genauso schnell abfragen, wenn nicht schneller als nosql? Ja, aber kann eine SQL-Datenbank alle benötigten Daten zurückgeben, indem sie eine Tabelle und ein Feld abfragt? Nein, es sei denn, Sie speichern die Daten in Json in einem großen Textfeld. Jetzt können diese Daten nicht mehr für eine mögliche zukünftige Verwendung abgefragt werden.

Steffan Perry
quelle