我最近一直在研究B +树和T树。似乎有一种趋势,即B +树用于磁盘索引,T树用于内存。
我认为这是由于磁盘I / O,但我无法找到确认这一概念的任何内容。我在这个假设中是否正确?
另外,如果T树的磁盘访问可以通过缓存限制为log B,那么它们在logB N时的性能是否超过B +树?
答案 0 :(得分:1)
T-Tree本质上是一棵二叉树。因此,树深度类似于T树的log2(N / B)与B +树的logB(N)(N =#数据项,B =每个节点中存储的密钥数= B的分支因子) +树)。这些是近似值,因为每个节点中的树都没有固定数量的项目。无论如何,对于大N,B + Tree将轻松赢得该指标。在统一内存访问的假设下,这个数字并不重要,但它在二级存储上确实很重要,它大致是二级存储访问的数量。它也适用于具有分层内存的现代机器(在Vax 11/750上测试的原始T-Tree纸张)。
我在上面假设你如何更新各个环境的结构。我相信它们是对称和公平的。主要是我假设数据和密钥通过引用存储在内存中,并通过副本存储上的副本存储。未能以这种方式调整结构对于T树来说将是灾难性的,因为每个密钥比较都需要外部访问,因此T树具有统一的访问成本作为其设计的核心。对于非固定大小的数据,在这两种情况下都需要进行一些其他的打包调整(并在现实世界中使用)。