So lösen Sie Konflikte mit der fortlaufenden Replikation

8

Ich bin neu bei CouchDB und PouchDB und verwende es, um ein Kontaktmanagementsystem zu erstellen, das auf mobilen Geräten und Desktopgeräten synchronisiert und offline verwendet werden kann. Ich sehe, dass PouchDB unendlich einfacher ist, als ein PHP / MySQL-Backend zu schreiben.

Ich habe es erfolgreich verwendet, und wenn ich widersprüchliche Änderungen an Offline-Geräten treffe, verwendet CouchDB einen Algorithmus, um willkürlich einen Gewinner auszuwählen und ihn dann korrekt an alle Geräte zu senden.

Ich möchte einen benutzerdefinierten Algorithmus implementieren, um widersprüchliche Datensätze zusammenzuführen. Hier ist der Algorithmus, den ich gerne benutzen würde:

  1. Wenn ein Datensatz auf einem Client gelöscht und lediglich auf einem anderen aktualisiert wird, Die aktualisierte Version gewinnt, es sei denn, beide Clients stimmen dem Löschen zu.
  2. Der Datensatz mit dem letzten "modifizierten" Zeitstempel wird zum Master, und der ältere Datensatz wird der sekundäre.
  3. Alle Felder, die nur in der sekundären (oder leer in der Master) werden zum Master verschoben.
  4. Die Hauptversion wird gespeichert und die sekundäre wird gelöscht.

CouchDB's Guide hat eine gute Erklärung , aber ich habe keine Ahnung, wie ich es mit dem implementieren kann PouchDB API während einer fortlaufenden Replikation. Laut der PouchDB API gibt es einen "onChange" Listener in den Replikatoptionen, aber ich verstehe nicht wie benutze es um Konflikte abzufangen.

Wenn jemand ein kurzes Tutorial schreiben könnte, einschließlich einiger Beispielcodes, würde ich mich sicher auch viele andere PouchDB-Benutzer dafür interessieren!

    
Colin Skow 25.08.2013, 23:16
quelle

1 Antwort

7

Einen Artikel mit Beispielen zu schreiben, wie die Konfliktlösung genau zu managen ist, ist wirklich eine gute Idee, es kann verwirrend sein, aber mit dem Mangel an einem

Die Idee ist die gleiche wie CouchDB, um Konflikte zu lösen, löschen Sie die Revisionen, die nicht gewonnen haben (und schreiben Sie einen neuen Gewinner wenn nötig)

# 1 ist, wie CouchDB Konfliktlösung sowieso funktioniert, also müssen Sie sich nicht darum kümmern, gelöschte Blätter Konflikt

%Vor%

Dies erfordert eine Fehlerbehandlung usw. und könnte viel schöner geschrieben werden, war nur eine schnelle Serviettenzeichnung, wie der Code aussehen könnte

    
Dale 18.09.2013, 09:02
quelle