Die Art und Weise der Replikation Konfliktlösung durch offizielle Dokumentation empfohlen ist:Konflikte Replikation Beheben für gelöschte Dokumente in CouchDB
- widersprüchlichen Versionen lesen
_conflicts
Feld Dokument (zB über eine Ansicht) - docs Fetch für alle Revisionen gelistet
- Führen Sie anwendungsspezifische Zusammenführung
- unerwünschte Revisionen entfernen
Das Problem tritt auf, wenn ich gelöschte Dokumente zusammenführen möchte. Sie erscheinen nicht in _conflicts
Feld, aber in _deleted_conflicts
. Wenn ich nur das Feld _conflicts
zusammenführe und ein Dokument in der lokalen Datenbank gelöscht und im Remote-Replikat bearbeitet wird, wird es bei der Replikation lokal wiederhergestellt. Mein Anwendungsmodell geht davon aus, dass das Löschen beim Zusammenführen immer Vorrang hat: Ein gelöschtes Dokument bleibt gelöscht, unabhängig davon, mit welchen Bearbeitungen es Konflikte verursacht.
Also, auf den ersten Blick, ist die einfachste Sache zu tun, um zu überprüfen, dass _deleted_conflicts
nicht leer ist und wenn es nicht leer ist, löschen Sie das Dokument, richtig? Nun ... das Problem dabei ist, dass dies auch gelöschte Revisionen enthalten kann, die durch Auflösen von Bearbeitungskonflikten in Schritt 4 eingeführt wurden, so dass die Bedeutung von _deleted_conflicts
in diesem Fall mehrdeutig ist.
Was ist die kanonische Art der Behandlung von Löschkonflikten in CouchDB (falls vorhanden), die keine großen Dinge wie Markierung von Dokumenten als gelöscht und Filterung auf der Anwendungsebene beinhaltet?