当前位置: 首页 > news >正文

Doris专题22- 数据更新-概述

1. 核心概念:表模型与更新机制

Apache Doris 提供三种表模型,分别适用于不同的业务场景和更新需求。

1.1. 表模型概览

表模型主要特点更新能力适用场景
主键模型支持行级 UPSERT 和部分列更新最强,支持所有更新和删除方式订单状态更新、用户标签实时计算、CDC 数据同步
聚合模型按 Key 列预聚合,Value 列按聚合函数合并有限,支持 REPLACE 式更新和删除实时报表、广告点击统计
明细模型仅追加写入,不进行去重或聚合有限,仅支持条件删除日志采集、用户行为埋点

1.2. 数据更新方式

1.2.1. 通过导入进行更新(UPSERT)
  • 所有导入方式(Stream Load、Broker Load、Routine Load、INSERT INTO)均支持 UPSERT。
  • 主键存在则覆盖,不存在则插入。
1.2.2. 通过 UPDATE DML 语句更新
  • 支持标准 SQL UPDATE 语法,适用于低频、批量更新。

示例:

UPDATE user_profiles SET age = age + 1 WHERE user_id = 1;
1.2.3. 通过 INSERT INTO SELECT 更新
  • 利用 UPSERT 语义实现类似 UPDATE 的效果。

1.3. 数据删除方式

1.3.1. 通过导入进行标记删除
  • 使用隐藏列 __DORIS_DELETE_SIGN__ 标记删除。

示例 JSON 导入数据:

{"user_id": 2,"__DORIS_DELETE_SIGN__": "1"
}
1.3.2. 通过 DELETE DML 语句删除
  • 支持标准 SQL DELETE 语法。

示例:

DELETE FROM user_profiles WHERE last_login < '2022-01-01';

2. 深入主键模型:原理与实现

2.1. Merge-on-Write (MoW) vs. Merge-on-Read (MoR)

特性Merge-on-Write (MoW)Merge-on-Read (MoR)
核心思想写入时合并,存储中每个主键仅一条最新记录查询时合并,存储多个版本
查询性能极高较差(3-10 倍延迟)
写入性能有一定性能损失写入速度快
适用场景读多写少,实时分析场景写多读少(已不推荐)

2.2. 条件更新(Sequence Column)

  • 用于处理乱序数据,保证最终一致性。

建表示例:

CREATE TABLE order_status (order_id BIGINT,status_name STRING,update_time DATETIME
)
UNIQUE KEY(order_id)
DISTRIBUTED BY HASH(order_id)
PROPERTIES ("function_column.sequence_col" = "update_time"
);

2.3. 删除机制(DORIS_DELETE_SIGN)

原始数据表
执行删除操作
标记删除记录
查询时过滤 DORIS_DELETE_SIGN=0
后台 Compaction 物理清理

2.4. 部分列更新(Partial Column Update)

  • 仅更新指定列,未提供列保持原值。

建表并启用部分列更新:

CREATE TABLE user_profiles (user_id BIGINT,name STRING,age INT,last_login DATETIME
)
UNIQUE KEY(user_id)
DISTRIBUTED BY HASH(user_id)
PROPERTIES ("enable_unique_key_partial_update" = "true"
);

更新示例:

{"user_id": 1,"age": 31,"last_login": "2023-10-26 18:00:00"
}

注意: 部分列更新存在“读放大”和“写放大”,建议使用 SSD 硬盘并开启行存以减少随机 IO。


3. 典型应用场景

3.1. CDC 数据实时同步

  • 使用 Flink CDC 捕获 Binlog,实时写入 Doris 主键表。
  • 支持整库同步,保证数据一致性。

3.2. 实时宽表拼接

  • 利用部分列更新,将多源数据流实时写入同一张宽表。
  • 每个数据流仅更新相关字段,减少 I/O 开销。

4. 最佳实践

4.1. 通用性能实践

  • 优先使用导入更新(如 Stream Load)而非 UPDATE 语句。
  • 批量写入,避免高频单条 INSERT。
  • 谨慎使用高频 DELETE,尤其在明细/聚合模型中。
  • 使用 TRUNCATE PARTITION 删除整个分区数据。
  • 串行执行 UPDATE,避免并发冲突。

4.2. 存算分离架构下的主键模型实践

  • 控制单表导入频率 ≤ 60次/秒。
  • 合理设计分区(时间分区)和分桶(8-64 个 Tablet)。
  • 调整 Compaction 策略以减少锁竞争。
http://www.dtcms.com/a/508537.html

相关文章:

  • 立创EDA专业版使用技巧——按TAB暂停修改
  • 伊犁网站建设公司网页设计与制作实训步骤
  • 深圳网站建设外贸公司软件公司简介内容怎么写
  • 亚太稀土产链
  • 【源码+文档+调试讲解】基于SpringBoot + Vue的知识产权管理系统 041
  • 建设银行信用卡管理中心网站首页网站不换域名换空间
  • 小型企业做网站的价格图片主题wordpress
  • 【C/C++】进程
  • 如何让我们的网站新闻被百度新闻收录网站现在用h5做的吗
  • composer安装 laravel 指定版本
  • 手机购物网站建设网站后期维护包括
  • 服装 多语言 网站源码兰州网站建设和推广
  • ipad可以做网站吗忻州市住房城乡建设局网站
  • 中医养生篇
  • 响应式网站建设好么网站开发产品经理招聘
  • 北京哪家公司做网站自备服务器做网站
  • 技能短板导致任务停滞,该如何补救
  • POSIX 可移植操作系统接口规范
  • 公司网站开发费用济南兴田德润o评价沣东新城开发建设集团有限公司网站
  • 重庆网站建设子沃科技外贸网站建设优化
  • 制作网站的走马灯怎么做html网站模板怎么用
  • React Native开发有哪些优势和劣势?
  • 电商类网站开发合同书设计工作室 网站
  • 东莞网站制作与网站建设东莞关键词优化效果
  • MATLAB疑难诊疗:从调试到优化的全攻略
  • Linux Shell 中的 join 命令:高效关联数据的实用工具
  • 网站知识架构网站书店架构书怎么做
  • 建立网站的目的和功能成都到西安动车
  • Redis 数据类型与使用场景
  • 网站关键词快速排名工具中国手机网站大全