couchdb如何检索所有以前的修订版?

Cha*_*ang 6 indexing couchdb b-tree

据我了解,CouchDB的B树实现实际使用阴影技术,每次更新会产生新根,从这个以下摘录PDF(它看起来像实现比传统的阴影更好的算法).

阴影意味着要更新磁盘上的页面,整​​个页面将被读入内存,进行修改,然后在备用位置写入磁盘.当页面被遮蔽时,它在磁盘上的位置会发生变化,这就需要使用新地址更新(和隐藏)页面的直接祖先.阴影传播到文件系统根目录.

couchdb如何尽可能实现获取所有叶子修订(因为通过压缩过程删除了一些修订)?沙发内部是否存储指向先前版本的指针?

谢谢张

Chr*_*ris 6

Couch不保证可以检索到旧版本的文档:

术语版本和修订版本可能听起来很熟悉(如果您在没有版本控制的情况下编程,请立即删除此书并开始学习其中一个流行的系统).使用新版本进行文档更改非常类似于版本控制,但是有一个重要区别:CouchDB不保证保留旧版本.

资料来源:O'Reilly CouchDB权威指南,第40页.

为什么是这样?因为CouchDB不是版本控制系统:版本控制系统用于并发访问数据库.权威指南在第14-15页上涉及到这一点.

  • +1,有用的答案虽然我认为*Chang明白,他只是在*压缩之前询问*,当你点击Futon中的"之前的版本"时,Couch如果被遮蔽了怎么才能获取该文件? (2认同)

Jas*_*ith 4

幸运的是,CouchDB 提交者和社区领袖 Adam Kocoloski最近在邮件列表上解释了这一点。

他是这样说的:

“ID btree 中的每个叶子[存储]一个修订树,其中包含指向文档的所有可用修订的指针。检索文档的旧修订(压缩之前)或冲突版本需要与检索当前版本完全相同的 IO 数量”。

如果我理解正确的话,阴影根本不是用来隐藏旧文档修订的,而是用来隐藏不再有意义的整个修订树的。