Ch10 hash-based indexing(筆記)

筆記:

1、靜態哈希:與ISAM一樣存在長溢出鏈的問題
不支持範圍搜索
主要問題:桶數量固定
解決:週期性地重哈希(花費時間,重哈希時索引不能被使用)、動態哈希
2、可擴展哈希 
插入新的數據條目時,重新整理文件
使用指向存儲桶的指針目錄,並通過僅將目錄加倍並僅拆分溢出的存儲桶來使存儲桶數量增加一倍
3、線性哈希
不需要目錄,可以自然地處理衝突
但如果數據分佈不均,則溢出鏈可能會導致線性哈希性能比可擴展哈希性能差

Review:

·基於哈希的索引旨在用於等值查詢。 哈希函數應用於搜索字段值,並返回存儲區編號。 桶號對應於磁盤上包含所有可能相關記錄的頁面。 靜態哈希索引具有固定數量的主存儲桶。 在插入期間,如果用於數據輸入的主存儲桶已滿,則會分配一個溢出頁面並將其鏈接到主存儲桶。 桶中的溢出頁面列表稱爲其溢出鏈。 在沒有溢出鏈的情況下,靜態哈希可以通過單個磁盤I / O來回答相等性查詢。 但是,隨着文件的增長,靜態哈希會受到較長的溢出鏈的影響,並且性能會下降。 (第10.1節)
·可擴展哈希是一種動態索引結構,它通過以目錄形式引入間接級別來擴展靜態哈希。 通常,目錄的大小爲2^d,這稱爲索引的全局深度。 通過查看哈希函數結果的前d位,可以找到正確的目錄條目。 目錄條目指向磁盤上包含實際數據條目的頁面。 如果頁面已滿,並且有新的數據條目落入該頁面,則根據哈希值的前l位重新分配整個頁面中的數據條目。 值l稱爲頁面的局部深度。 如果數據分佈不正確,目錄可能會變大。 衝突是具有相同哈希值的數據條目,必須特別處理。 (第10.2節)
·“線性哈希”通過以循環方式拆分存儲桶來避免目錄。線性散列處理是逐輪進行的。在每個回合開始時,都有一組初始的桶。插入會觸發存儲桶拆分,但是存儲桶將按順序順序拆分。需要溢出頁面,但是溢出鏈不太可能很長,因爲每個存儲桶將在某個時刻被拆分。在每個回合中,使用兩個哈希函數h(Level)和h(Level + 1),其中h(Level)用於查找尚未拆分的存儲桶,而h(Level + 1)用於查找已拆分的存儲桶。當所有初始存儲桶均拆分後,當前輪結束,下一輪開始。 (第10.3節)
·可擴展和線性散列密切相關。線性散列通過具有預定義的存儲桶順序來避免目錄結構。線性散列相對於可擴展散列的缺點是空間利用率可能較低,尤其是對於偏斜的分佈,這是因爲存儲區拆分不像可擴展散列中那樣集中在數據密度最高的位置。基於目錄的線性散列實現可以提高空間佔用率,但是在極端情況下,它仍然可能不如可擴展散列。 (第10.4節)

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