2016-07-13 2 views
4

Я работаю над проектом, который использует Couchbase Server и Sync Gateway для синхронизации содержимого ведра с клиентами iOS и Android, работающими с Couchbase Lite. Мне также нужен доступ на чтение и запись к серверу Couchbase от серверного приложения Node.js. Из исследования, которое я сделал, использование shadowing нахмурилось (https://github.com/couchbase/sync_gateway/wiki/Bucket-Shadowing), что заставило меня заглянуть в интерфейс Sync Gateway API как средство для обновления ведра из приложения Node.js. Для обновления существующих документов через API Sync Gateway требуется самый последний идентификатор версии документа, который должен быть передан, требуя отдельного чтения перед модификацией (http://mobile-couchbase.narkive.com/HT2kvBP0/cblite-sync-gateway-couchbase-server), что кажется потенциально неэффективным. Каков наилучший способ решить эту проблему?Couchbase Sync Gateway - серверный и клиентский API против затенения ковша

ответ

0

Я не уверен, почему ваш вопрос был опущен, так как это кажется разумным вопросом. Вы правы, ведро Couchbase, которое используется Sync Gateway, должно, пожалуй, лучше всего воспринимать как «непрозрачное», вы не должны ковыряться там и меняться. Существует ряд реализаций Couchbase Lite, например, для Java, .NET и Mac OS X. Рассматривали ли вы создание веб-службы, которая с одной стороны обслуживает ваше приложение, а с другой стороны сама по себе является Клиент Couchbase Lite? Вы должны иметь возможность разделить ваши данные по мере необходимости с помощью каналов.

1

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

Ожидается, что вы обновляете существующее содержимое документа. Это означает, что вы уже прочитали документ, включая идентификатор ревизии.

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

Так что короткий ответ - нет, нет способа избежать этого (не вызывая других головных болей).

Смежные вопросы