CouchDB文档版本控制的最佳实践

CouchDB文档版本控制的最佳实践,couchdb,version,revision,Couchdb,Version,Revision,在我的问题之后,我正在展示CouchDB中文档版本控制的通用方法。虽然我认为可能没有规范的方法,但我有以下想法,正在寻求反馈 我希望尽可能维护可读的文档ID,因此document1中存在的文档将包含指向系统上所有现有版本的指针。实际的修订版文档将位于类似document1/308ef032a3801a的位置 308ef032a3801a是一些随机数或散列 例子 指针文档 { "_id" : "document1", "versions" : [ "document1/308ef0

在我的问题之后,我正在展示CouchDB中文档版本控制的通用方法。虽然我认为可能没有规范的方法,但我有以下想法,正在寻求反馈

我希望尽可能维护可读的文档ID,因此
document1
中存在的文档将包含指向系统上所有现有版本的指针。实际的修订版文档将位于类似
document1/308ef032a3801a的位置
308ef032a3801a
是一些随机数或散列

例子 指针文档

{
    "_id" : "document1",
    "versions" : [ "document1/308ef032a3801a" ]
}
版本文档

{
    "_id" : "document1/308ef032a3801a",
    ... actual content
}

以下是关于文档版本控制方法的一些讨论:

一种建议的方法是将旧版本作为附件粘贴到当前文档中。
正如文档中提到的,它简单、可扩展且可复制。jquery couchdb库中有这样一个插件,它很好。

更典型的做法是将文档的旧版本保存在当前版本中(作为JSON或通常作为附件)。对于JSON案例

{
  "_id":"foo",
  "_rev":"3-fsfsfsdf",
  "foo":"current value of foo",
  "history": {
    "2": {
      "foo":"previous version of foo"
    },
    "1": {
      "foo":"initial version of foo"
    }
  }
}

显然,这会使事情变得有些混乱,这就是为什么将文档的完整旧版本推送到附件中通常更简单的原因。这种模式非常常见,CouchDB附带了一个实现它的库,
jquery.coach.js
(在
saveDoc(doc)
函数中)。

FYI在_id中使用“/”可能会导致一些问题:。哇,这是无意的;编辑以澄清问题对于一个可能包含许多KB文本的大型文档,此方法是否会导致不必要的开销?考虑到100个版本,每个版本的大小为1KB,压缩前的总大小是多少?我建议使用附件方法,我提到JSON方法,因为它更容易显示示例。仅供参考web archive链接: