Doris索引机制全解析,怎样用高效索引加快数据分析

[复制链接]
发表于 2025-9-19 06:28:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在当今大数据期间,企业对于实时数据分析的需求出现爆发式增长。面临动辄PB级的数据量和秒级响应的业务诉求,传统数据库体系每每力有未逮。Apache Doris作为新一代MPP分析型数据库,依附其独特的索引机制,在京东、美团等企业的实时数仓场景中显现出杰出性能。本文将深入解析Doris索引计划的精妙之处。
与传统的OLTP数据库差异,Doris作为OLAP体系面临着完全差异的寻衅:海量数据(单表千亿级)、复杂查询(多表Join+聚合)、实时响应(亚秒级耽误)。在这种场景下,Doris选择了多条理互补型索引体系,通过差异粒度的索引配合,在存储空间(仅增长5%-10%)和查询服从之间找到完善均衡点。
其焦点计划原则可概括为:

  • 智能路由:通过元数据快速定位数据块
  • 分层过滤:从分区级到列级的递进式筛选
  • 盘算下推:在存储层完成最大限度的过滤
Doris 索引分类

前缀希罕索引

Apache Doris 数据库存储在雷同 SSTable 的数据结构中,SSTable 是一种有序的数据结构,可以按照指定的一个或多个列举行排序存储。在查询时加上排序列,Doris 不必要扫描全表即可快速找到必要处理处罚的数据,降低搜刮复杂度。
除了排序健,Doris 还会每隔 1024 行数据创建一个希罕前缀索引,索引中的 Key 是当前 1024 行中第一行中排序列的值。和传统数据库的单列或多列索引差异,Doris 将表数据的前序列字段构成前缀索引,最大长度不高出 36 字节。比如在以下的表结构中,前缀索引中生存的数据为:user_id(8 Bytes) + age(4 Bytes) + message(prefix 20 Bytes)。
ColumnNameTypeuser_idBIGINTageINTmessageVARCHAR(100)max_dwell_timeDATETIMEmin_dwell_timeDATETIME这里必要留意的是,前缀索引遇到 VARCHAR 范例会主动截断,纵然没有到达 36 个字节。以是在计划前缀索引时,假如不是特殊需求,不发起将 VARCHAR 字段放在最前面。
在查找前缀索引表时可以通过索引确定该行数据所在的逻辑数据块的起始行号,由于前缀索引比力小,可以全量缓存在内存中,快速定位数据块,提拔查询服从。
倒排索引

倒排索引将文天职成一个个词,构建词->文档编号的索引,Table 的一行对应一个文档、一列对应文档中的一个字段。对创建了倒排索引的列,创建每个值到对应行号聚集的倒排表。
倒排索引的使用范围很广泛,可以加快等值、范围、全文检索等多种范例的操纵。一个表可以有多个倒排索引,查询时多个倒排索引的条件可以恣意组合。对于等值查询,先从倒排表中查到行号聚集,然后直接读取对应行的数据,而不消逐行扫描匹配数据,从而淘汰 I/O 加快查询。
创建倒排索引时可以通过 PROPERTIES 参数指定分词器和分词模式,满足更加个性化的需求。
BloomFileter 索引

BloomFilter 索引是基于 BloomFilter 的一种跳数索引,原理是使用 BloomFilter 跳过等值查询指定条件不满足的数据块,到达淘汰 I/O、加快查询的目的。通常应用在一些必要快速判定某个元素是否属于聚集,但并不严格要求 100%准确的场合。
BloomFilter 是由 Bloom 在 1970 年提出的一种多哈希函数映射的快速查找算法,由一个超长的二进制位数组和一系列的哈希函数构成。二进制位数组初始全部为 0,当给定一个待查询的元素时,这个元素会被一系列哈希函数盘算映射出一系列的值,全部的值在位数组的偏移量处理为 1。

Doris BloomFilter 索引以数据块(page)为单元构建,每个数据块存储一个 BloomFilter。写入时,对于数据块中的每个值,颠末 Hash 存入数据块对应的 BloomFilter。查询时,根据等值条件的值,判定每个数据块对应的 BloomFilter 是否包罗这个值,不包罗则跳过对应的数据块不读取,到达淘汰 I/O 查询加快的目的。
ZoneMap 索引

ZoneMap 索引主动维护每一列的统计信息,为每一个数据文件和数据块记录最大值、最小值以及是否包罗 NULL 值。对于等值查询、范围查询、IS NULL,可以通过最大值、最小值、是否有 NULL 来判定数据文件和数据块是否可以包罗满足条件的数据,假如没有则跳过不读对应的文件或数据块淘汰 I/O 加快查询。
前缀索引和 ZoneMap 索引是 Apache Doris 主动维护的内建智能索引,无需用户管理。
索引特性总结

末了为了各人学习的方便,将各种索引的优缺点汇总如下。
范例索引优点范围点查索引前缀索引内置索引,性能最好一个表只有一组前缀索引点查索引倒排索引支持分词和关键词匹配,恣意列可建索引,多条件组合,连续增长函数加快索引存储空间较大,与原始数据相当跳数索引ZoneMap 索引内置索引,索引存储空间小支持的查询范例少,只支持即是、范围跳数索引BloomFilter 索引比 ZoneMap 更风雅,索引空间中等支持的查询范例少,只支持即是跳数索引NGram BloomFilter 索引支持 LIKE 加快,索引空间中等支持的查询范例少,只支持 LIKE 加快
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表