Wann sollten Sie eine Dokument- oder relationale Datenbank oder eine Grafikdatenbank verwenden? [geschlossen]

29

Zum Zwecke der Diskussion betrachten wir ein FourSquare-Szenario.

Szenario

Einheiten:

  • Benutzer
  • Setzt

Beziehungen:

  • Checkins: Benutzer <-> Orte, viele zu viele
  • Freunde: Benutzer <-> Benutzer, viele zu viele

Datenbank Design

Diese weisen höchstwahrscheinlich Fehler auf.

RDBMS

Tabellen:

  • Benutzer
  • Setzt
  • Checkins (Kreuzung)
  • Freunde (Kreuzung)

Vorteile:

  • GAP: Konsistenz, Verfügbarkeit

Nachteile:

  • CAP: Partitionstoleranz, auch bekannt als Sharding
  • Schemata = unflexible Struktur
  • schlechte Replikation?

Graph

Objekte:

  • Benutzer
  • Setzt

Kanten:

  • Freunde: Benutzer <-> Benutzer
  • Checkins: Benutzer -> Orte
    • enthält Zeitstempel

Vorteile:

  • GAP: Konsistenz, Verfügbarkeit?
  • schemenlose, leicht veränderbare Objekte und Kanten
  • Diagramm-Traversal-Abfragen, zum Beispiel:
    • Clustering
      • Gruppen von Freunden finden
      • Suche nach Restaurants, die von ähnlichen Leuten gemocht werden
    • Haben Sie noch weitere häufig / nützliche Fragen?

Nachteile:

  • CAP: Partitionstoleranz?

Dokument / Objekt

3 getrennte Datenbanken?

  • Benutzer
    • Freundesliste
  • Checkins
    • Zeitstempel
    • Benutzer
    • Ort
  • Setzt

Vorteile:

  • CAP: Verfügbarkeit, Partitionstoleranz
  • schemenlose, leicht veränderbare Objekte

Nachteile:

  • GAP: Konsistenz

Fragen

Für die Aufzeichnung endeten sie mit MongoDB. Zusätzlich zu all diesen Fragezeichen oben:

  1. Ich bin nicht sicher, wie ich eine Dokumentendatenbank implementieren soll.
  2. Wie erhalten Dokumentdatenbanken Partitionstoleranz?
  3. Um die Checkins eines einzelnen Benutzers zu erhalten, gehe ich davon aus, dass der Vorgang alle Checkins analysiert und die Metadaten nach dem Benutzernamen (Karte + Filter) filtert. Die Leistung beim Parsen von mehr als 1.000.000 Dokumenten für jeden Benutzer wäre furchtbar schlecht. Ich nehme an, das ist nicht das richtige Verhalten?
  4. Welche anderen Vor- und Nachteile gibt es?
wting
quelle
(1) Sie müssen die Beziehung zwischen zwei Tabellen im Geschäftsbegriff buchstabieren. Dies liegt daran, dass es möglicherweise parallele Beziehungen gibt. Beispielsweise impliziert Benutzer <-> Benutzer keine 1-mm-Beziehung. Dies kann mehr als 1 bedeuten. Beispiel: Ein Benutzer mag einen anderen Benutzer und ein Benutzer hasst einen anderen Benutzer. Dies sind 2 Beziehungen. (2) Es wäre hilfreich, wenn Sie zusammenfassen könnten, was Sie "genau" wollen.
NoChance
@EmmadKareem: (1) Ich möchte das Szenario nicht komplizieren. Die einzige User <-> User-Beziehung, die mich interessiert, ist eine gegenseitige Freundschaft, die eine Verbindung von vielen zu vielen ist. (2) Ich möchte, dass die 4 Fragen, die unten im Beitrag aufgeführt sind, beantwortet werden.
WTING

Antworten:

13

Ihre Frage könnte das Thema eines Semesterkurses sein. Sie müssen es in handliche Stücke zerlegen. Als solches werde ich nur einige Teilantworten wegwerfen.

Eine der ersten Fragen bei der Entscheidung, welche Art von Datenbank verwendet werden soll, ist, welche Art von Abfragen Sie ausführen und ob Sie sie alle kennen, bevor Sie die Datenbank erstellen. SQL-Datenbanken bieten den Vorteil leistungsstarker und flexibler Abfragen für alle Daten in der Datenbank. Diagrammdatenbanken verfügen über hochspezialisierte Abfragemöglichkeiten, die sie für Diagrammdaten zu den besten und für Nicht-Diagrammdaten zu den schlechtesten machen (obwohl Diagrammdatenbanken Komponenten in SQL-Datenbanken sein können). NoSQL-Datenbanken sind in ihrer Fähigkeit, Daten abzurufen und zu verarbeiten, wesentlich eingeschränkter.

Das nächste ist, wie Sie sich über die ACID-Eigenschaften fühlen: Atomizität, Konsistenz, Isolation und Haltbarkeit. SQL-Datenbanken bieten starke Garantien für alle 4. NoSQL-Datenbanken versprechen in der Regel nicht alle 4, und die Art und Weise, wie sie abweichen, gehört zu den Hauptunterschieden, die die verschiedenen Implementierungen von NoSQL-Datenbanken unterscheiden. Andererseits ist es nicht möglich, die Konsistenz und Verfügbarkeit einer Partition zu gewährleisten (siehe Brewer's CAP Thorem ). Daher kann keine SQL-Datenbank verwendet werden, wenn Sie angesichts einer Partition auf einer vollständigen Verfügbarkeit bestehen. Persönlich ist mir die Haltbarkeit der Daten in der Datenbank sehr wichtig, da ich normalerweise mit Daten arbeite, bei denen selbst ein Datenverlust von 0,0001% inakzeptabel ist und die Datensätze so klein sind, dass ich mich nicht um Partitionen kümmern muss bevorzugen stark SQL-Datenbanken.

Eine weitere sehr praktische Überlegung betrifft die Qualität des Servercodes, die Verfügbarkeit von Datenbankadministratoren und -programmierern, die Qualität der Unterstützung für auftretende Probleme, die Qualität und Verfügbarkeit von Schnittstellenbibliotheken zum Verbinden Ihrer Anwendung mit der Datenbank usw. MySQL gibt es schon seit fast zwei Jahrzehnten, die meisten Fehler wurden behoben, es wird sehr häufig verwendet und bietet daher sowohl eine hervorragende Unterstützung als auch eine hervorragende Verfügbarkeit des Personals. Es wird wahrscheinlich für die nächsten zehn Jahre unterstützt. Über Riak kann man nichts sagen.

Beachten Sie, dass Google NoSQL-Datenbanken zwar praktisch erfunden hat, um eine zwischengespeicherte und indizierte Version des gesamten World Wide Web zu speichern, sie jedoch für einige Dinge immer noch MySQL verwenden.

Alter Pro
quelle
1
Mir ist klar, dass ich viel gefragt habe, also wäre eine allgemeine Antwort in Ordnung gewesen. Die Kernfragen lauten: (1) Warum sollten Sie die Dokumentendatenbank für vermeintlich große Scherben verwenden, wenn Sie horizontale Scherben in der Logik mithilfe von Bereichsscherben implementieren können? (2) Wie würden Sie eine Dokumentendatenbank für die Verwendung in einem FourSquare-Szenario entwerfen und wie werden einige häufige Verwendungszwecke behandelt (Einchecken des Benutzers anzeigen, Freunde des Benutzers anzeigen, aktuell eingecheckte Benutzer des Bereichs anzeigen)?
11.
1
@ William, es gibt Dutzende von Artikeln, die Ihre Fragen beantworten und über Google leicht zugänglich sind. Sogar mehrere auf Stack Overflow alleine. Mach deine Hausaufgaben.
Old Pro