Немного поработав с Redux, я понял, что та же концепция однонаправленного потока поможет мне полностью избежать проблемы конфликтов.
Redux выглядит так ...
Итак, мой клиентский код никогда не записывает определенные данные в основную базу данных, вместо этого они записывают вставку / обновление / удаление запросов локально, которые PouchDB затем помещает в основную базу данных CouchDB. На том же сервере, что и главная CouchDB, у меня есть PouchDB в NodeJS, реплицирующий эти запросы. Программное обеспечение «Superviser» в NodeJS проверяет каждый новый запрос, изменяет их статус на «обработка», записывает запрошенные обновления, вставляет и удаляет, а затем отмечает запрос как «обработанный». Чтобы гарантировать, что они обрабатывают по одному коду, который получает каждый запрос, помещает их в FIFO. Код обработки тянет их с другого конца.
Я не имею дело со сверхвысоким объемом, поэтому задержка не имеет значения.
Я также не сталкиваюсь с ситуацией, когда множество людей могут пытаться обновить одну и ту же запись одновременно. Если это ваша ситуация, ваши запросы на обновление на стороне клиента должны будут указывать номер rev , а ваши «супервизоры» должны будут отклонять запросы на изменение, относящиеся к замененной версии. Вы должны будете выяснить, как ваш клиентский код получит и отреагировать на эти отклонения.