Ich arbeite derzeit an einer Wiki-ähnlichen Anwendung mit CouchDB und versuche, ein Dokumentversionsschema zu implementieren. So wie ich es sehe, gibt es zwei Möglichkeiten, dies zu tun:
- Speichern Sie jede Version als separates Dokument
- Speichern Sie ältere Versionen als Anhänge an ein einzelnes Dokument.
Im Moment arbeite ich in der ersten Form. Wenn ein Benutzer ein Dokument bearbeitet und speichert, kopiert das Back-End zuerst die vorherige Revision in ein neues Dokument und speichert dann die neue Version. Jedes Dokument hat ein 'history'-Array, das Daten zu jeder Version enthält (die Dokument-ID der alten Version, einen Zeitstempel, den Editor usw.).
Da dieses Verlaufsarray für ein häufig aktualisiertes Dokument sehr lang werden kann, wird in einer Ansicht beim normalen Lesen ein Dokument ohne Verlauf abgerufen (und in einer anderen Ansicht wird der Verlauf abgerufen).
Meine Frage lautet: Ich bin mir nicht sicher, was ich derzeit tue, und habe darüber nachgedacht, auf die Methode des „Anhaftens“ umzusteigen. Aber ich bin mir nicht sicher. Ich hoffe, dass jemand, der CouchDB besser kennt als ich (ich bin erst seit ein paar Wochen dabei - und dies ist mein erstes Projekt, das CouchDB ... und NoSQL verwendet), mir die Vor- und Nachteile jedes einzelnen Projekts erklären kann Ansatz. Oder gibt es vielleicht ein anderes Versionsschema, das ich übersehen habe?
quelle
Antworten:
Das Speichern nur von Änderungen ist eine gute Idee, da das Speichern älterer Dokumente als separate Dokumente oder Anhänge zur endgültigen Überarbeitung der Datenbank einen Overhead für den Datenbankserver verursacht.
Wenn Sie einen Schlüsselwert in Ihrem Dokument ändern, fügen Sie einen neuen Schlüssel mit dem Namen hinzu
_h_i_s_<key_name>
. Fügen Sie in dem neu erstellten (oder während des letzten Updates erstellten) Objekt nach jeder Bearbeitung / Aktualisierung die folgenden Objekte hinzu:oder
Dieser Ansatz spart auf lange Sicht viel Speicherplatz und Replikationsbandbreite.
quelle
Ohne Kenntnis von CouchDB. Es ist jedoch eine Verschwendung von Speicherplatz, wenn jede Version nur unwesentlich von der Vorgängerversion abweicht. Ich würde nur das Speichern von Änderungen empfehlen.
Vielleicht möchten Sie hier einen Blick darauf werfen oder nach Datenversionierung suchen.
quelle
Jahre später ;-)
Sie müssen die Änderungen nicht speichern, da CouchDB dies für Sie erledigt. Wenn ein Dokument geändert wird, wird eine neue Revision erstellt. Beachten Sie, dass dies physisch ein anderes Dokument ist, das dasselbe Dokument enthält,
_id
jedoch neu ist_rev
(überarbeitet) und Speicherplatz auf Ihrer Festplatte belegt.Sicher müssten Sie alle Revisionen behalten, was bedeuten würde, dass Sie eine sehr große Festplatte benötigen.
quelle