Konsistenz bedeutet letztendlich, dass die Weitergabe von Änderungen einige Zeit in Anspruch nimmt und die Daten möglicherweise nicht nach jeder Aktion im selben Zustand sind, selbst bei identischen Aktionen oder Transformationen der Daten. Dies kann dazu führen, dass sehr schlimme Dinge passieren, wenn die Leute nicht wissen, was sie tun, wenn sie mit einem solchen System interagieren.
Bitte implementieren Sie keine geschäftskritischen Dokumentendatenspeicher, bis Sie dieses Konzept gut verstanden haben. Das Versauen einer Implementierung eines Dokumentdatenspeichers ist viel schwieriger zu beheben als ein relationales Modell, da die grundlegenden Dinge, die vermasselt werden sollen, einfach nicht behoben werden können, da die Dinge, die zum Beheben erforderlich sind, im Ökosystem einfach nicht vorhanden sind. Das Refactoring der Daten eines Inflight-Speichers ist auch viel schwieriger als die einfachen ETL-Transformationen eines RDBMS.
Nicht alle Dokumentenspeicher sind gleich. Einige dieser Tage (MongoDB) unterstützen Transaktionen einer Art, aber die Migration von Datenspeichern ist wahrscheinlich mit den Kosten einer erneuten Implementierung vergleichbar.
WARNUNG: Entwickler und sogar Architekten, die die Technologie eines Dokumentendatenspeichers nicht kennen oder verstehen und Angst haben, dies zuzugeben, aus Angst, ihren Arbeitsplatz zu verlieren, aber klassisch in RDBMS geschult wurden und nur ACID-Systeme kennen (wie unterschiedlich kann es sein) ?) und wer die Technologie nicht kennt oder sich die Zeit nimmt, sie zu erlernen, wird das Entwerfen eines Dokumentdatenspeichers vermissen. Sie können auch versuchen, es als RDBMS oder für Dinge wie Caching zu verwenden. Sie werden atomare Transaktionen, die für ein gesamtes Dokument ausgeführt werden sollen, in „relationale“ Teile zerlegen, wobei vergessen wird, dass Replikation und Latenz Dinge sind oder noch schlimmer, Systeme von Drittanbietern in eine „Transaktion“ ziehen. Sie tun dies, damit ihr RDBMS ihren Datensee spiegeln kann, unabhängig davon, ob es funktioniert oder nicht, und ohne Tests, da sie wissen, was sie tun. Dann werden sie überrascht sein, wenn komplexe Objekte, die in separaten Dokumenten wie "Bestellungen" gespeichert sind, weniger "Bestellpositionen" haben als erwartet oder gar keine. Aber es wird nicht oft oder oft genug passieren, so dass sie einfach vorwärts marschieren. Sie treffen möglicherweise nicht einmal das Problem in der Entwicklung. Anstatt die Dinge neu zu gestalten, werden sie "Verzögerungen" und "Wiederholungsversuche" und "Einchecken" auslösen, um ein relationales Datenmodell zu fälschen, das nicht funktioniert, aber zusätzliche Komplexität ohne Nutzen hinzufügt. Aber jetzt ist es zu spät - das Ding wurde bereitgestellt und jetzt läuft das Geschäft darauf. Schließlich wird das gesamte System weggeworfen und die Abteilung wird ausgelagert und jemand anderes wird es warten. Es funktioniert immer noch nicht richtig, aber sie können weniger teuer ausfallen als der aktuelle Fehler.