Wann sollte ich eine NoSQL-Datenbank anstelle einer relationalen Datenbank verwenden? Ist es in Ordnung, beide auf derselben Site zu verwenden?

141

Was sind die Vorteile der Verwendung von NoSQL-Datenbanken? Ich habe in letzter Zeit viel darüber gelesen, bin mir aber immer noch nicht sicher, warum ich eine implementieren möchte und unter welchen Umständen ich eine verwenden möchte.

smfoote
quelle

Antworten:

84

Relationale Datenbanken erzwingen ACID . Sie haben also schemabasierte transaktionsorientierte Datenspeicher. Es ist bewährt und für 99% der realen Anwendungen geeignet. Mit relationalen Datenbanken können Sie praktisch alles machen.

Bei massiven Datenspeichern mit hoher Verfügbarkeit gibt es jedoch Einschränkungen hinsichtlich Geschwindigkeit und Skalierung. Beispielsweise haben Google und Amazon Terabyte an Daten in großen Rechenzentren gespeichert. Das Abfragen und Einfügen ist in diesen Szenarien aufgrund der Blockierungs- / Schema- / Transaktionscharakteristik der RDBMs nicht performant. Aus diesem Grund haben sie ihre eigenen Datenbanken (eigentlich Schlüsselwertspeicher) implementiert, um einen massiven Leistungsgewinn und Skalierbarkeit zu erzielen.

NoSQL-Datenbanken gibt es schon lange - nur der Begriff ist neu. Einige Beispiele sind Diagramm-, Objekt-, Spalten-, XML- und Dokumentdatenbanken.

Für Ihre 2. Frage: Ist es in Ordnung, beide auf derselben Site zu verwenden?

Warum nicht? Beides dient unterschiedlichen Zwecken, oder?

RameshVel
quelle
1
Ich denke nicht, dass ACID exklusiv für relationale Datenbanken ist. Sie können Haltbarkeitsgarantien, Transaktionen und Konsistenz in nicht relationalen Datenbanken anzeigen.
Thilo
@RamshVel Können Sie ein Beispiel für eine Datenbank mit Schlüsselwertspeichertypen geben? Vielen Dank.
Rachael
1
@ Rachael, einige Beispiele sind Redis, Leveldb und Riak. Es gibt Tonnen um, Sie können es googeln
RameshVel
76

NoSQL-Lösungen sollen normalerweise ein Problem lösen, für das relationale Datenbanken entweder nicht gut geeignet, zu teuer (wie Oracle) sind, oder Sie müssen etwas implementieren, das die relationale Natur Ihrer Datenbank ohnehin beeinträchtigt.

Die Vorteile sind normalerweise spezifisch für Ihre Verwendung. Wenn Sie jedoch keine Probleme beim Modellieren Ihrer Daten in einem RDBMS haben, sehe ich keinen Grund, warum Sie sich für NoSQL entscheiden sollten.

Ich selbst verwende MongoDB und Riak für bestimmte Probleme, bei denen ein RDBMS keine praktikable Lösung ist, für alle anderen Dinge, bei denen ich MySQL (oder SQLite zum Testen) verwende.

Wenn Sie eine NoSQL-Datenbank benötigen, die Sie normalerweise kennen, sind folgende Gründe möglich:

  • Der Kunde möchte eine Verfügbarkeit von 99,999% auf einer stark frequentierten Website.
  • Ihre Daten machen in SQL keinen Sinn. Sie führen mehrere JOIN-Abfragen durch, um auf bestimmte Informationen zuzugreifen.
  • Sie brechen das relationale Modell, Sie haben CLOBs, die denormalisierte Daten speichern, und Sie generieren externe Indizes, um diese Daten zu durchsuchen.

Wenn Sie keine NoSQL-Lösung benötigen, denken Sie daran, dass diese Lösungen nicht als Ersatz für ein RDBMS gedacht waren, sondern als Alternativen, bei denen das erstere fehlschlägt, und was noch wichtiger ist, dass sie als solche relativ neu sind, sie haben immer noch viele Fehler und fehlende Funktionen.

Oh, und in Bezug auf die zweite Frage ist es vollkommen in Ordnung, eine Technologie in Verbindung mit einer anderen zu verwenden. Um also meiner Erfahrung nach vollständig zu sein, arbeiten MongoDB und MySQL gut zusammen, solange sie sich nicht auf demselben Computer befinden

Asaf
quelle
3
Danke für die Antwort. Ihre Beispiele für die Verwendung von NoSQL sind bestenfalls vage. Ich hatte auf einen spezifischeren Anwendungsfall gehofft, damit ich entscheiden kann, ob meine Daten besser in einer NoSQL-Datenbank gespeichert werden.
Smfoote
Ich versuche, dieselbe Frage nicht zweimal zu beantworten. Schauen Sie sich meine vorherige Antwort auf eine sehr ähnliche Frage an. Stackoverflow.com/questions/3621415/…
Asaf
Ich stimme Asafs großartiger Antwort zu, es gibt wirklich nur wenige Szenarien, in denen Sie ein NoSQL über ein RDBMS benötigen sollten. Ich sehe NoSQL eher als Backup-Datenbank oder "Add-On-Datenbank" als als Hauptdatenbank. Ich habe noch kein gutes System gesehen, bei dem die Kerndatenbank ein NoSQL war.
Jo Smo
38

Martin Fowler hat ein exzellentes Video, das eine gute Erklärung für NoSQL-Datenbanken gibt. Der Link führt direkt zu seinen Gründen, sie zu verwenden, aber das gesamte Video enthält gute Informationen.

  1. Sie haben große Datenmengen - insbesondere, wenn Sie nicht alle Daten auf einem physischen Server speichern können, da NoSQL für eine gute Skalierung konzipiert wurde.

  2. Objektrelationale ImpedanzfehlanpassungNicht übereinstimmende objektrelationale - Ihre Domänenobjekte passen nicht gut in ein relaitionelles Datenbankschema. Mit NoSQL können Sie Ihre Daten als Dokumente (oder Diagramme) beibehalten, die möglicherweise viel genauer auf Ihr Datenmodell abgebildet werden.

Despertar
quelle
16

NoSQL ist ein Datenbanksystem, in dem Daten in Dokument (MongoDB), Schlüssel-Wert-Paar (MemCache, Redis) und Diagrammstrukturform (Neo4J) organisiert sind.

Vielleicht sind hier mögliche Fragen und Antworten für "Wann für NoSQL gehen":

  1. Benötigen Sie ein flexibles Schema oder arbeiten Sie mit baumartigen Daten?
    Im Allgemeinen beginnen wir in der agilen Entwicklung mit dem Entwurf eines Systems, ohne alle Anforderungen im Voraus zu kennen, wo später im gesamten Entwicklungsdatenbanksystem häufig Designänderungen berücksichtigt werden müssen, um MVP (Minimal Viable Product) zu präsentieren. Oder Sie haben es mit einem Datenschema zu tun, das dynamischer Natur ist. Beispiel: Systemprotokolle, sehr genaues Beispiel sind AWS Cloudwatch-Protokolle.

  2. Datensatz ist riesig / groß?
    Ja, NoSQL-Datenbanken sind der bessere Kandidat für Anwendungen, bei denen die Datenbank Millionen oder sogar Milliarden von Datensätzen verwalten muss, ohne die Leistung zu beeinträchtigen.


  3. Kompromiss zwischen Skalierung und Konsistenz Im Gegensatz zu RDMS kann die NoSQL-Datenbank hier und da kleine Daten verlieren (Hinweis: Die Wahrscheinlichkeit beträgt .x%), ist jedoch hinsichtlich der Leistung einfach zu skalieren. Beispiel: Dies ist möglicherweise gut zum Speichern von Personen, die in einer Instant Messaging-App online sind, Token in der Datenbank und zum Protokollieren von Website-Verkehrsstatistiken.

  4. Durchführen von Geolocation-Operationen: MongoDB bietet umfassende Unterstützung für GeoQuerying- und Geolocation-Operationen. Ich habe diese Funktion von MongoDB wirklich geliebt.

Kurz gesagt, MongoDB eignet sich hervorragend für Anwendungen, in denen Sie dynamisch strukturierte Daten in großem Maßstab speichern können.

Hrishikesh
quelle
4
"NoSQL-Datenbank kann hier und da kleine Daten verlieren" WTF!? Wer würde das schon riskieren wollen? Das muss falsch sein.
Jay Q.
1
@ JayQ. Ja, es kann falsch sein. Deshalb habe ich * vielleicht gesagt. Warum können wir dann keine NpSQL-DBs für Transaktionsoperationen verwenden?
Hrishikesh
7

Einige wichtige Informationen fehlen, um die Frage zu beantworten: Welche Anwendungsfälle muss die Datenbank abdecken können? Müssen komplexe Analysen aus vorhandenen Daten ( OLAP ) durchgeführt werden oder muss die Anwendung in der Lage sein, viele Transaktionen ( OLTP ) zu verarbeiten? Wie ist die Datenstruktur? Das ist noch lange nicht das Ende der Fragestunde.

Meiner Ansicht nach ist es falsch, Technologieentscheidungen auf der Grundlage kühner Schlagworte zu treffen, ohne genau zu wissen, was dahinter steckt. NoSQL wird oft für seine Skalierbarkeit gelobt. Sie müssen aber auch wissen, dass die horizontale Skalierung (über mehrere Knoten) auch ihren Preis hat und nicht kostenlos ist. Dann müssen Sie sich mit Problemen wie eventueller Konsistenz befassen und definieren, wie Datenkonflikte gelöst werden sollen, wenn sie auf Datenbankebene nicht gelöst werden können. Dies gilt jedoch für alle verteilten Datenbanksysteme.

Die Freude der Entwickler mit dem Wort "schema less" bei NoSQL ist am Anfang auch sehr groß. Dieses Schlagwort wird nach der technischen Analyse schnell enttäuscht, da es beim Schreiben korrekterweise kein Schema erfordert, sondern beim Lesen ins Spiel kommt. Deshalb sollte es korrekt "Schema beim Lesen" sein. Es kann verlockend sein, Daten nach eigenem Ermessen schreiben zu können. Aber wie gehe ich mit der Situation um, wenn Daten vorhanden sind, die neue Version der Anwendung jedoch ein anderes Schema erwartet?

Das Dokumentmodell (wie zum Beispiel in MongoDB) ist nicht geeignet für Datenmodelle bei denen viele Beziehungen zwischen den Daten bestehen. Joins müssen auf Anwendungsebene durchgeführt werden. Dies ist ein zusätzlicher Aufwand und warum sollte ich Dinge programmieren, die die Datenbank tun sollte.

Wenn Sie argumentieren, dass Google und Amazon ihre eigenen Datenbanken entwickelt haben, weil herkömmliches RDBMS die Datenflut nicht mehr bewältigen kann, können Sie nur sagen: Sie sind nicht Google und Amazon. Diese Unternehmen sind die Speerspitze, etwa 0,01% der Szenarien, in denen herkömmliche Datenbanken nicht mehr geeignet sind, aber für den Rest der Welt.

Was nicht unerheblich ist: SQL gibt es seit über 40 Jahren und Millionen von Entwicklungsstunden wurden in große Systeme wie Oracle oder Microsoft SQL investiert. Dies muss durch einige neue Datenbanken erreicht werden. Manchmal ist es auch einfacher, einen SQL-Administrator zu finden als jemanden für MongoDB. Das bringt uns zur Frage der Wartung und des Managements. Ein Thema, das nicht gerade sexy ist, aber Teil der Technologieentscheidung ist.

Stefan Prugg
quelle
1
scheint richtig zu sein, aber ich denke nicht, dass es auch richtig ist, zu vergleichen, wie viel Zeit es aufgewendet hat, wenn dies der Fall wäre, wenn jeder in seiner gesamten Anwendung Assemblersprache verwenden würde. Ich würde eher sagen, dass es immer auf Ihre Anwendung und Ihren Anwendungsfall ankommt
Gopherine
3

Ich bin auf diese Frage gestoßen, als ich nach überzeugenden Gründen gesucht habe, um vom RDBMS-Design abzuweichen.

Es gibt einen großartigen Beitrag von Julian Brown, der die Einschränkungen verteilter Systeme beleuchtet. Das Konzept heißt Brewer's CAP Theorem und fasst zusammen:

Die drei Anforderungen verteilter Systeme sind: Konsistenz, Verfügbarkeit und Partitionstoleranz (kurz CAP). Sie können jedoch immer nur zwei davon gleichzeitig haben.

Und so habe ich es für mich zusammengefasst:

Sie sollten sich besser für NoSQL entscheiden, wenn Sie auf Konsistenz verzichten.

Jermin Bazazian
quelle
0

Ich habe Lösungen mit NoSQL-Datenbanken entworfen und implementiert. Hier ist meine Checkpoint-Liste, um die Entscheidung für SQL oder dokumentenorientiertes NoSQL zu treffen .

NICHT

SQL ist nicht veraltet und bleibt in einigen Fällen ein besseres Werkzeug. Es ist schwer zu rechtfertigen, wenn ein dokumentenorientiertes NoSQL verwendet wird, wenn

  • Benötigen Sie OLAP / OLTP
  • Es ist ein kleines Projekt / eine einfache DB-Struktur
  • Benötigen Sie Ad-hoc-Anfragen
  • Kann sofortige Konsistenz nicht vermeiden
  • Unklare Anforderungen
  • Mangel an erfahrenen Entwicklern

DOS

Wenn Sie diese Bedingungen nicht haben oder sie mildern können, gibt es zwei Gründe, aus denen Sie von NoSQL profitieren können:

  • Müssen im Maßstab laufen
  • Bequeme Entwicklung (bessere Integration in Ihren Tech-Stack, keine Notwendigkeit für ORM usw.)

Mehr Info

In meinen Blog-Beiträgen erkläre ich die Gründe ausführlicher:

Hinweis: Das oben Gesagte gilt nur für dokumentenorientiertes NoSQL. Es gibt andere Arten von NoSQL, die andere Überlegungen erfordern.

Alex Klaus
quelle
0

Behandeln einer großen Anzahl von Lese- / Schreibvorgängen

Suchen Sie nach NoSQL-Datenbanken, wenn Sie schnell skalieren müssen. Und wann müssen Sie im Allgemeinen schnell skalieren?

Wenn Ihre Website eine große Anzahl von Lese- / Schreibvorgängen enthält und eine große Datenmenge verarbeitet wird, passen NoSQL-Datenbanken am besten in diese Szenarien. Da sie die Möglichkeit haben, Knoten im laufenden Betrieb hinzuzufügen, können sie mit minimaler Latenz mehr gleichzeitigen Datenverkehr und große Datenmengen verarbeiten.

Flexibilität bei der Datenmodellierung

Der zweite Hinweis ist in den ersten Phasen der Entwicklung, in denen Sie sich über das Datenmodell und das Datenbankdesign nicht sicher sind. Es wird erwartet, dass sich die Dinge schnell ändern. NoSQL-Datenbanken bieten uns mehr Flexibilität.

Eventuelle Konsistenz über starke Konsistenz

Es ist vorzuziehen, NoSQL-Datenbanken auszuwählen, wenn es für uns in Ordnung ist, auf eine starke Konsistenz zu verzichten, und wenn wir keine Transaktionen benötigen.

Ein gutes Beispiel dafür ist eine Social-Networking-Website wie Twitter. Wenn ein Tweet einer Berühmtheit explodiert und jeder ihn aus der ganzen Welt mag und erneut twittert. Ist es wichtig, ob die Anzahl der Likes für kurze Zeit etwas steigt oder fällt?

Dem Prominenten wäre es definitiv egal, wenn anstelle der tatsächlichen 5 Millionen 500 Likes das System für kurze Zeit die Anzahl der Likes als 5 Millionen 250 anzeigt.

Wenn eine große Anwendung auf Hunderten von Servern auf der ganzen Welt bereitgestellt wird, benötigen die geografisch verteilten Knoten einige Zeit, um einen globalen Konsens zu erzielen.

Bis sie zu einem Konsens kommen, ist der Wert des Unternehmens inkonsistent. Der Wert der Entität wird schließlich nach kurzer Zeit konsistent. Dies ist die letztendliche Konsistenz.

Die Inkonsistenz bedeutet jedoch nicht, dass Daten verloren gehen. Es bedeutet nur, dass es eine kurze Zeit dauert, bis die Daten über die Internetkabel unter dem Ozean rund um den Globus übertragen werden, um einen globalen Konsens zu erzielen und konsistent zu werden.

Wir erleben dieses Verhalten die ganze Zeit. Besonders auf YouTube. Oft sieht man ein Video mit 10 Ansichten und 15 Likes. Wie ist das überhaupt möglich?

Es ist nicht. Die tatsächlichen Ansichten sind bereits mehr als die Likes. Es ist nur die Anzahl der Aufrufe inkonsistent und es dauert eine kurze Zeit, bis sie aktualisiert werden.

Ausführen von Data Analytics

NoSQL-Datenbanken eignen sich auch am besten für Anwendungsfälle der Datenanalyse, bei denen wir mit einem Zustrom massiver Datenmengen zu kämpfen haben.

Sonniger Sultan
quelle