T树或B树

时间:2016-10-20 09:33:14

标签: algorithm data-structures tree b-tree in-memory-database

this paper中描述了T树算法 而T * -Tree是对T树的改进,可以更好地使用查询操作,包括范围查询,并且包含T树的所有其他优点。
本文描述了该算法" T * -tree:实时应用的主存储器数据库索引结构"。
根据这篇研究论文,当数据集适合内存时,T-Tree比B-tree / B +树更快。 我实现了这些论文中描述的T-Tree / T * Tree,并将性能与B-tree / B +树进行了比较,但B-tree / B + tree在所有测试用例中都比T-Tree / T * Tree表现更好(插入,删除,搜索)。
我读到T-Tree是内存数据库的高效索引结构,它由Oracle TimesTen使用。但我的结果并未表明这一点 如果有人知道原因或对此有任何评论,那么听到她(或他)的消息会很棒。

1 个答案:

答案 0 :(得分:2)

T-Trees不是与AVL树或B树相同意义上的基本数据结构。它们只是平衡二叉树的黑客版本,因此可能会或可能不会是利基应用,它们提供了不错的性能。

在这个时代,他们必然会因为地理位置不佳而受到严重影响,无论是在预期的阻止/页面传输数量还是在缓存局部意义上。后者是显而易见的,因为在搜索的所有节点访问中,除了最后一个之外,只会根据搜索关键字检查边界值 - 所有其余的都被分页或缓存为零。

将此与B树的优秀访问位置进行比较,尤其是B +树(更不用说缓存遗忘和缓存意识版本,这些版本明确地设计了记忆性能特性)。

重新平衡存在类似的问题。在B树世界中,已经开发并完善了许多变化 - 从B +和Blink开始 - 以实现期望的分摊的性能特征,包括诸如并发(锁定/锁存)或其缺失的方面。因此,大多数情况下,您可以简单地走出去找到适合您的性能配置文件的B树变体 - 或者使用简单的经典B +树并确保获得不错的结果。

T-trees比同类B-tree更复杂,似乎它们在性能方面一般没有提供任何东西,因为商品硬件的单级时间记忆“等级”已经消失了几十年。不仅硬盘是新内存,反过来也是如此,主内存现在是新硬盘。即即使没有NUMA,将数据从主存储器带入高速缓存层次结构的成本也很高,以至于最小化页面传输 - 这正是B树及其变体所做的事情,而T树则不然。更靠近处理器核心的是重要的高速缓存行访问/传输的数量,但图片保持不变。

事实上,如果你采用二进制搜索的想法 - 这是可以证明是最佳的 - 并考虑以一种与内存层次结构(缓存)良好配合的方式排列搜索键的方法,那么你总是会得到一些看起来很像的东西不可思议地像B树......

如果您为性能编程,那么您会发现获胜者几乎总是位于排序数组,B树和散列之间的三角形中的某个位置。即使是平衡的二叉树,只有在其他考虑因素相对较差的性能退居次要且关键数量相当小,即不超过几百万时,才具有竞争力。