CouchDB版本控制策略

mac*_*mac 21 versioning couchdb database-versioning document-storage

以下是实现版本控制的可行策略(使用"example"作为示例文档类型):

有一个原始文档,其中类型字段名为example_original.

对文档的后续更改都具有类型example_change和example_original文档的id作为键.此更改还将带有时间戳.

保留一个类型为example_current的doc,它是example_original的结果,所有example_change都是"applied".新的example_change文档将自动应用于此文档.

查找特定版本将包括检索example_original文档并应用所需的更改(主要是某个时间戳,但也可能是一些更改).

我应该提一下,我的用例将涉及对原始的有限数量的更改.大多数更新将包含新的原始文档.虽然这是我目前的用例,但我也会对涉及许多变更会导致的问题感兴趣.

你在这种方法中看到了什么利弊?

and*_*yuk 19

使用CouchDB进行简单文档版本控制

本文中描述的作为附件方法的版本控制应该适合大多数人对版本控制的要求.

  • 链接不再存在,但是[这一个](http://jchris.ic.ht/drl/_design/sofa/_list/post/post-page?startkey=%5B%22Versioning-docs-in-CouchDB% 22%5D)包含所述4种方法的概述 (2认同)

Aar*_*lla 9

我首先担心的是:当"获取"某个版本时,您是否可以在不修改数据库的情况下将更改应用于原始版本?

你需要从历史中删除一些东西吗?你真的相信吗?真的,真的很确定吗?分支怎么样?

总而言之,这看起来像一个复杂的策略.请记住,我听说过CouchDB但从未使用它.我会采用更简单的方法:

  1. 创建文档时,您可以分配UUID.不要使用名称,否则在重命名操作期间会遇到麻烦.添加一个读取"1"的版本字段.创建第二个文档,其中包含具有相同UUID的文档列表或添加指向第一个文档的"父"指针.

    每个文档具有"历史文档"允许更快地导航历史,但父指针更"安全"(因为您不能轻易地使用它们创建非法结构).

  2. 创建新修订时,请重用UUID并分配新的唯一版本.更新历史记录文档或父指针.

这种策略实现起来非常简单,以后可以提供各种灵活性.您可以轻松删除部分历史记录,重命名很简单,您可以创建分支.