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



根据我的问题,我正在探索在CouchDB中实现文档版本控制的通用方法的想法。虽然我认为可能没有规范的方法,但我有以下想法,正在寻求反馈。

我希望尽可能保持可读的文档id,因此存在于document1的文档将包含指向系统上所有现有版本的指针文档。实际的修订文档将位于document1/308ef032a3801a,其中308ef032a3801a为随机数或哈希值

指针文档

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

版本文件

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

更典型的做法是将文档的旧版本保留在当前版本中(要么作为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)函数中)。

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

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

建议的方法是将旧版本粘贴为当前文档的附件。正如文档中提到的,它简单、可伸缩、可复制。jquery couchdb库包含了这个功能,这很不错。

最新更新