Sie können niemals über eine sogenannte "NoSQL" -Datenbank sprechen, ohne das CAP-Theorem (Konsistenz, Verfügbarkeit, Partition: Wählen Sie zwei) mitzubringen. Wenn Sie beispielsweise zwischen MongoDB (Partition, Consistency) und CouchDB (Availability, Partition) wählen müssen, müssen Sie sich zuerst Gedanken machen: "Brauche ich korrekte Daten oder brauche ich ständig Zugriff?".
Diejenigen neue Datenbank wurden gemacht partitioniert werden. Aber was ist, wenn ich es nicht tue ? Was ist, wenn ich es für ziemlich cool halte, statt einer relationalen Datenbank eine Schlüssel- / Wert-, Spalten- oder Dokumentdatenbank zu haben, nur eine Serverinstanz zu erstellen und diese niemals zu beschädigen? Hätte ich in diesem Fall nicht sowohl Verfügbarkeit als auch Konsistenz? MongoDB müsste nichts replizieren, damit es verfügbar ist. Und CouchDB hätte nur eine Datenquelle, also wäre es ziemlich konsistent.
Das würde also bedeuten, dass MongoDB und CouchDB in diesem Fall nur einen geringen Unterschied in Bezug auf den Anwendungsfall haben würden? Nun, außer natürlich Leistung, API und so weiter, aber das wäre mehr eine Wahl zwischen PostgreSQL und MySQL als zwei grundlegend unterschiedliche Anforderungen.
Bin ich hier richtig Kann ich eine AP- oder CP-Datenbank in eine AC-Datenbank ändern, indem ich nicht mehr als eine Instanz erstelle? Oder fehlt mir etwas?
Stellen wir die Frage umgekehrt. Was ist, wenn ich eine relationale Datenbank nehme, beispielsweise MySQL, und sie in eine Master / Slave-Konfiguration lege? Ich verwende keine ACID-Transaktionen. Wenn ein Schreibvorgang sofort mit dem Slave synchronisiert werden soll, ist er dann keine CP-Datenbank? Und was ist, wenn ich es in vordefinierten Intervallen synchronisiere und es keine Rolle spielt, ob ein Client veraltete Daten von einem Slave liest. Wäre das nicht eine AP-Datenbank? Würde das nicht bedeuten, dass ich das Beziehungsmodell für eine partitionierte Datenbank weiterhin verwenden kann, wenn ich die ACID-Konformität aufgeben würde?
Im Wesentlichen: Ist die Skalierbarkeit in Bezug auf das, was Sie bereit sind, im CAP-Theorem aufzugeben, mehr als das zugrunde liegende Datenmodell? Verbessert das Vorhandensein von Spalten-, Dokument- und Schlüsselwerten die Skalierbarkeit gegenüber einem relationalen Modell? Können wir eine relationale Datenbank entwerfen, die von Grund auf auf Partitionstoleranz ausgelegt ist? (Vielleicht existiert es schon). Könnten wir die NoSQL-Datenbank ACID-kompatibel machen?
Es tut uns leid, es gibt eine Menge Fragen, aber ich habe in letzter Zeit viel über NoSQL-Datenbanken gelesen und es scheint mir, dass der größte Vorteil der Verwendung darin besteht, dass sie besser zur "Form" Ihrer Daten passen als nur zur Partition CAP und Aufgeben der ACID-Konformität. Schließlich hat nicht jeder so viele Daten, dass er sie partitionieren muss. Gibt es einen Performance- / Skalierbarkeitsvorteil, wenn ich das relationale Modell nicht verwende, bevor ich überhaupt darüber nachdenke, meine Daten zu partitionieren?