2015-06-07 1 views
2

Из того, что я наблюдал:синхронизации шлюз создает один документ в зависимости от изменения при использовании Couchbase-лайт

  1. Для каждого документа, который вы создаете, также создается пересмотр менеджер документа. Этот ревизионный менеджер отслеживает последнюю ревизию, а также ведет историю всех изменений в массиве.
  2. Каждый раз, когда вы обновляете документ, создается новый документ (whyyyyy ???). Последний указатель документа администратора ревизии указывает на этот новый документ и добавляет предыдущий документ в его список истории изменений.
  3. Таким образом, в каждой операции обновления Sync-Gateway добавляет новый документ и также модифицирует документ диспетчера ревизий.

Это очень неэффективный способ управления версиями, когда копия всего документа поддерживается для управления версиями вместо разницы, так как это займет много места. (Например: занимает 8,03 МБ дискового пространства для выполнения 500 нажатий на один пункт todo в примере приложения GrocerySync-Android. Кроме того, документ менеджера ревизий стал больше 2,5 кб, и я получаю сообщение о том, что вы не можете изменить документ более 2,5 кбайт Why ????)

Вопросы:.

  1. Что такое _sync: местный: документ о?
  2. Можно ли отключить это поведение по умолчанию для создания нового документа при обновлении и сохранения только последней копии. (Один из способов - удалить старые версии в клиенте, но я думаю, что это не изменит документ ревизора-менеджера.)

ответ

3

В распределенной системе, особенно используемой для iOS/Android и других встроенных устройств, важно сохраняйте полный набор свойств в каждой ревизии.

Использование подхода patch/diff в такой системе может привести к большему количеству несоответствий, например обновление будет иметь смысл только в том случае, если было и предыдущее состояние. В противном случае показ различий документа для пользователя не обеспечит отличную работу пользователя. Он очень хорошо подходит для других случаев использования, например, для версии исходного кода (Git, Mercurial ...)

Возможно, можно использовать подход patch/diff в протоколе репликации. В репозитории Couchbase Lite iOS есть open ticket, в котором обсуждаются возможности передачи только дельт версий.

Если вы хотите сохранить небольшое количество изменений, измените свойство maxRevTreeDepth, чтобы указать количество ревизий, которые необходимо сохранить в истории дерева документа (по умолчанию 20, далее here).

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