一、基本概念
索引相信大家多多少少都接触过,索引的目的说白了就是加快数据的检索、排序和计算等,尤其是对于海量数据的快速检索,索引起到了至关重要的作用。大家都知道,我们基于传统数据库开发经常会遇到一个问题,就是这个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(列存储位置),再进行过滤、统计、聚合最终返回结果,大致的流程也差不多。
最后总结一下,索引技术之于大数据即时计算,除了大幅加快数据的检索速度还显著减少查询中分组、统计,大幅提升系统的性能和响应时间。据了解,腾讯和百度等互联网公司也在积极研发基于大数据索引技术的分析型数据库,所以索引技术也是大数据时代的利器。
相关推荐
而NoSQL数据库如MongoDB、Cassandra则采用文档型、键值对或图数据模型,适合大数据和分布式环境。 2. **数据库管理系统(DBMS)**:选择合适的DBMS至关重要,商业源码可能包含Oracle、SQL Server、IBM DB2这样的...
- **解决方案**:优化数据处理流程,合理分配计算资源,采用高效的数据索引技术,以及利用并行处理技术加速数据处理速度。 4. **安全风险**: - **解决方案**:实施严格的数据加密措施,设置访问权限控制,以及...
大数据技术在当今的信息时代扮演着至关重要的角色,特别是在企业面试中,掌握这些技能是求职者必备的素养。本篇将详细解析深圳校区大数据技术面试中涉及的知识点,帮助你更好地准备面试。 1. **Java 多态与继承**:...
以上六篇论文详细阐述了Google在分布式计算领域的创新理念和技术实践,对于理解大数据处理的原理和优化方法,以及开发类似系统的工程师来说,具有极高的学习价值。通过对这些论文的深入研究,我们可以掌握如何构建可...
虽然代码示例看起来与音乐识别软件的实际功能没有直接联系(它更像是一个驱动程序的一部分),但我们可以从标题、描述及标签出发,展开对音乐识别软件背后所涉及的大数据技术和原理进行详细的解释。 ### 音乐识别...
数据管理层负责数据的存储和管理,采样引擎层则根据统计学原理生成采样子集,查询处理层对采样结果进行计算,用户接口层提供友好的交互界面。 2.2 性能优化 为了提高系统性能,可以采用并行计算、缓存机制、索引...
本书全面解析了大规模分布式存储系统的原理,并结合实际案例提供了架构设计和实战经验,对于理解分布式存储的内在机制及其在大数据时代的重要性具有极大的帮助。 分布式存储系统是现代互联网和云计算基础设施的核心...
本文将深入探讨“内容搜索小程序”的相关知识点,旨在帮助读者理解其核心原理、技术和应用场景。 首先,我们要明确内容搜索小程序的核心功能——即在大量数据中进行信息检索。这通常涉及到文本分析、自然语言处理...
7. **实时搜索**:为了提供即时反馈,可能需要引入内存数据库如Redis,或者使用近实时搜索技术,如Elasticsearch。 8. **性能优化**:包括索引优化、查询效率提升、缓存策略等,这些都需要深入理解C#的性能特性和...
在电信行业中,信息搜索方法和设备扮演着至关重要的角色,特别是在大数据时代,高效的信息检索能够极大地提升工作效率和服务质量。本文将深入探讨标题为"电信设备-一种信息搜索方法和设备"的相关知识点,主要关注...
谷歌引擎源码涉及了大量的技术领域,包括但不限于信息检索、分布式计算、数据存储、网络爬虫、索引构建、查询处理、算法优化等。在这个主题中,我们将探讨其中的一些关键知识点。 1. **信息检索**:谷歌搜索引擎的...
11. **移动通信**:基于P2P网络模型的即时通讯软件,需要理解P2P原理、Socket编程和消息传递机制。 12. **搜索引擎技术**:基于Ajax+Lucene构建的搜索引擎,涉及到搜索算法、索引构建和全文检索。 13. **云计算与...
描述中提到了“即刻搜索”,这可能是指一种即时、高效的搜索引擎技术,它利用Hadoop的强大处理能力,实现了对海量数据的快速索引和检索。何鹏,可能是这场演讲的主讲人,他可能深入讨论了如何利用Hadoop优化搜索算法...
8. **大数据与数据湖**:大数据时代,Hadoop和Spark等技术允许在数据仓库之外构建数据湖,存储非结构化和半结构化数据,实现更全面的数据分析。 9. **实时数据仓库**:如Apache Kafka、Flink等流处理技术的出现,...
9. **大数据与数据仓库**:随着大数据的崛起,Hadoop和Spark等分布式计算框架被引入数据仓库,以处理PB级以上的数据。 10. **云数据仓库**:AWS的Redshift、Google BigQuery和Azure Synapse Analytics等云服务提供...
- 利用分布式计算技术处理大数据,并使用高效的数据压缩和索引技术优化性能。 - 采用多目标优化算法,同时考虑推荐的准确性和多样性。 - 设计灵活的推荐系统架构,整合实时分析和长期分析方法。 总结而言,智能且...
在大数据时代,海量的日志数据和监控指标成为了分析问题、优化服务的关键。Elasticsearch 提供了一种集中存储和分析这些数据的有效途径。例如,在服务器集群中,每个节点产生的日志文件可以被统一收集并存储到 ...