Wann soll eine NOSQL-Datenbank wie Mongodb über MySQL verwendet werden?

13

Ich bin neu im Konzept der NOSQL-Datenbanken und habe es nie benutzt. Basierend auf dem, was ich gelesen habe und dem Wenigen, das ich verstanden habe, sehe ich immer noch nicht, wie sie besonders nützlich sein können, wenn Sie keine Referenzen zwischen Daten herstellen können, wenn es kein Fremdschlüsselkonzept gibt.

Wie würde ich zum Beispiel etwas Einfaches abfragen wie "Finde alle von diesem Benutzer geposteten Kommentare", "Finde alle Fotos, die zu einem Album gehören" usw.

Bewegen sich nosql-Systeme vom statischen relationalen Datenmodell weg und lassen Sie dennoch den Überblick über solche Verweise. Gibt es etwas Analoges zu Fremdschlüsseln, die Sie in Abfragen verwenden können?

akomada
quelle

Antworten:

19

Allgemeine Verwendungen

  • Wenn Sie Datenstrukturen haben, die zum Zeitpunkt der Erstellung des Systems nicht eindeutig definiert sind. Ich neige dazu, Benutzereinstellungen in nosql zu behalten, zum Beispiel. Ein weiteres Beispiel war ein System, bei dem die Benutzer zur Laufzeit Felder hinzufügen mussten - sehr schmerzhaft in einem RDBMS und ein Kinderspiel in NoSQL.

  • Wenn sich Ihre Modellstruktur weitgehend um ein oder wenige Modellobjekte dreht und die meisten Beziehungen tatsächlich untergeordnete Objekte der Hauptmodellobjekte sind. In diesem Fall werden Sie feststellen, dass Sie kaum tatsächliche Verknüpfungen benötigen. Ich habe festgestellt, dass das Kontaktverwaltungssystem zum Beispiel sehr gut in nosql implementiert werden kann. Eine Person kann mehrere Adressen, Telefone und E-Mails haben. Anstatt sie jeweils in einer separaten Tabelle abzulegen, werden sie alle Teil desselben Modells, und Sie haben ein einziges Personenobjekt.

  • Wenn Sie vom Clustering Ihrer Daten über mehrere Server hinweg profitieren möchten, anstatt über einen einzigen monolithischen Server zu verfügen, der normalerweise von RDBMS benötigt wird.

  • Caching. Auch wenn Sie sich an ein RDBMS als Hauptdatenbank halten möchten, kann es nützlich sein, eine NoSQL-Datenbank zum Zwischenspeichern von Abfrageergebnissen oder zum Speichern von Daten wie Leistungsindikatoren zu verwenden.

  • Dokumente speichern. Wenn Sie zusammenhängende Dokumente speichern möchten, sind einige der NoSQL-Datenbanken (z. B. MongoDB) in einer Datenbank darauf spezialisiert, diese zu speichern.

Was ist mit Joins?

Ehrlich gesagt, das No-Join-Ding klang am Anfang auch für mich ziemlich beängstigend. Der Trick ist jedoch, nicht mehr an SQL zu denken. Sie müssen tatsächlich mit dem Objekt denken, das Sie im Speicher haben, wenn Sie Ihre Anwendung ausführen. Diese sollten mehr oder weniger einfach in der NoSQL-Datenbank gespeichert werden.

Da Sie Ihr vollständiges Objektdiagramm mit untergeordneten Objekten speichern können, ist der größte Teil der Verknüpfungen nicht mehr erforderlich. Und wenn Sie feststellen, dass Sie eines benötigen, müssen Sie in die Kugel beißen und beide Objekte holen und Ihren Anwendungscode eingeben.

Glücklicherweise können die meisten Treiber die Verbindung für Sie herstellen, wenn Sie Ihr Schema richtig eingerichtet haben.

Zum weiterlesen empfehle ich eigentlich Martin Fowler .

ced-b
quelle
2

Ich würde eine solche Datenbank auf jeden Fall während der Planungsphase eines Projekts (vor der Entwicklung, noch vor dem Entwurf) verwenden, um Daten zu erfassen, deren Struktur, Beziehungen und Merkmale noch nicht bekannt sind und analysiert werden müssen. Danach würde ich versuchen, alles einem relationalen Modell anzupassen.

Mike Nakis
quelle
2
Was? ... Warum? ...
Robert Harvey
So könnte man in der Praxis ein Beziehungsmodell für Daten verwenden, von denen man weiß, dass es nicht wirklich viel ändert, wie Benutzerinformationen mit dem typischen Namen, der E-Mail usw., zum Beispiel mysql. Verwenden Sie dies in Verbindung mit einer NOSQL-Datenbank, um unstrukturierte, unregelmäßige Daten wie Benutzeraktivitätsprotokolle zu verarbeiten. Eine Art geteilte Verantwortung. ? Oder haben Sie vorgeschlagen, mit einer NOSQL-Datenbank zu beginnen und eine vollständige Migration auf ein relationales Modell durchzuführen, sobald alles festgelegt ist?
Akomada
In einem Szenario, in dem Sie bereits vor Beginn der Analyse Daten haben (z. B. müssen Sie die Software zur Steuerung einer vorhandenen Fabrik neu schreiben, in der Sensoren bereits Daten ausspucken), würde ich sofort mit der Erfassung der Daten in einer nosql-Datenbank beginnen. und dann würde ich versuchen, wenn möglich, es in ein relationales Modell zu passen. Wenn nicht möglich, würde ich mit nosql fortfahren.
Mike Nakis
0

In einigen Fällen benötigen Sie keine Fremdschlüssel. Zum Beispiel:

Finde alle Kommentare dieses Benutzers

kann so einfach sein wie das Laden des commentsTeils eines Dokuments, der einem Benutzer entspricht. Dies wird als Denormalisierung bezeichnet : Anstatt zwei Sätze mit einem Join zu haben, haben Sie ein Dokument und alles, was Sie brauchen, befindet sich im Dokument. Eine Abfrage, keine Verknüpfungen, bessere Leistung .

In einigen Fällen kann dies jedoch zu einer Duplizierung der Daten führen , sodass eine Verknüpfung von einem Dokument zu einem anderen geeignet sein kann. In diesem Fall sind Sie möglicherweise an der MongoDB-Normalisierung, dem Fremdschlüssel und dem Beitritt , der Seite " Datenbankreferenzen " und insbesondere an der DBRefs-Funktion interessiert.

Arseni Mourzenko
quelle