一、基本概念
索引相信大家多多少少都接触过,索引的目的说白了就是加快数据的检索、排序和计算等,尤其是对于海量数据的快速检索,索引起到了至关重要的作用。大家都知道,我们基于传统数据库开发经常会遇到一个问题,就是这个SQL查询变慢,是不是索引没加?数据库的索引好比一本书前面的目录,如果明确知道按哪个字段来进行索引查找,查询效率还是挺高的,数据库的索引实际上是一个单独的、物理的数据库结构, 它是某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单,但是大家一定要注意,并不是所有的数据库索引都能提升查询性能,毕竟传统数据库主要还是面向事务的,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,而创建索引和维护索引却要耗费时间,这种时间随着数据量的增加而增加,并且每一个索引还需要占用存储空间,所以事务型关系数据库经常会考虑平衡修改性能和查询性能,灵活度受限,甚至需要专门的DBA来进行REVIEW。而对于数据仓库的应用来说主要还是以读为主,而对于查询条件的灵活度以及查询响应结果的速度要求还是蛮高的,特别是对于OLAP应用,查询条件维度灵活组合,另外还经常有类似于LIKE这样的模糊查询,大家可以想象一下,这在关系数据库在面临海量数据检索时是很难进行支撑,光是索引也还是很难建的。所以现在大家对于大数据场景下的检索一定会想到LUCENE,关于LUCENE的技术知识,这里就不展开多讲,ATA就有很多文章介绍,我这里主要摘出LUCENE索引的两个重要的概念:
1、倒排索引:
又称反向索引,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。倒排索引由词典和倒排表组成,字典是由索引词组成的索引表,而倒排表则由每个索引词出现过的文档集合,以及命中位置等信息组成的记录表。如图所示:
在处理复杂的多关键字查询时,可在倒排表中先完成查询的交、并等逻辑运算,得到结果后再对记录进行存取。这样不必对每个记录随机存取,把对记录的查询转换为地址集合的运算,从而提高查找速度!
2、正排索引:
也称前向索引,主要由正排表组成,正排表中每条记录表示一个文档的属性集合,以文档ID 为主键,表中每个记录的索引字段记录了文档的每个属性字段的值。正排表/属性(Attribute) 主要用来进行过滤,统计,rank/排序.在一次查询中,倒排表集合运算后的文档集合中的每个文档后续都需要访问其相应的正排表/属性(Attribute)数据,来进行过滤,统计,算分,排序等,所以正排表/属性(Attribute)访问速度需要非常快,通常需要常驻内存。
二、索引对于大数据即时分析型数据库的好处
- 倒排索引对于大数据检索的支持非常灵活和高效,基于倒排索引的过滤不需要进行大量的IO扫描(用于sql的 where过滤)。
- 可以利用倒排表的词频统计信息,快速用于求COUNT查询,百亿数据10台机器百毫秒级别响应。
- 倒排索引容易压缩,特别对于重复值比较多的情况下,压缩程度非常高,极大减少IO,另外倒排表本身采用了delta存储,比如说第一个值为 xiaogu12353,第二个值为xiaogu12354,那么仅仅存储他们的差异即可。
- 正排索引技术可以很方便实现对于GROUPBY的字段进行编号,比如按国家名称来统计PV,可以将国家全称的长文本信息统一编号为int型数值代号,将极大节省IO。
三、索引技术在大数据即时计算中的运用
上段基本描述了索引至于大数据即时计算带来了诸多的好处,那么实际索引技术又是在大数据即时计算哪些技术环节进行了使用?我总结了下HIGO和GARUDA(有些YY),大体都是这样一个基本流程:
HIGO本身是基于lucene和Solr开发,所以在数据检索和统计上完全依赖于Lucene的倒排索引和正排索引,用户输入一个term(词),通过倒排索引快速获取docIdList,然后通过正排索引获取docId->Field文件存储的位置,具体是fdt和fdx文件,出于性能考虑,很多Field的值都以FieldValueCache的形式载入到内存里进行统计计算,缓存的构造也充分利用索引文件可压缩可转编码转换处理的特性,极大节省了存储容量和IO。GARUDA目前也自己实现了一套倒排索引和正排索引,大概计算流程如下图所示:
从上图可以看到通过倒排索引可以找到term->rowIds,再从正排找到rowId->columns(列存储位置),再进行过滤、统计、聚合最终返回结果,大致的流程也差不多。
最后总结一下,索引技术之于大数据即时计算,除了大幅加快数据的检索速度还显著减少查询中分组、统计,大幅提升系统的性能和响应时间。据了解,腾讯和百度等互联网公司也在积极研发基于大数据索引技术的分析型数据库,所以索引技术也是大数据时代的利器。
相关推荐
【目录】 FirteX介绍 已有平台介绍 Lucene、Lemur等 FriteX的架构 FirteX的具体实现 索引、索引存储和检索 FirteX VS Lucene&Lemur 结论和进一步工作
大数据-算法
所谓大数据,狭义上可以定义为:用现有的一般技术难以管理的大量数据的集合。 对大量数据进行分析,并从中获得有用观点,这种做法在一部分研究机构和大企业中,过去就已经存在了。现在的大数据和过去相比,主要有...
1 大数据概念和应用领域 ...基于客户行为分析的产品推荐、基于数据分析的广告投放、基于客户异常行为的客户流失预测、基于环境数据的外部形势分析、基于数据分析的产品定价等等。 By 厦门大学数据库实验室 - 林子雨
大数据经典书 带索引 高清 pdf 很多经典案例
面向大数据的索引结构研究进展.docx
大数据-算法
大数据-算法
大数据-算法
基于大数据的推荐算法研究 大数据应用-基于大数据的推荐算法研究全文共35页,当前为第1页。 论文框架 2 TopKS算法 3 基于项目层次结构相似性的推荐算法 4 矩阵分解并行化 5 总结与展望 1 课题背景与研究意义 大数据...
MySQL SQL高级特性 字段约束-索引-视图-外键学习实践,很不错
MySQL高级特性字段约束-索引-视图-外键学习实践PDF文档;
大数据实验报告Hadoop编程实现InvertedIndex文档倒排索引程序附源码.doc
山东大学大数据课程的实验二。基于hadoop集群系统(也可以在伪分布式系统上运行)系统使用Java编写的倒排索引实现,具有使用停词表功能,使用正则表达式选择规范的单词。代码重构了setup(),map(),combiner(),...
天轰穿系列教程之-26类-索引指示器天轰穿系列教程之-26类-索引指示器天轰穿系列教程之-26类-索引指示器天轰穿系列教程之-26类-索引指示器天轰穿系列教程之-26类-索引指示器天轰穿系列教程之-26类-索引指示器天轰穿...
大数据-算法
大数据时代索引与数据库技术的发展与创新,是一篇关于大数据发展背景和当前发展状况的综述文章。
大数据之路 阿里巴巴带索引
文档的一大亮点是其对大数据平台性能优化的探讨,包括数据索引优化、查询优化、资源调度优化等方面。作者还分享了在面对高并发和数据洪流时,如何保持系统稳定性和扩展性的经验和策略。最后,文档总结了大数据平台在...
我们的目标是为大数据(您知道,对于孩子)创建世界上最快的可扩展,非事务性时间序列数据库! 日志文件索引是我们最初的重点。 例如,仅附加由Log4J之类的库产生的或包含FIX消息或JSON对象的ASCII文件。 占领是由一...