項目簡介:
以B+樹爲索引的基於隨機投影技術的高維近似最近鄰查詢
(1) 關於c-ANN:
(2) 關於Medrank:
(3) 關於數據集:
階段簡介:
B+樹節點:
幾個問題:
1.爲什麼不用哈希索引?
哈希索引與B樹索引檢索的原理:
hash相當於把key通過hash函數計算,得到key的hash值,再用這個hash值做指針,查找hash表中是否存在key,如果存在就返回 key所對應的value,選定一個好的hash函數很重要,好的hash函數可以使計算出的hash值分佈均勻,降低衝突,只有衝突減小了,纔會降低 hash表的查找時間。
b-tree完全基於key的比較,和二叉樹相同的道理,相當於建個排序後的數據集,使用二分法查找算法,實際上也非常快,而且受數據量增長影響非常小。
比較:Hash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像B-Tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的IO訪問,所以 Hash 索引的查詢效率要遠高於 B-Tree 索引。但是,Hash索引僅僅能滿足”=”,”IN”和”<=>”查詢,不能使用範圍查詢
2.其他高維最近鄰查詢算法:
位置敏感的哈希LSH:相似數據高概率哈希到相同的衝突桶,不相似的數據幾乎不被哈希到相同的桶中;對於查詢,用一組相同的哈希函數把查詢哈希到桶空間,把衝突桶數據對象作爲最近鄰候選。
相似性查詢:把數據對象轉成二進制編碼,在海明空間內進行距離計算
項目源碼:https://github.com/cajet/SYSU_DB/tree/master/src/homework%203