NoSQL-Anwendungsfallszenarien oder WANN wird NoSQL verwendet [geschlossen]

252

Bei all dem Hype scheint es wirklich schwierig zu sein, verlässliche Informationen darüber zu finden, wann dies zu verwenden ist. Ich stelle also die folgenden Fragen und es tut mir leid, wenn dies im Voraus wirklich dumme Fragen sind:

  1. Soll ich NoSQL für Benutzerdaten verwenden? ZB Profile, Benutzernamen + Passwörter usw.
  2. Soll ich NoSQL für wichtige Inhalte verwenden? ZB Artikel, Blogposts, Produktinventar usw.

Ich gehe davon aus, nein? Und ich denke, NoSQL ist nur für schnell zugängliche Dinge gedacht, bei denen es in Ordnung ist, Daten zu verlieren. Ich habe aber auch gelesen, dass NoSQL-Apps über eine integrierte Redundanz verfügen, damit ich keine Daten verliere.

Können Sie mir auch spezielle Geschäftsanwendungsfälle geben, in denen ich NoSQL verwenden würde, wenn die obigen 2 Beispiele schlecht sind? Ich sehe viele allgemeine Beschreibungen, aber nicht viele Beispiele aus der Praxis. Die einzigen Dinge, an die ich denken kann, sind Messaging und Analysen von Benutzer zu Benutzer.

Vielen Dank!

user1389722
quelle

Antworten:

183

Es ist wirklich eine "es kommt darauf an" Frage. Einige allgemeine Punkte:

  • NoSQL eignet sich normalerweise für unstrukturierte / "schemenlose" Daten. Normalerweise müssen Sie Ihr Schema nicht explizit im Voraus definieren und können einfach neue Felder ohne Zeremonie einschließen
  • NoSQL bevorzugt normalerweise ein denormalisiertes Schema, da JOINs in der RDBMS-Welt nicht unterstützt werden. Daher haben Sie normalerweise eine abgeflachte, denormalisierte Darstellung Ihrer Daten.
  • Die Verwendung von NoSQL bedeutet nicht, dass Sie Daten verlieren könnten. Unterschiedliche DBs haben unterschiedliche Strategien. zB MongoDB - Sie können im Wesentlichen auswählen, auf welcher Ebene die Leistung gegen das Potenzial für Datenverlust abgewogen werden soll - beste Leistung = größerer Spielraum für Datenverlust.
  • Es ist oft sehr einfach, NoSQL-Lösungen zu skalieren. Das Hinzufügen weiterer Knoten zum Replizieren von Daten ist eine Möglichkeit, um a) mehr Skalierbarkeit zu bieten und b) mehr Schutz vor Datenverlust zu bieten, wenn ein Knoten ausfällt. Aber auch hier kommt es auf die NoSQL DB / Konfiguration an. NoSQL bedeutet nicht unbedingt "Datenverlust", wie Sie schließen.
  • IMHO werden komplexe / dynamische Abfragen / Berichte am besten von einem RDBMS aus bedient. Oft ist die Abfragefunktionalität für eine NoSQL-Datenbank eingeschränkt.
  • Es muss nicht eine 1 oder die andere Wahl sein. Meine Erfahrung war die Verwendung von RDBMS in Verbindung mit NoSQL für bestimmte Anwendungsfälle.
  • NoSQL-DBs sind häufig nicht in der Lage, atomare Operationen über mehrere "Tabellen" hinweg auszuführen.

Sie müssen sich wirklich ansehen und verstehen, was die verschiedenen Arten von NoSQL-Speichern sind und wie sie Skalierbarkeit / Datensicherheit usw. bieten. Es ist schwierig, eine allgemeine Antwort zu geben, da sie wirklich alle unterschiedlich sind und die Dinge unterschiedlich angehen .

Für MongoDB als Beispiel, überprüfen Sie ihr aus Use Cases , um zu sehen , was sie als „gut geeignet“ und „weniger gut geeignet“ Verwendungen von MongoDB ist.

AdaTheDev
quelle
16
Die Behauptung, dass NoSQL keine Joins unterstützt, ist irreführend. Einige NoSQL-Datenbanken sind bei Verknüpfungen weitaus besser als relationale Datenbanken. Einige unterstützen sie überhaupt nicht. Diese Antwort scheint mehr über MongoDB im Besonderen als über NoSQL im Allgemeinen zu sein.
Alan Plum
1
Tolle Zusammenfassung. @AlanPlum, auf welche spezifischen NoSQL-Datenbanken beziehen Sie sich?
Brian
2
@brian Ich bin ein Mitarbeiter von ArangoDB ( arangodb.com ), einer Mischung aus einer Dokumentendatenbank (Think MongoDB) und einer Grafikdatenbank (Think Neo4J) mit nicht nur billigen Joins, sondern auch echten Transaktionen. Allerdings sind NoSQL-Datenbanken keine homogene Gruppe und es ist unmöglich, von einer NoSQL-Datenbank auf die gesamte "Kategorie" zu verallgemeinern.
Alan Plum
Wenn Sie die Verwendung von RDBs in Betracht ziehen, weil "Verknüpfungen in NoSQL nicht unterstützt werden", empfehle ich dringend, dieses Video von AWS re: Invent anzusehen. Bricht den gesamten NoSQL-Ansatz auf! Hat mir viel geholfen. youtu.be/HaEPXoXVf2k
dillon.harless
9

Ich denke, Nosql ist zumindest in diesen Szenarien "besser geeignet" (ergänzende sind willkommen)

  1. Einfache horizontale Skalierung durch Hinzufügen weiterer Knoten.

  2. Abfrage eines großen Datensatzes

    Stellen Sie sich jede Menge Tweets vor, die jeden Tag auf Twitter gepostet werden. In RDMS kann es Tabellen mit Millionen (oder Milliarden?) Zeilen geben, und Sie möchten diese Tabellen nicht direkt abfragen, ohne zu erwähnen, dass Tabellenverknüpfungen meistens auch für komplexe Abfragen erforderlich sind.

  3. Festplatten-E / A-Engpass

    Wenn eine Website Ergebnisse basierend auf den Echtzeitinformationen der Benutzer an verschiedene Benutzer senden muss, handelt es sich wahrscheinlich um Zehntausende oder Hunderttausende von SQL-Lese- / Schreibanforderungen pro Sekunde. Dann wird die Festplatten-E / A ein schwerwiegender Engpass sein.

otm
quelle
20
Ich verstehe nicht, was ein Problem mit RDBMS für # 2 sein könnte. Und NoSQL hat weniger Festplatten-E / A als # 3?
Avi
5
Wie @avi sagt, gibt es für # 2 kein Problem, solange Sie die Tabellen über den Index abfragen. Millionen von Reihen? Ok, rufe nur die Indizes ab, die ich verwenden möchte
Xtreme Biker
11
# 2 und 3 sind beide falsch. Für 2 habe ich Leistungstests zum Importieren / Exportieren von Daten durchgeführt und festgestellt, dass SQL Server 2014 Mongo beim Importieren und Exportieren großer Datenmengen zerstört. Für 3 beanspruchen stark typisierte Daten in SQL normalerweise (ich habe vor der Komprimierung über 50% gesehen) viel weniger Speicherplatz als Dokumentendatenbanken.
Brian
7
Ja, und selbst für # 1 verstehe ich es einfach nicht. Die Skalierung ist Teil des Clustering-Vertrags, den alle wichtigen RDBMS vorschlagen
Sebas
2
Alle drei sind falsch, wenn Sie unbegrenztes Geld haben
Chazt3n