现代化的高性能MPP分析型数据库

数据模型

https://doris.apache.org/zh-CN/docs/data-table/data-model.html

Aggregate 模型

Aggregate 模型有 Key (维度列) 和 Value(指标列);导入数据时,对于 Key 列相同的行会聚合成一行,而 Value 列会按照设置的聚合类型进行聚合,聚合类型有SUM、REPLACE、MAX、MIN。
数据的聚合有三个阶段:

  • ETL 阶段:导入的批数据内部进行聚合。
  • BE 的 Compaction 的阶段:BE 会对不同批次的数据进行聚合。
  • 数据查询阶段:对查询到的数据进行聚合
    这三个阶段对用户透明,数据未聚合完成时,用户查询较慢

Unique 模型

可理解为 Aggregate 模型的聚合类型为REPLACE,新数据和旧数据key相同时,value数据会对旧数据进行覆盖。

Duplicate 模型

数据既没有主键,也没有聚合需求的模型

数据模型的选择建议

因为数据模型在建表时就已经确定,且无法修改。所以,选择一个合适的数据模型非常重要。

  • Aggregate 模型可以通过预聚合,极大地降低聚合查询时所需扫描的数据量和查询的计算量,非常适合有固定模式的报表类查询场景。但是该模型对 count(*) 查询很不友好。同时因为固定了 Value 列上的聚合方式,在进行其他类型的聚合查询时,需要考虑语意正确性。
  • Unique 模型针对需要唯一主键约束的场景,可以保证主键唯一性约束。但是无法利用 ROLLUP 等预聚合带来的查询优势(因为本质是 REPLACE,没有 SUM 这种聚合方式)。
  • Duplicate 适合任意维度的 Ad-hoc 查询。虽然同样无法利用预聚合的特性,但是不受聚合模型的约束,可以发挥列存模型的优势(只读取相关列,而不需要读取所有 Key 列)。