根据我的问题,我正在探索在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库包含了这个功能,这很不错。