高并发点查
对于列存格式引擎,如果需要获取整行/多行数据,且并发量比较高的情况,列存引擎的效率与性能就会比较低。
行存
支持按行存储数据
短路径查询
对于主键的点查,支持走短路径查询,减少RPC
PreparedStatement
预编译缓存数据
索引
在 Doris 中,数据被组织成一个个 segment,这是数据写入和查询的基本单元。每个 segment 包含了数据页(Data Page),而数据页是数据读取的最小单元。当数据写入时,Doris 会为每个 page 生成 索引(前缀索引、Ordinal索引、ZoneMap索引等),在Page中会维护大量的索引相关信息。正是得益于这种存储文件格式的设计,Doris将生成索引的关键信息存储到Page文件中。
前缀索引
前缀索引会对每一个索引间隔的第一个数据行的前缀进行索引。基于稀疏索引与数据有序性的设计,只记录了索引间隔的第一个数据行的前缀,而不是所有数据行的前缀。粗粒度的定位到key可能的范围,然后用二分查找算法精确地定位到key的位置。
Ordinal 索引
Ordinal 索引是一种行号的稀疏索引,记录了各 page 中第一条记录的行号以及对应的 page 偏移和大小。也是一种稀疏索引。对于那些只需要按行号进行查询的场景来说,可以大大提高查询效率。
ZoneMap索引
主要用于加速范围查询(Range Query)和等值查询(Equal Query);其设计原理是建立数据分区与查询条件之间的映射关系(类似map),以便快速定位到满足查询条件的数据所在的位置。
Bitmap索引
Bitmap 索引是一种基于位图(Bitmap)的数据结构,用于表示一个列中所有可能的值。 Bitmap索引由两部分组成:
1.有序字典:有序保存一列中所有的不同取值。2.字典值的Roaring位图:保存有序字典中每一个取值的Roaring位图,表示字典值在列中的行号。
Bloom Filter 索引
一种基于布隆过滤器(Bloom Filter)的数据结构,用于测试一个元素是否在一个集合中;主要用于加速全文检索和模糊查询等类型的查询。
NGram Bloom Filter索引
基于 N-gram 和布隆过滤器(Bloom Filter)的数据结构,用于加速文本搜索和模糊查询等类型的查询,优化了like查询的性能。
倒排索引
支持倒排索引,可以用来进行文本类型的全文检索、普通数值日期类型的等值范围查询,快速从海量数据中过滤出满足条件的行。
分布式数据JOIN聚合
由于数据是分布式存储,因此多表join查询时,就需要考虑数据从多个远程节点查询并聚合在一起,因此需要合理的join模式。
Shuffle
分布式环境中,数据传输的模式。主要的目标是最小化、最快捷的传输节点的数据。目前支持四种Shuffle方式。
Runtime Filter
Runtime Filter技术与谓词下推等技术,一般是结合的。两者的目的都是为了提前将Probe端的不必要的数据过滤掉,减少数据传输与数据读取。
JoinReorder
在执行SQL查询时,reorder多个表join的顺序。其主要的目的是减少数据传输与数据读取的量级;其实现方式可以理解为寻找最短/优路径的过程,一般有两种实现方式:动态规划/贪心算法;基于规则策略。
数据倾斜
Doris中,数据分布、集群负载不均匀,导致系统的性能与稳定性不好。得益于Doris良好的架构设计,支持多种方式解决数据倾斜。
分区/分桶
支持动态分区、分桶,调整数据的分布。
副本
支持多副本以及设置分区策略,尽量均衡的分摊存储数据
负载均衡
FE层支持负载均衡,分摊请求。
存储结构
BE层的存储设计类似LSM-Tree,决定了其插入,检索的高效性。
LSM-Tree
基于LSM-Tree数据结构的思想设计存储层。其原理是把各种数据先用log等形式组织在内存中(该数据结构称为MemTable,且有序);到达一定数据量后再批量merge写入磁盘(该数据结构称为SSTable);为压缩存储,会通过归并排序合并压缩SSTable。LSM主要是利用顺序写要比随机写更快速高效的原理,加上归并排序,合并压缩文件,提供更高效的数据存储与查询支持。
查询引擎与执行计划
查询优化器基于Apache Impala改造实现的。其包含词法语法解析、语义解析、query改写、生成执行计划等多个流程。
分布式数据查询
FE层与BE层的分离架构,在分布式场景中,决定了其路由寻址的高效性。FE作为前端,会将BE的数据信息(比如数据所属的节点等)写入元数据。依托这些信息,以及探活机制,数据在请求时,首先会在FE层读取到元数据信息,再可用的BE节点中选择一个,最后查询BE数据。
数据模型
简述:数据模型是一个核心概念,它定义了数据在 Doris 中的存储方式、数据结构和数据操作的行为。数据模型决定了数据如何被组织、查询和聚合,以及如何支持不同的分析场景。 Doris整合了Google Mesa(数据模型)和Apache ORCFile (存储格式,编码和压缩) 的技术设计了三种数据模型。
数据更新
在高并发大数据量的情况下的数据更新方案,一般有如下三种: COW: copy-on-write, 写时复制; MOR: merge-on-read, 读时合并; MOW: merge-on-write, 写时合并;
事务一致性
数据的导入/写入要控制一致性,一般都是要通过分布式事务来实现。 Doris中通过 两阶段事务+状态 控制数据的写入与数据的可见性。
原文始发于微信公众号(阿郎小哥的随笔驿站):聊聊Doris中的高效设计
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/244199.html