Doris总结
1. 解决了什么问题?相比传统Spark、Flink有什么优势?
解决传统数据仓库、分析工具在性能方面的问题
- group by查询性能更好?
不是创建表时就立即预聚合,而是创建表时定义聚合规则,数据插入/加载时进行预聚合
2. Doris是什么?
是一个MPP(Massively Parallel Processing)数据库,即大规模并行处理
- 其他的MPP数据库:clickhouse、Greeplus
3. Doris优势?
- doris —> 中国信创 —> Oracle 存储过程
- 摆脱了Hadoop,自成一派,有可能将来大数据就等同于 MPP数据库了。
- 亚秒级响应
- 支持10PB以上的超大数据集
4. 使用场景
- 实时看板:预定义的仪表盘界面,强调实时监控和直观展示
- 即席查询:用户临时发起的探索性查询
5. 架构
5.1 FE(FrontEnd)
- 存储元数据
- 接收请求,生成SQL的执行计划
5.2 BE(BackEnd)
- 存储真实数据
- 执行具体的计划
5.3 MySQL Client
- 借助的是MySQL客户端
5.4 Broker
- 独立的进程,封装了文件系统接口,能让Doris读取远端存储系统的能力。HDFS、S3等
6. 常用端口号
7. Doris数据类型
8. Doris的Row和Column
一张表包括行(Row)和列(Column)。Row 即用户的一行数据。Column 用于描述一
行数据中不同的字段。
- 在默认数据模型中,Column分为排序列、非排序列
- 在聚合模型中,Column分为 key列、value列
9. Partition(分区) 和 Tablet(分桶)
- 分区:最小管理单元
- 分桶:每个分桶为一个数据分片
10. Doris数据模型
10.1 数据模型到底是个啥?
主要为了支持高效的 OLAP(在线分析处理)场景。插入数据时能自动触发计算!!
eg:聚合模型。
10.2 数据模型主要分为 3 类
- Aggregate
- Uniq
- Duplicate
10.2.1 Aggregate 聚合模型
- 聚合模型中,字段有且仅有有key、value列
- key:维度
- value:指标
- eg:
10.2.2 Uniq 模型
- Uniq模型,为了保证Key的唯一性。———可以类比:定义MySQL的主键
- 可用聚合模型中的replace实现:
- user_id、username是key
- 其他字段都是value,聚合方式是replace
- eg:
10.2.3 Duplicate 模型
- 原来数据什么样,插入之后还是什么样,没有唯一性约束,也没有聚合需求
- 而在建表语句中指定的 DUPLICATE KEY,只是用来指明底层数据按照哪些列进行排序。
- eg:
11. 动态分区
- 动态分区和静态分区区别
- 静态分区:插入时,手动指定分区
- 动态分区:根据查询结果,动态分区
- eg:
- 一些参数
12. Rollup表
Rollup(“上卷”)目的:在Base表的基础上
- Aggregate、Uniq模型:获得更粗粒度的聚合数据
- Duplicate模型:调整列顺序,以命中前缀索引
Base表:通过建表语句创建的表,Base 表中保存着按用户建表语句指定的方式存储的基础数据。
在 Base 表之上,我们可以创建任意多个 ROLLUP 表,对用户不可见。
eg:
Aggrate模型中
Base表保存:各个用户在3月的购买金额
Rollup表中:各个城市在3月的购买金额
12.1 Aggregate聚合、Uniq模型中的Rollup表
- 目的:获得更粗粒度的聚合数据
- 建Rollup表
- 正常查询Base表,指定(Rollup指定的) 聚合维度,指标,Explain后发现走的是Rollup
12.2 Duplicate模型中的Rollup表
- 解释一下,Duplicate模型建的表,本身就是明细数据,需要建Rollup表干嘛?
- 回答:
- 建表语句建立的Base表,默认有基于key的前缀索引
- 此时,如果筛选条件,不匹配前缀索引,那么查询效率很低
- 此时,需要根据当前的筛选条件,来作为key,建立Rollup表
图解释(Rollup表中调换了key的位置):
13. 物化视图
13.1 物化视图是什么?
说白了,就是预先存储的查询结果。记录了操作(SQL)+结果(SQL得到的结果),和Rollup类似
13.2 物化视图 VS Rollup
- Rollup 和 Materialized View 都会提前保存 SQL 结果(或其聚合形式),以加速后续查询。
- Rollup不能对明细数据预聚合,Materialized View可以
- 存储和性能开销:
- Rollup:存储在基表同一空间,自动压缩;查询加速 10-100x,适合大明细表。
- Materialized View:独立存储表,空间开销大;加速效果好,但刷新延迟可能影响实时性(Doris 2.1+ 优化)。
- 灵活的粒度:
- Rollup仅对固定粒度
- Materialized View高度灵活
13.3 创建物化视图
1 | |
实操各个语句
连接Doris
创建用户,创建数据库
创建表
创建基于 Aggregate 模型构建的表
创建基于 Uniq 模型构建的表
创建基于 Duplicate 模型构建的表
开启动态分区,并配置
创建基于 Aggregate、Uniq 模型的Rollup表
创建基于 Duplicate 模型的Rollup表
注意⚠️
1. 分区、分桶中
- 分区中,注意删除某分区,可能导致该分区的数据无法导入
- 分区支持Range、List,分桶支持Hash
2. doris为什么不建议使用insert into单条记录?
- 性能开销高:每个 INSERT INTO 语句在 Doris 中都被视为一个完整的导入事务,会涉及:触发分布式协调、数据分发、分桶计算、校验等一系列操作,造成..
3. 聚合模型中,插入新数据的value字段是NULL,那么这个value字段的值不更新
4. 聚合模型中,由于会预聚合,导致count(*)不准确,那么如何处理?
- 新增一列值恒为1的字段。聚合类型为SUM即可。
5. 视图和物化视图有什么区别:
- 视图:仅记录要进行的操作(SQL),不保存结果
- 物化视图:记录 操作+结果
6. 物化视图:每次数据有变化,都会生成一个结果
Doris总结
https://blog.zzzero.site/2025/Doris总结/
