Best Practices für das Design von NoSQL-Datenbanken

33

Ich habe gerade mit der Verwendung einer NoSQL-Datenbank (MongoDB) begonnen und bin gespannt auf die Best Practices für das Entwerfen von Datenbanken.

Ich nehme an, die Architektur sollte sich von relationalen Datenbanken unterscheiden. Soll ich trotzdem eine normalisierte Datenbank anstreben?

Zum Beispiel habe ich einen bestimmten Anwendungsfall;

Ich habe einen Benutzer mit einem Verleihprotokoll (Adressfeld). Sollte dieses Feld ein Feld für den Benutzer oder eine separate Sammlung mit einem gemeinsam genutzten Schlüssel sein?

Tom Squires
quelle
Verwenden Sie keine Fremdschlüssel
dukeofgaming
Benutze kein SQL :-). Im Ernst, sagt Ihnen "NoSQL" noch etwas über die Technologie?
Ich denke, dieser Thread sollte in der Datenbank-Site von Stack Exchange sein. Dort finden Sie weitere Hilfe zu diesem Problem.
Luis Arriojas

Antworten:

23

Ein geeigneter Ansatz für das NoSQL-Datenbankdesign ist ein DDD ( Domain Driven Design ). Für einige Leute, die RDBMS entworfen haben, sieht NoSql wie Sql-Anti-Patterns aus und ist in einem DDD-Bereich sinnvoller.

Abhängig von der Verwendung von Adressen können Sie dieses Objekt als Wertobjekt in Ihrem Modell / Ihrer Entität für die Miethistorie definieren.

Hier sind einige Referenzen, die die Gedanken zum Design mit NoSQL klären könnten:

EL Yusubov
quelle
19

TL; DR

Durch die Normalisierung in RDBMS können Sie die Stärken des relationalen Paradigmas nutzen.

Durch Denormalisierung in NoSQL können Sie die Stärken des NoSQL-Paradigmas nutzen.

Lange Antwort

RDBMS sind großartig, weil Sie mit ihnen eindeutige strukturierte Entitäten (veränderlich oder nicht) und ihre Beziehungen zueinander modellieren können. Dies bedeutet, dass es sehr einfach ist, auf der Entitätsebene zu arbeiten, ihre Eigenschaften zu aktualisieren, eine andere einzufügen, eine andere zu löschen usw. Aber es ist auch großartig, sie dynamisch zusammenzufassen, einen Hund mit seinem Besitzer, einen Hund mit den Häusern, in denen sie sich befinden, usw Das RDBMS bietet Ihnen Werkzeuge, um all dies zu vereinfachen. Es wird für Sie zusammenarbeiten, es wird atomare Änderungen zwischen Entitäten für Sie verarbeiten usw.

NoSQL-Datenbanken sind großartig, weil Sie damit halb- / unstrukturierte Aggregate und dynamische Entitäten modellieren können. Dies bedeutet, dass es sehr einfach ist, sich ständig ändernde Entitäten zu modellieren, Entitäten, die nicht alle dieselben Attribute und hierarchischen Aggregate haben.

Um für NoSql zu modellieren, müssen Sie in Hierarchien und Aggregaten statt in Entitäten und Beziehungen denken. Sie haben also keine Person, Mietadressen und eine Beziehung zwischen ihnen. Sie haben Mietdatensätze, die für jede Person zusammenfassen, welche Mietadressen sie hatten.

Sie müssen sich fragen, welche Daten ich gemeinsam ändern muss. Welche Daten gruppieren die anderen Daten logisch. In Ihrem Fall klingt eine Person wie ein gutes Aggregat. Was ist der logische Einstiegspunkt in den Rest der Daten.

Mit NoSQL können Sie etwas speichern, das andere Dinge hat, die ihre eigenen Dinge haben. Gib mir die ganze Hierarchie der Dinge zurück. Lassen Sie es mich nach Belieben ändern. Ersetzen Sie jetzt die gesamte Hierarchie der Dinge durch meine geänderte. Das ist so ziemlich alles, was es dir gibt. Warum ist es nützlich? Wenn Sie eine Hierarchie von Dingen haben, mit denen Sie immer als Ganzes interagieren. Oder wenn Sie massiv skalieren müssen.

Alles, was RDBMS Ihnen sonst noch bietet, müssen Sie manuell in Code und in Ihrem Schema implementieren. Sie müssen sich dem Code anschließen, wenn Sie jemals ein Aggregat von Aggregaten benötigen. Sie müssen analysieren, wenn Sie nur einen Teil eines Aggregats benötigen. Sie müssen die Eindeutigkeit selbst prüfen, wenn Sie keine doppelten Angaben machen möchten. Sie müssen Ihre eigene Transaktionslogik implementieren, wenn Sie über Aggregate usw. arbeiten.

Wenn Sie also einen großen Tisch mit allem haben, was Sie brauchen, ist dies in NoSql der richtige Weg. Da die Atomizität nur auf dieser Ebene garantiert ist, und auch die Leistung. Es ist wichtig, dass Sie Ihre Beziehungen frühzeitig herausfinden. Das ist Denormalisierung.

In RDBMS lähmt die Denormalisierung Ihre Datenbank effektiv auf eine NoSQL-Datenbank. Normalerweise wollen Sie also das Gegenteil, das heißt Normalisierung. Wenn Sie dies nicht tun, sollten Sie stattdessen eine NoSQL-Datenbank verwenden. Es sei denn, Sie brauchen ein bisschen von beidem.

Didier A.
quelle