SQL versus noSQL (Geschwindigkeit)

75

Wenn Leute SQL und noSQL vergleichen und die Vor- und Nachteile jedes einzelnen abschließen, höre ich nie, dass jemand über die Geschwindigkeit spricht.

Ist das Ausführen von SQL-Abfragen im Allgemeinen nicht schneller als das Ausführen von noSQL-Abfragen?

Ich meine, für mich eine wirklich offensichtliche Schlussfolgerung wäre, weil man immer in der Lage sein soll , etwas schneller zu finden , wenn Sie wissen , die Struktur Ihrer Datenbank , als wenn Sie dies nicht tun.

Aber die Leute scheinen das nie zu erwähnen, deshalb möchte ich wissen, ob meine Schlussfolgerung richtig oder falsch ist.

janko-m
quelle
1
Verwandte Antwort: stackoverflow.com/a/11244674/841830
Darren Cook

Antworten:

56

Die Definition von noSQL-Systemen ist sehr weit gefasst - eine Datenbank, die kein SQL verwendet / kein RDBMS ist. Daher lautet die Antwort auf Ihre Frage kurz: "Es kommt darauf an".

Einige noSQL-Systeme sind im Grunde nur persistente Schlüssel- / Wertspeicher (wie Project Voldemort ). Wenn Ihre Abfragen vom Typ "Wert für einen bestimmten Schlüssel nachschlagen" sind, ist (oder sollte ) ein solches System schneller als ein RDBMS, da es nur einen viel kleineren Funktionsumfang benötigt.

Ein weiterer beliebter Typ eines noSQL-Systems ist die Dokumentendatenbank (wie CouchDB ). Diese Datenbanken haben keine vordefinierte Datenstruktur. Ihr Geschwindigkeitsvorteil hängt stark von der Denormalisierung und der Erstellung eines Datenlayouts ab, das auf die Abfragen zugeschnitten ist, die Sie darauf ausführen. Für ein Blog können Sie beispielsweise einen Blog-Beitrag zusammen mit seinen Kommentaren in einem Dokument speichern. Dies reduziert die Notwendigkeit von Verknüpfungen und Suchvorgängen und beschleunigt Ihre Abfragen, kann aber auch Ihre Flexibilität in Bezug auf Abfragen verringern.

Carsten
quelle
81

Leute, die dazu neigen, noSQL zu verwenden, verwenden es speziell, weil es zu ihren Anwendungsfällen passt. Da es von normalen RDBMS-Tabellenbeziehungen und -einschränkungen sowie der ACID-Qualität von Daten getrennt ist, ist es sehr einfach, die Ausführung erheblich zu beschleunigen.

Betrachten Sie Twitter, das NoSQL verwendet, weil ein Benutzer nur sehr begrenzte Dinge vor Ort tut, oder einen genau - Tweet. Und Parallelität kann als nicht vorhanden angesehen werden, da (1) niemand sonst Ihren Tweet ändern kann und (2) Sie normalerweise nicht gleichzeitig von mehreren Geräten twittern.

RichardTheKiwi
quelle
4
Zwar verwendet Twitter NoSQL (Hadoop für Datencluster und Graph Nosql-Datenbank für soziale Medien - FlockDB), aber Twitter ist SCHWER abhängig von MySQL (relational). Google verwendet eine intern erstellte Lösung, die eine Mischung aus relationalem und nosql für das Beste aus beiden Welten ist ("F1" research.google.com/pubs/pub41344.html )
Tom Stickel
1
Ja, das Mischen von Hadoop mit MySQL würde die Definition von "NoSQL" als "Nicht nur SQL" befürworten. Andererseits beginnen viele "NoSQL" -Läden mit der Implementierung von SQL als Sprache, was Mark Madsens Interpretation aus seiner Datenbankgeschichte in Notation begünstigt : "No, SQL"
Lukas Eder
10

Wie Einstein sagen würde, ist Geschwindigkeit relativ.

Wenn Sie eine einfache Master- / Detailanwendung (wie einen Warenkorb) speichern müssen, müssen Sie mehrere Insert-Anweisungen in Ihrer SQL-Anwendung ausführen. Außerdem erhalten Sie einen Datensatz mit Informationen, wenn Sie eine Abfrage durchführen, um den Kauf zu erhalten. Wenn Sie NoSQL verwenden und es gut verwenden, haben Sie alle Daten für eine einzelne Bestellung in einem einfachen "Datensatz" (Dokument, wenn Sie die Begriffe von NoSQL-Datenbanken wie djondb verwenden).

Ich denke also wirklich, dass die Leistung einer Anwendung an der Anzahl der Dinge gemessen werden kann, die erforderlich sind, um eine einzelne Anforderung zu erfüllen, wenn Sie mehrere Einfügungen zum Speichern einer Bestellung ausführen müssen und nur eine einfache Einfügung in eine Datenbank benötigen Wie bei djondb ist die Leistung in der NoSQL-Welt zehnmal schneller, nur weil Sie zehnmal weniger Aufrufe an die Datenbankebene verwenden, das war's.

Um meinen Standpunkt zu verdeutlichen, möchte ich ein Beispiel verlinken, das ich vor einiger Zeit über die Unterschiede zwischen NoSQL- und SQL-Datenmodellen geschrieben habe: http://djondb.com/blog/?p=4 , ich weiß, dass es sich um eine Selbstreferenz handelt, aber im Grunde habe ich geschrieben Es ist die schwierigste Frage, die ein RDBMS-Typ haben könnte, und es ist immer eine gute Möglichkeit zu erklären, warum NoSQL sich so stark von der SQL-Welt unterscheidet und warum es jederzeit eine bessere Leistung erzielt, nicht weil wir "nasa" verwenden "Technologie, weil NoSQL den Entwickler weniger tun lässt ... und mehr und weniger Code = höhere Leistung.

Kreuz
quelle
2

Die Antwort lautet: es kommt darauf an. Im Allgemeinen ist das Ziel von NoSQL DATABASES (keine "Abfragen") die Skalierbarkeit. RDBMS haben normalerweise irgendwann einige harte Grenzen (ich spreche von Millons und Millons von Zeilen), bei denen Sie mit herkömmlichen Mitteln (Replikation, Clustering, Partitionierung) nicht mehr skalieren konnten und etwas mehr benötigen, weil Ihre Anforderungen weiter wachsen. Oder selbst wenn Sie es schaffen, zu skalieren, ist das gesamte Setup ziemlich kompliziert. Oder Sie können Lesevorgänge skalieren, aber keine Schreibvorgänge.

Und die Abfragen hängen von der jeweiligen Implementierung Ihres Servers, der Art der Abfrage, den Spalten in der Tabelle usw. ab. Denken Sie daran, dass Abfragen nur ein Teil des RDBMS sind.

Diego
quelle
-8

Die Abfragezeit einer relationalen Datenbank wie SQL für 1000 Personendaten beträgt 2000 ms und eine Graphendatenbank wie neo4j beträgt 2 ms, wenn Sie mehr Knoten 1000000 geschwindigkeitsstabil 2 ms erstellen

Vivek Thakar
quelle