开发者社区> 范大脚脚> 正文

索引设计的几个常用算法

简介:
+关注继续查看

B+、B- Tree(mysql,oracle,mongodb)

主要用在关系数据库的索引中,如oracle,mysql innodb;mongodb中的索引也是B-树实现的;还有HBase中HFile中的DataBlock的索引等等。

动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。

但是咱们有面对这样一个实际问题:就是大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下,那么如何减少树的深度(当然是不能减少查询的数据量),一个基本的想法就是:采用多叉树结构(由于树节点元素数量是有限的,自然该节点的子树数量也就是有限的)。

也就是说,因为磁盘的操作费时费资源,如果过于频繁的多次查找势必效率低下。那么如何提高效率,即如何避免磁盘过于频繁的多次查找呢?根据磁盘查找存取的次数往往由树的高度所决定,所以,只要我们通过某种较好的树结构减少树的结构尽量减少树的高度,那么是不是便能有效减少磁盘查找存取的次数呢?那这种有效的树结构是一种怎样的树呢?

这样我们就提出了一个新的查找树结构——多路查找树。根据平衡二叉树的启发,自然就想到平衡多路查找树结构,也就是B-tree,即B树结构,B树的各种操作能使B树保持较低的高度,从而达到有效避免磁盘过于频繁的查找存取操作,从而有效提高查找效率。

Hash表+桶(redis)

mysql中的adaptive hash index,redis中的数据存储实现都是采用hash,可以高效的进行数据的查询。

 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

哈希表的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。
而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位

数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。综合两者特性,设计一种寻址容易,插入删除也容易的数据结构,如拉链法实现的哈希表。

Booleam Filter(HBase)

HBase中的rowkey设置建立Booleam Filter映射,用于快速判断rowkey是否在一个HFile中。在分布式数据库中用的比较多。

基于BitMap的存储结构,采用的是哈希函数的方法,将一个元素映射到一个 m 长度的阵列上的一个点,当这个点是 1 时,那么这个元素在集合内,反之则不在集合内。

这个方法的缺点就是当检测的元素量很多时候可能有冲突,解决方法就是使用 k 个哈希 函数对应 k 个点,如果所有点都是 1 的话,那么元素在集合内,如果有 0 的话,元素则不再集合内。

 


本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/3723899.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
数组中涉及到的常见算法
数组中涉及到的常见算法
13 0
大数据开发基础的数据结构和算法的基本算法的排序
在大数据开发中,排序算法是一种基础算法。它用于对数据集合中的元素进行排序,以便更方便地进行搜索、查找、统计等操作。排序算法可以分为内部排序和外部排序两种类型。
12 0
大数据开发基础的数据结构和算法的算法思想的枚举
在大数据开发中,枚举算法是一种基础算法思想。它通常用于解决简单问题的求解和实现,通过枚举所有可能的情况并比较其结果,来找到最终的答案。
16 0
大数据开发基础的数据结构和算法的基本算法的查找
在大数据开发中,查找算法是一种基础算法。它用于从一个数据集合中查找特定的值或元素,并返回相应的位置或指针。查找算法通常被分为两类:线性查找和二分查找。
13 0
【21天算法学习】索引查找
【21天算法学习】索引查找
10 0
【基础算法】哈希表(拉链法)
【基础算法】哈希表(拉链法)
87 0
攻克数据结构和算法——第六天:排序
若关键字是主关键字(关键字值不重复),这无论采用何种排序方法,排出的结果都是唯一的;若关键字是次关键字(关键字值可以重复),则排出的结果可能不唯一。
38 0
常用查询算法(倒排索引算法)|学习笔记
快速学习常用查询算法(倒排索引算法)
109 0
【基础算法训练】—— 哈希表
【基础算法训练】—— 哈希表
45 0
深究索引:Mysql索引模型及其不同结构优劣势
深究索引:Mysql索引模型及其不同结构优劣势
49 0
+关注
范大脚脚
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
面向索引、模型、检索联合优化的下一代推荐技术
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载