线性Hashing也用一个动态的Hash表,但是他与可扩展Hashing有很大不同。和可扩展Hashing相比,当线性Hashing的一个节点分裂的时候,Hash表以预先定义好的线性顺序线性增长。以一种可控制的方式分裂一个节点和扩展目录比可扩展Hashing那种没有控制的分裂要有几个优点:
(1)桶是顺序排列的,桶的地址可以通过一个基地址计算出来,目录不必要。
(2)触发一个节点分裂的事件是基于存储空间的利用,这样对一些给定的元素,可以保持存储花费不变。
改进的线性Hashing比上面介绍的几种更适合于内存。通过用较大的相邻的节点而不是用一个目录,普通的线性Hashing有空节点(当一个节点对应的Hash入口没有数据项的时候)因而浪费空间,除非有一种聪明策略:用底层的虚拟内存映射机制计算出那些当目录增长时不得不拷贝到一个较大内存块的连续节点。改进的线性Hashing用一个很像可扩展Hashing的目录,但是他是线性增长的,而且每个节点只有一条数据,共同从一个内存池里分配内存。分裂的标准是基于性能而不是存储利用率,例如Hash链的平均长度。监视Hash链的平均长度比监视存储利用率在平均搜索花费和更新次数上提供了更直接的控制。
T树,一种新的数据结构,他是由AVL树和B树 发展而来的。T树是在一个节点有很多元素的二*树,如图3所示,T树的一个节点叫做T节点如图4所示。由于T树是二*树,他保持了AVL树的内在的二分搜索的特征,而且,因为T节点包含了很多元素,T树有比较良好的更新和存储特性。对于插入和删除需要数据移动,通常只需要在单个节点内。用类似AVL树的旋转来重新平衡T树,但是他比AVL树次数要少,因为他存在数据移动在一个节点内部的可能性。现在,大部分内存数据库系统都采用T树作为其索引结构。



[
本帖最后由 tom_111 于 2007-12-5 10:05 编辑 ]