【发布时间】:2012-01-28 21:31:12
【问题描述】:
使用两个数据库来说明这个例子:CouchDB 和Cassandra。
沙发数据库
CouchDB 使用 B+ 树作为文档索引(使用 a clever modification 在其仅附加环境中工作) - 更具体地说,当文档被修改(插入/更新/删除)时,它们被附加到正在运行的数据库文件以及一个完整的叶子 -> 来自 B+ 树的所有节点的节点路径,该路径在文档之后立即受到更新修订的影响。
这些零散的索引修订与修改一起内联,以便完整索引是附加在文件末尾的最新索引修改以及数据文件中仍然相关的其他部分的联合并且尚未修改。
搜索B+ tree 是 O(logn)。
卡桑德拉
Cassandra 将记录键排序在内存中的表中(让我们将它们视为此问题的数组),并不时将它们作为单独的(排序的)sorted-string tables 写出。
我们可以将所有这些表的集合视为“索引”(据我了解)。
Cassandra 需要不时地compact/combine these sorted-string tables,创建一个更完整的索引文件表示。
搜索a sorted array 是 O(logn)。
问题
假设在 CouchDB 中维护部分 B+ 树块与在 Cassandra 中维护部分排序字符串索引之间的复杂程度相似,并假设两者都提供 O(logn) 搜索时间,您认为哪个可以更好地表示数据库索引以及为什么?
我特别好奇是否有一个关于另一个的实现细节使其特别具有吸引力,或者它们是否都是洗牌,而您只需选择您喜欢使用的任何数据结构/对开发者来说更有意义。
感谢您的想法。
【问题讨论】:
-
对于任何感兴趣的人,这里有更多关于 B+ 树、LSM 和分形树性能的信息:nosql.mypopescu.com/post/3063887666/…
标签: database indexing nosql couchdb cassandra