每天写点什么2026-03-19-Doris三种存储模型

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;
相关推荐
Decay__5 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
秋天的怀念_David5 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
外收内放5 小时前
Python基础语法练习题(73)
java·前端·python
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 环信后台发送消息测试
java·交友
用户3721574261356 小时前
Java 操作 Word 脚注和尾注:添加、读取与删除
java
小嘉丶学长6 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
字节探索6 小时前
Spring Boot 接口幂等性设计:从唯一索引到 Redis+Lua 的工程实践
java·spring boot
用户3721574261356 小时前
Java 实现 Excel 与 Markdown 相互转换:表格导出、格式设置与多表提取
java
心梦缘-雪雁6 小时前
SQL Server 查询数据存在哪个表里
数据库
SL_staff7 小时前
制造业订单交付总踩坑?用结构化节点协同模型重构计划系统
java·开源·全栈