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?
- Clustering
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:
- Ich bin nicht sicher, wie ich eine Dokumentendatenbank implementieren soll.
- Wie erhalten Dokumentdatenbanken Partitionstoleranz?
- 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?
- Welche anderen Vor- und Nachteile gibt es?
Antworten:
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.
quelle