Doris是一个开源的分布式分析型数据库,最初由百度大数据部研发,目前隶属于Apache基金会。
Doris基于大规模并行处理(MPP)架构,提供高性能和实时的数据分析能力。它以极速易用的特点被广泛使用,能够应对高并发的点查询场景,同时也支持高吞吐的复杂分析场景,如用户行为分析、日志检索、用户画像分析和订单分析等。Doris具有亚秒级的响应时间,能够处理大规模数据存储和分析的需求。
一、架构原理
Doris整体架构

BE / FE
- Doris主要分为FE、BE两个组件,FE主要负责查询的编译,分发和元数据管理(基于内存,类似HDFS NN);BE主要负责查询的执行和存储系统。
索引结构
- Sorted Compound Key Index,可以最多指定三个列组成复合排序键,通过该索引,能够有效进行数据裁剪,从而能够更好支持高并发的报表场景
- Z-order Index :使用 Z-order 索引,可以高效对数据模型中的任意字段组合进行范围查询
- Min/Max :有效过滤数值类型的等值和范围查询
- Bloom Filter :对高基数列的等值过滤裁剪非常有效
- Invert Index :能够对任意字段实现快速检索
存储模型
- Aggregate Key 模型:相同 Key 的 Value 列合并(求和、替换、最大值、最小值)。通过提前聚合大幅提升性能
- Unique Key 模型:Key 唯一,相同 Key 的数据覆盖,实现行级别数据更新。(Unique 模型等同于聚合模型Aggregate Key 中的 REPLACE 方式替代)
- Duplicate Key 模型:明细数据模型,满足事实表的明细存储。(相同的两行数据会被保留)
存储引擎
- 列式存储,按列进行数据的编码压缩和读取,能够实现极高的压缩比,同时减少大量非相关数据的扫描,从而更加有效利用 IO 和 CPU 资源。
查询引擎
- 采用 MPP 的模型,节点间和节点内都并行执行,也支持多个大表的分布式 Shuffle Join,从而能够更好应对复杂查询。
二、数据划分
一张“表”的数据会被拆分到多个分区Partition。Partition 可以视为是逻辑上最小的管理单元。数据的导入与删除,都可以或仅能针对一个 Partition 进行。而一个 Partition 包含若干个 Tablet,每个 Tablet 包含若干数据行。各个 Tablet 之间的数据没有交集,并且在物理上是独立存储的。

我们以一个建表操作来说明 Doris 的数据划分。
-- Range Partition
CREATE TABLE IF NOT EXISTS example_db.example_range_tbl
(
`user_id` LARGEINT NOT NULL COMMENT "用户id",
`date` DATE NOT NULL COMMENT "数据灌入日期时间",
`timestamp` DATETIME NOT NULL COMMENT "数据灌入的时间戳",
`city` VARCHAR(20) COMMENT "用户所在城

最低0.47元/天 解锁文章
735

被折叠的 条评论
为什么被折叠?



