我想知道CouchDB数据库B树中实际上存储了什么? CouchDB: The Definitive Guide告知数据库B树用于仅追加操作,并且数据库存储在单个B树中(每个 View B树除外)。

因此,我想追加到数据库文件的数据项是文档的版本,而不是整个文档:

            +---------|### ...
            |           |
   +------|###|------+     ... ---+
   |        |        |            |
+------+ +------+ +------+     +------+
| doc1 | | doc2 | | doc1 | ... | doc1 |
| rev1 | | rev1 | | rev2 |     | rev7 |
+------+ +------+ +------+     +------+

是真的吗

如果是真的,那么如何基于这样的B树来确定文档的当前修订版本?

是不是意味着CouchDB需要一个单独的“ View ”数据库来为文档的当前修订版本建立索引,以保留O(log n)访问权限?建立这样的指数会不会导致比赛条件? (据我所知,CouchDB不使用写锁)。

最佳答案

磁盘上的数据库文件是只能追加的;但是,B树在概念上就地进行了修改。当您更新文件时,

  • 写入其叶子节点(通过附加到DB文件)
  • (通过附加)重写其父节点以引用新叶子
  • 重复步骤2,直到更新根节点

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

    关于indexing - 哪些数据实际上存储在CouchDB的B树数据库中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2668834/

    10-12 17:27
    查看更多