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不使用写锁).
磁盘上的数据库文件是仅追加的;然而,B 树在概念上是就地修改的。当您更新文档时,
当写入根节点时,即有效地“提交”了较新的修订版。要查找文档,您需要从文件末尾开始,获取根节点,然后找到您的文档 ID。最新版本始终可以通过这种方式访问。