我想知道实际存储在CouchDB数据库B树中的是什么? CouchDB: The Definitive Guide告诉数据库B树用于仅附加操作,数据库存储在单个B树中(除了每个视图B树)。
所以我想附加到数据库文件的数据项是文件的修订版,而不是整个文档:
+---------|### ...
| |
+------|###|------+ ... ---+
| | | |
+------+ +------+ +------+ +------+
| doc1 | | doc2 | | doc1 | ... | doc1 |
| rev1 | | rev1 | | rev2 | | rev7 |
+------+ +------+ +------+ +------+
是真的吗?
如果 为真,那么如何根据这样的B树确定文档的当前版本?
这是不是意味着,CouchDB需要一个单独的“视图”数据库来索引当前版本的文档以保留O(log n)访问权限?在建立这样的指数时,它不会导致竞争条件吗? (据我所知,CouchDB不使用写锁定。)
答案 0 :(得分:3)
磁盘上的数据库文件仅附加;然而,B树在概念上就地修改。更新文档时,
当写入根节点时,这有效地在较新版本被“提交”时。要查找文档,请从文件末尾开始,获取根节点,然后查看文档ID。最新版本将始终以这种方式访问。
答案 1 :(得分:2)
CouchDB不存储差异。更新文档时,它会使用新的_rev和与旧版本相同的_id附加整个新文档。在压缩过程中删除旧版本。