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

时间:2011-11-25 22:22:54

标签: couchdb version revision

关注我的问题here我正在探讨CouchDB中文档版本控制的通用方法的想法。虽然我想可能没有规范的方法,但我有以下想法,我正在寻找反馈。

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

实施例

指针文件

{
    "_id" : "document1",
    "versions" : [ "document1/308ef032a3801a" ]
}

版本文件

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

2 个答案:

答案 0 :(得分:5)

将文档的旧版本保留在当前版本中更为常见(作为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.couch.js,它实现了它(在saveDoc(doc)函数中)。

答案 1 :(得分:2)

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

http://jchrisa.net/drl/_design/sofa/_list/post/post-page?startkey=%5B%22Versioning-docs-in-CouchDB%22%5D

建议的方法是将旧版本作为当前文档的附件。  正如文档所提到的,它是简单,可扩展和复制的。 jquery couchdb库已经烘焙了很好。