首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪些数据实际存储在CouchDB中的B树数据库中?

哪些数据实际存储在CouchDB中的B树数据库中?
EN

Stack Overflow用户
提问于 2010-04-19 15:49:07
回答 2查看 2.5K关注 0票数 6

我想知道CouchDB数据库B树中究竟存储了什么?CouchDB:权威指南告诉您,数据库B树用于仅附加操作,数据库存储在单个B树中(除了每个视图B树之外)。

因此,我猜想附加到数据库文件中的数据项是文档的修订,而不是整个文档:

代码语言:javascript
复制
            +---------|### ...  
            |           |
   +------|###|------+     ... ---+
   |        |        |            |
+------+ +------+ +------+     +------+
| doc1 | | doc2 | | doc1 | ... | doc1 |
| rev1 | | rev1 | | rev2 |     | rev7 |
+------+ +------+ +------+     +------+

是真的吗?

如果是真的,那么如何根据这样的B树来确定文档的当前修订?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-20 00:06:43

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

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

当根节点被写入时,这实际上是当更新的修订被“提交”时。要找到文档,从文件的末尾开始,获取根节点,然后工作到您的doc id。最新的修订将永远是这样的访问。

票数 3
EN

Stack Overflow用户

发布于 2010-04-19 16:03:46

CouchDB不存储差异。更新文档时,它会用新的_rev和与旧版本相同的_id追加整个新文档。旧版本在压缩过程中被删除。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2668834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档