Doris 如何 组织 数据?
先了解逻辑层级,再深入看看表如何在集群中划分和分布。
- Catalog数据源
- Database业务边界
- TableSchema + 属性
- 分区逻辑范围
- 分桶物理分布
先了解逻辑层级,再深入看看表如何在集群中划分和分布。
分析查询通常只访问大量数据行中的少数几列。列式存储让 Doris 只读取和处理查询所需的数据。
只扫描查询引用的列。
类型相同且相近的值更容易紧凑编码。
连续存放的向量能提高缓存利用率,并支持 SIMD。
表模型决定 Doris 是保留每一行、合并值,还是为每个 Key 维护一条逻辑数据行。
保留每条输入数据,适合事件明细和日志。
使用声明的聚合函数合并 Value 列。
为每个 Key 保留一条逻辑数据行,适合更新和 CDC。
在存算一体架构中,Frontend 节点负责协调系统,Backend 节点负责执行查询,并将 tablet 副本持久化到本地存储。
无状态计算组可以独立扩缩容,持久数据则保存在共享存储中。
FE 提供 SQL 服务;Meta Service 管理数据层元数据。
无状态 BE 节点执行计算并缓存热数据。
对象存储或受支持的分布式文件系统负责持久化数据。
存算一体和存算分离适合不同的运行环境,没有哪种架构在所有场景下都更好。
有状态 BE 节点执行计算,并在本地持久化数据。
无状态计算组共享持久存储。
存储引擎组织数据和访问路径;查询引擎将 SQL 转换为分布式向量化流水线。
读取所需的列,并压缩分析数据。
Prefix、Min/Max、Bloom 和倒排索引用于裁剪扫描范围。
将查询执行分布到多个 Backend 节点。
应用基于规则、成本和历史信息的优化策略。
查询经过校验和优化后,被拆分为片段和实例,在多个 BE 节点上执行,最后汇总为结果。
Doris 通过预计算、逻辑重写、基于统计信息的计划生成和运行时过滤,在执行前及执行过程中减少需要处理的数据。
通过查询重写复用预计算结果。
应用确定性的逻辑变换。
利用统计信息比较物理计划。
将过滤条件推向扫描阶段,尽早剔除数据行。