数据库可扩展散列索引

数据库中可扩展散列索引

可扩展散列索引

  1. 为桶引入一间接层,即用一个指向块的指针数组来表示桶,而不是用数据块本身组成的数组来表示桶
  2. 指针数组能增长,其长度总是2的幂。因而数组每增长一次,桶的数目就翻倍。不过,并非每个桶都有一个数据块;如果某些桶中的所有记录可以放在一个块中,则这些桶可能共享一个块。
  3. 散列函数h为每个键计算出一个K位二进制序列,该K足够大,比如32。但是桶的数目总是使用从序列第一位或最后一位算起的若干位,此位数小于K,比如说i位。也就是说,当i是使用的位数时,桶数组将有2i个项。

具体操作方法

基本思想示例
在这里插入图片描述
例子:Suppose that we are using extendable hashing on a file that contains records with the following search-key values:24, 29, 2, 17,5, 19,3, 18, 7, 11, 37,15,23, 31。
Show the extendable hash structure for this file if the hash function is h(x) = x mod 16 and buckets can hold three records.
分析:题目中告知桶可存键值的大小为3,散列函数h(x)=x mod 16,16=2^4,即k=4(可变桶的最大位数)。
操作:求所有键值的二进制码。
24(11000),29(11101),2(10),17(10001),5(101),19(10011),3(11),18(10010),7(111),11(1011),37(100101),15(1111),23(10111),31(11111)。
根据以上二进制码,大家可以看到二进制码的长度不一致,所以以最大长度为准。
24(011000),29(011101),2(000010),17(010001),5(000101),19(010011),3(000011),18(00010),7(000111),11(001011),37(100101),15(001111),23(010111),31(011111)。
此时进行存储:i=1,每次存储时,都观察二进制的前i位,按照顺序依次插入二进制码,具体如下图
在这里插入图片描述
因为题目中告知桶的大小为3,所以当一个存储块中存够3个键值之后,如果还需存入数据,则需进行扩展散列桶,此时i=2;具体如下图:
在这里插入图片描述
如上图,接下来需在01对应的桶中插入19(010011),所以进行扩展散列桶,此时i=3,又因为00对应的桶中并没有存满,所以00桶对应的存储块上标不变。具体如下图:在这里插入图片描述
后续的操作便如上述插入进行操作即可,我就不在这里赘述了,相信各位聪明的宝宝已经学会了如何操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章