PouchDB + Résolution de conflit

J'ai une question très simple sur un sujet difficile:

Comment fonctionne la résolution des conflits dans PouchDB?

J'ai examiné la documentation, ainsi que le googling rapide, mais cela n'a pas aidé. Alors, comment puis-je gérer la gestion des conflits dans ma demande qui utilise PouchDB?

Voici comment vous le faites dans CouchDB, que vous pouvez traduire directement en termes de PouchDB puisque les API sont exactement les mêmes.

Vous récupérez un document en utilisant les conflicts=true pour demander des conflits ( get() avec {conflicts:true} dans PouchDB):

 http://localhost:5984/db1/foo?conflicts=true 

Vous recevez un document comme ceci:

 { "_id":"foo", "_rev":"2-f3d4c66dcd7596419c76b2498b3ba21f", "notgonnawork":"this is from the second db", "_conflicts":["2-c1592ce7b31cc26e91d2f2029c57e621"] } 

Il y a un conflit introduit à partir d'une autre base de données, et la révision de cette base de données a (de manière aléatoire) gagné. Si vous avez utilisé une réplication bidirectionnelle, les deux bases de données fourniront cette même réponse.

Notez que les deux révisions commencent par "2-". Cela indique qu'ils sont à la fois la deuxième révision du document, et ils vivent tous deux au même niveau de l'arbre de révision.

En utilisant l'ID de révision, vous récupérez la version en conflit ( get() avec {rev=...} dans PouchDB:

 http://localhost:5984/db1/foo?rev=2-c1592ce7b31cc26e91d2f2029c57e621 

Vous recevez:

 { "_id":"foo", "_rev":"2-c1592ce7b31cc26e91d2f2029c57e621", "notgonnawork":"this is from the first database" } 

Après avoir présenté les deux versions contradictoires à l'utilisateur, vous pouvez ensuite PUT ( put() ) une troisième révision en plus des deux. Votre troisième version peut combiner les résultats, choisir le perdant, ou ce que vous voulez.

Lecture avancée:

  • Les documents CouchDB sur la résolution des conflits
  • La page wiki CouchDB sur les conflits.
  • Comprendre les conflits CouchDB par Jan Lenhardt