PouchDB + Разрешение конфликтов

У меня очень простой вопрос по сложной теме:

Как работает разрешение конфликтов в PouchDB?

Я просмотрел документацию, а также быстро погуглил, но это не помогло. Итак, как мне справиться с управлением конфликтами в моем приложении, использующем PouchDB?


person dimko1    schedule 27.06.2014    source источник


Ответы (1)


Вот как вы это делаете в CouchDB, которую вы можете напрямую перевести в термины PouchDB, поскольку API-интерфейсы точно такие же.

Вы получаете документ, используя conflicts=true для запроса конфликтов (get() с {conflicts:true} в PouchDB):

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

Вы получаете такой документ:

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

Возник конфликт из другой базы данных, и версия этой базы данных победила (случайным образом). Если вы использовали двунаправленную репликацию, обе базы данных дадут один и тот же ответ.

Обратите внимание, что обе версии начинаются с «2-». Это указывает на то, что обе они являются второй редакцией документа и находятся на одном уровне дерева редакций.

Используя идентификатор версии, вы получаете конфликтующую версию (get() с {rev=...} в PouchDB:

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

Вы получите:

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

Представив пользователю две конфликтующие версии, вы можете PUT (put()) добавить третью версию поверх обеих. Ваша третья версия может объединять результаты, выбирать проигравшего или что угодно.

Продвинутое чтение:

person nlawson    schedule 27.06.2014
comment
Спасибо за ответ. Но вопрос больше - как синхронизировать элементы, когда у вас включена живая репликация? - person dimko1; 02.07.2014
comment
Руководство по разрешению конфликтов во время репликации в реальном времени см. в разделе stackoverflow.com/questions/18434686/ - person Colin Skow; 20.07.2014