【发布时间】:2014-01-15 23:46:08
【问题描述】:
我正在阅读数据结构,尤其是像 CouchDB 中使用的 append-only B+ tree 和 Clojure 以及其他一些函数式编程语言中使用的 Hash array mapped trie 这样的不可变数据结构。
在内存中运行良好的数据结构在磁盘上运行不佳的主要原因似乎是由于碎片导致的磁盘寻道所花费的时间,就像普通的二叉树一样。
但是,HAMT 也很浅,因此不需要比 B 树更多的搜索。
另一个建议的原因是从数组映射树中删除比从 B 树中删除更昂贵。这是基于我们谈论的是密集向量的假设,并且在将任何一个用作哈希映射时都不适用。
此外,B 树似乎做了更多的重新平衡,因此以仅附加的方式使用它会产生更多的垃圾。
那么为什么 CouchDB 以及几乎所有其他数据库和文件系统都使用 B 树?
[编辑] 分形树?日志结构的合并树?头脑=炸毁
[edit] 现实生活中的 B 树使用以千计的度数,而 HAMT 的度数为 32。度数为 1024 的 HAMT 是可能的,但由于 popcnt 一次处理 32 或 64 位而速度较慢。
【问题讨论】:
-
它不会回答你的直接问题,但我建议阅读Purely Functional Data Structures。
标签: clojure couchdb immutability b-tree