1. Doris 的 MPP 架构、Aggregate/Unique/Duplicate 三种表模型的适用场景与区别?
Doris 的 MPP 架构是怎样的?Aggregate、Unique、Duplicate 三种表模型分别适用于什么场景,有什么区别?
- MPP 架构中 FE 与 BE 的分工
- 三种表模型的数据组织与更新语义
- 按写入与查询模式选型
Doris 是 MPP(Massively Parallel Processing)分析型数据库:FE(Frontend)负责元数据管理、SQL 解析与分布式执行计划生成,BE(Backend)负责数据存储与查询执行,查询被切分为分布式计划在多个 BE 并行执行并汇总结果,配合向量化执行提升吞吐。三种表模型:Duplicate 明细模型保留所有导入行,无去重无聚合,适合日志、事实明细等无需更新的场景;Aggregate 聚合模型按聚合键预聚合(SUM/MAX/MIN/REPLACE 等),导入时部分聚合,查询命中预聚合结果,适合高频统计报表;Unique 唯一键模型按主键去重,后导入的数据覆盖旧值(upsert 语义),适合订单、用户状态等可变数据。
区别与选型:Duplicate 最灵活但无更新语义;Aggregate 把聚合下推到存储、查询快,但只能按预定义聚合键查询且无法精确查明细;Unique 支持实时 upsert 但查询需合并版本(MOR)。选型口诀:需要明细可查选 Duplicate,高频汇总统计选 Aggregate,主键更新场景选 Unique。
三种模型本质是"数据组织与更新语义"的三种选择:保留全部、预聚合、主键覆盖。先讲 MPP 架构定基调,再按模型语义与场景展开,最后给出选型结论。
-- 三种表模型建表示例
CREATE TABLE dup_log ( -- 明细模型
event_time DATETIME, user_id BIGINT, page STRING
) DUPLICATE KEY(event_time)
DISTRIBUTED BY HASH(user_id) BUCKETS 10;
CREATE TABLE agg_sale ( -- 聚合模型
dt DATE, channel STRING, gmv DECIMAL(14,2) SUM
) AGGREGATE KEY(dt, channel)
DISTRIBUTED BY HASH(channel) BUCKETS 10;
CREATE TABLE uni_order ( -- 唯一键模型
order_id BIGINT, status STRING, amount DECIMAL(12,2)
) UNIQUE KEY(order_id)
DISTRIBUTED BY HASH(order_id) BUCKETS 10;