什么数据实际存储在CouchDB的B树数据库中?

And*_*ikh 6 indexing couchdb b-tree locking time-complexity

我想知道实际存储在CouchDB数据库B树中的是什么?该CouchDB的:权威指南告诉数据库B树仅用于追加的操作和数据库存储在一个单一的B树(除了按次B树).

所以我想附加到数据库文件的数据项是文档的修订版,而不是整个文档:

            +---------|### ...  
            |           |
   +------|###|------+     ... ---+
   |        |        |            |
+------+ +------+ +------+     +------+
| doc1 | | doc2 | | doc1 | ... | doc1 |
| rev1 | | rev1 | | rev2 |     | rev7 |
+------+ +------+ +------+     +------+
Run Code Online (Sandbox Code Playgroud)

这是真的吗?

如果,那么如何根据这样的B树确定文档的当前版本?

这是不是意味着,CouchDB需要一个单独的"视图"数据库来索引当前的文档修订版以保留O(log n)访问权限?在建立这样的指数时,它不会导致竞争条件吗?(据我所知,CouchDB不使用写锁).

Jas*_*ith 3

磁盘上的数据库文件是仅追加的;然而,B 树在概念上是就地修改的。当您更新文档时,

  1. 它的叶节点被写入(通过追加到数据库文件)
  2. 它的父节点被重写以引用新的叶子(当然通过附加)
  3. 重复步骤2,直到更新根节点

当写入根节点时,即有效地“提交”了较新的修订版。要查找文档,您需要从文件末尾开始,获取根节点,然后找到您的文档 ID。最新版本始终可以通过这种方式访问​​。