与Couchbase lite一起使用时,同步网关会为每次更改创建一个文档

与Couchbase lite一起使用时,同步网关会为每次更改创建一个文档,couchbase,couchbase-lite,couchbase-sync-gateway,Couchbase,Couchbase Lite,Couchbase Sync Gateway,据我观察: 对于您创建的每个文档,还将创建一个修订管理器文档。此修订管理器跟踪最新修订,并维护阵列中所有修订的历史记录 每次更新文档时,都会创建一个新文档(whyyyy???)。修订管理器文档的最新指针指向此新文档,并将以前的文档添加到其修订历史列表中 所以,在每次更新操作中,同步网关都会添加一个新文档,并修改修订管理器文档 这是一种非常低效的版本控制方法,即维护整个文档的副本以进行版本控制,而不仅仅是差异,因为这将占用大量空间。(例如:在“GrocerySync Android”示例应用程序中

据我观察:

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

    问题:

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

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

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

    可以在复制协议中利用补丁/差异方法。Couchbase Lite iOS存储库中有一个讨论仅传输修订增量的可能性的文件

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