Я новичок как в CouchDB, так и в PouchDB, и использую его для создания системы управления контактами, которая синхронизируется между мобильными и настольными устройствами и может использоваться в автономном режиме. Я вижу, что использовать PouchDB бесконечно проще, чем писать бэкэнд PHP/MySQL.
Я успешно использую его, и когда я вношу противоречивые изменения на автономных устройствах, CouchDB использует алгоритм для произвольного выбора победителя, а затем правильно отправляет его на все устройства.
Я хотел бы реализовать собственный алгоритм для объединения конфликтующих записей. Вот алгоритм, который я хотел бы использовать:
- Если запись удаляется на одном клиенте и просто обновляется на другом, обновленная версия выигрывает, если только оба клиента не согласятся на удаление.
- Запись с самой последней «измененной» отметкой времени становится главной, а более старая запись становится вторичной.
- Любые поля, которые существуют только во вторичном (или пустые в главном), перемещаются в главный.
- Основная ревизия сохраняется, а вторичная удаляется.
В руководстве CouchDB есть хорошее объяснение, но я понятия не имею, как реализовать это с помощью PouchDB API во время непрерывной репликации. Согласно PouchDB API, в параметрах репликации есть прослушиватель onChange, но я не понимаю, как использовать его для перехвата конфликтов.
Если бы кто-то мог написать краткое руководство, включающее пример кода, я и, уверен, многие другие пользователи PouchDB были бы признательны за это!