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

拥有一份原始文档,其中类型字段名为 example_original。

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

保留一份类型为 example_current 的文档,该文档是 example_original 的结果,并且所有 example_change 均“已应用”。新的 example_change 文档将自动应用到该文档。

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

我应该提到,我的用例将涉及对原始用例的有限数量的更改。大多数更新将包含新的原始文档。虽然这是我当前的用例,但我也会对涉及许多更改时可能导致的问题感兴趣。

您认为这种方法有哪些优点和缺点?

有帮助吗?

解决方案

我的第一个担心是:当“获取”某个版本时,是否可以在不修改数据库的情况下将更改应用到原始版本?

您是否需要从历史记录中删除某些内容?你真的确定吗?真的、真的确定吗?分支机构怎么样?

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

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

    每个文档都有一个“历史文档”可以更快地导航历史记录,但父指针更“安全”(因为您无法轻松地用它们创建非法结构)。

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

该策略实施起来非常简单,并且允许以后提供各种灵活性。您可以轻松删除部分历史记录,重命名很简单,并且可以创建分支。

其他提示

简单的文档版本使用CouchDB

在版本作为附件这篇文章应该适合版本大多数人的要求的方式描述。

什么是这些文件的经营状况,特别是法律?我已经在你的建议将不会从商业persepctive适当的情况下工作,因为一个需要证明显示为3.0版的文件确实是文件的版本3。动态地施加增量不会削减顺应性芥菜

如果像你说的,对文档的更改罕见洛根。,那么你就不会通过存储的增量,而不是整个文件来节省磁盘空间。存储整个文件还允许检索时间任何文件的可靠预测。这也降低了检索过程的复杂性。

使用 CouchDB 进行版本控制的策略是永远不要压缩包含需要保留完整历史记录的文档的数据库。您仍然可以压缩其他数据库。如今,这个简单的策略与编辑冲突解决策略一起开箱即用。

删除文档可以通过编写一个没有内容但删除了属性集的新版本来完成。

分支不能以这种方式完成,因为版本控制机制提供单一修订线程。

现在谈谈 CouchDB 可能的未来:

  • 如今,每个版本都拥有该文档的完整副本,但人们可能会认为 CouchDB 引擎的优化有一天可以存储增量。
  • 未来 CouchDB 也有可能提供 API 来防止某些文档类型的压缩。这将允许将所有文档保存在同一个数据库中。这将是 CouchDB 的一个简单补丁。
  • 该策略确实支持文档分支的管理,但考虑到 CouchDB 作为文档数据库的性质,这是一种合理但长期的可能性。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top