与Couchbase-lite一起使用时,Sync Gateway会为每次更改创建一个文档

时间:2015-06-07 14:01:46

标签: couchbase couchbase-lite couchbase-sync-gateway

从我观察到的:

  1. 对于您创建的每个文档,还会创建一个修订管理器文档。此修订管理器会跟踪最新版本,并维护阵列中所有修订的历史记录。
  2. 每次更新文档时,都会创建一个新文档(whyyyyy ???)。 revision-manager文档的最新指针指向此新文档,并将以前的文档添加到其修订历史列表中。
  3. 因此,在每次更新操作中,Sync-Gateway都会添加新文档并修改版本管理器文档。
  4. 这是执行版本控制的非常低效的方式,其中维护整个文档的副本以用于版本控制而不仅仅是差异,因为这将占用大量空间。 (例如:在“GrocerySync-Android”示例应用程序中,在单个待办事项上进行500次点击需要8.03MB的磁盘空间。此外,修订管理器文档已超过2.5 kb并且我收到一条消息说你不能修改超过2.5 kb的文件。为什么????)

    问题:

    1. 什么是_sync:local:document about?
    2. 是否可以关闭在更新时创建新文档并仅保留最新副本的默认行为。 (一种方法可能是删除客户端中较旧的转速,但我想这不会修改修订管理器文档。)

1 个答案:

答案 0 :(得分:3)

在分布式系统中,特别是用于iOS / Android和其他嵌入式设备的分布式系统,在每个版本中保留完整的属性集非常重要。

在这样的系统中使用补丁/差异方法可能会导致更多的不一致,例如,只有在某些先前的状态下,更新才有意义。否则,向用户显示文档的差异将不会提供良好的用户体验。它非常适合其他用例,例如源代码的版本控制(Git,Mercurial ......)

可以在复制协议中利用补丁/差异方法。 Couchbase Lite iOS存储库中有一个open ticket,讨论了仅转移修订增量的可能性。

如果您只想保留少量修订,请更改maxRevTreeDepth属性以指定要保留在文档树历史记录中的修订数量(默认值为20,阅读更多here )。