Sync Gateway создает один документ за каждое изменение при использовании с Couchbase-lite

Из того, что я заметил:

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

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

Вопросов:

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

person Anish Singh    schedule 07.06.2015    source источник


Ответы (1)


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

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

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

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

person jamiltz    schedule 16.06.2015