Doris 数据模型详解
1. 明细模型 (Duplicate Key Model)
明细模型是Doris中最基础的数据模型,存储最原始的明细数据,不做任何预聚合处理。
特点:
- 适合存储需要保留所有原始数据的场景
- 查询时会扫描所有相关数据行
- 支持任意列作为排序键(DUPLICATE KEY)
- 数据写入后不会进行去重或聚合
应用场景:
- 日志分析系统,需要保留所有原始日志记录
- 交易流水记录,需要查询每笔交易的详细信息
- 用户行为轨迹分析,需要完整的行为序列
示例:
sql
CREATE TABLE user_actions (
user_id BIGINT,
action_time DATETIME,
action_type VARCHAR(20),
device_id VARCHAR(50),
ip_address VARCHAR(20)
)
DUPLICATE KEY(user_id, action_time)
DISTRIBUTED BY HASH(user_id) BUCKETS 10;
2. 主键模型 (Unique Key Model)
主键模型保证相同主键的数据行只保留最新版本,实现数据的更新和删除功能。
特点:
- 支持数据的更新(UPDATE)和删除(DELETE)操作
- 相同主键的数据会自动合并,只保留最新版本
- 需要指定UNIQUE KEY作为主键列
- 适合需要频繁更新的数据场景
应用场景:
- 用户资料表,需要更新用户信息
- 商品库存表,需要实时更新库存数量
- 订单状态表,需要变更订单状态
示例:
sql
CREATE TABLE user_profiles (
user_id BIGINT,
username VARCHAR(50),
email VARCHAR(100),
phone VARCHAR(20),
last_login DATETIME,
update_time DATETIME
)
UNIQUE KEY(user_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 10;
3. 聚合模型 (Aggregate Key Model)
聚合模型会在数据导入时按照指定的聚合键进行预聚合计算,大幅提升查询性能。
特点:
- 导入时自动按AGGREGATE KEY进行聚合计算
- 数值列需要指定聚合函数(SUM, MAX, MIN等)
- 大幅减少存储空间和查询计算量
- 适合分析型查询场景
应用场景:
- 网站访问统计,按天/小时聚合PV/UV
- 销售报表,按地区/产品聚合销售额
- 监控指标,按时间窗口聚合CPU/内存使用率
示例:
sql
CREATE TABLE sales_summary (
product_id INT,
sale_date DATE,
region VARCHAR(50),
total_sales DECIMAL(12,2) SUM,
order_count BIGINT SUM,
max_price DECIMAL(12,2) MAX
)
AGGREGATE KEY(product_id, sale_date, region)
DISTRIBUTED BY HASH(product_id) BUCKETS 10;