數據庫可擴展散列索引

數據庫中可擴展散列索引

可擴展散列索引

  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桶對應的存儲塊上標不變。具體如下圖:在這裏插入圖片描述
後續的操作便如上述插入進行操作即可,我就不在這裏贅述了,相信各位聰明的寶寶已經學會了如何操作。

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