项目简介:
以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