架构设计 · 大数据运维

待环境验证

Doris 架构、数据模型与乱序更新设计

区分 Doris 存算形态与三类数据模型,核查业务主键、Sequence、分区分桶和重放语义,形成可验收的建模方案。

Apache Doris大数据
阅读导引 · 理解后再操作

这篇知识解决什么问题

先回答业务要保留事件、当前状态还是累计指标,再核对 Doris 表定义。阅读重点是拆开逻辑主键、业务版本与物理分布,避免用唯一行数替代正确更新语义;文章中的模型样本需要在隔离环境验证。

模型首先定义数据含义

相同业务键的两条输入,在 Duplicate 中可以是两次事件,在 Unique 中可以是状态修订,在 Aggregate 中可以是可合并指标。选择前必须明确金额是增量还是修订总值,并保留原始来源;更快的查询无法补救已经选错的统计语义。

唯一性不等于业务顺序

Unique 表的一条有效结果不能证明迟到输入没有反写新状态。Sequence 把比较顺序交给业务版本,仍需定义相等版本、删除和部分更新的行为;主键身份与版本顺序应分别形成契约,避免用导入到达时间代替真实顺序。

进入文章正文
关联架构图解5 个组件 · 点击展开

配图以 FE 协调和 BE 本地副本为主线,用于定位存算一体中的查询与导入职责。本文另说明存算分离的 MS、FDB 和共享存储依赖,这些不在图中展开,不能拿本地副本路径直接验收分离模式。

查看场景架构与实施步骤
参考架构 · 非实时拓扑

Doris 集群巡检与导入查询治理架构

从 FE 元数据、BE 副本、导入事务与查询 Profile 建立 Doris 分层巡检,验证数据可见性、容量余量与小范围调优效果。

  • 数据 / 请求
  • 控制 / 管理
  • 观测 / 查询

点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。

Doris 集群巡检与导入查询治理架构:组件关系图从 FE 元数据、BE 副本、导入事务与查询 Profile 建立 Doris 分层巡检,验证数据可见性、容量余量与小范围调优效果。 业务与导入客户端 → FE 元数据与协调:请求与事务协调;FE 元数据与协调 → BE 执行与存储:计划与事务调度;BE 执行与存储 → 其他 BE 副本:Tablet 副本关系;FE 元数据与协调 → 巡检证据:角色与事务记录;BE 执行与存储 → 巡检证据:容量与执行证据。箭头说明见下方流向解读。
逻辑参考图,待环境验证。以 Doris 3.x 存算一体集群为主线,记录 FE Master、Follower、Observer 和 BE 故障域。存算分离另含 Meta Service、共享存储和计算组,不可套用本流程的本地副本判断。

业务与导入客户端

入口 / 来源

记录查询、导入批次和业务键,驱动 FE 协调;HTTP 导入数据路径取决于具体方式。

全部组件职责 5 个组件
业务与导入客户端
记录查询、导入批次和业务键,驱动 FE 协调;HTTP 导入数据路径取决于具体方式。
FE 元数据与协调
解析计划、管理元数据和导入事务;Observer 不参加选举。工具介绍 FE 元数据与协调
BE 执行与存储
存算一体模式承载查询、导入和 Tablet;不把本图用于共享存储模式。工具介绍 BE 执行与存储
其他 BE 副本
同 Tablet 副本分布到其他节点,用健康状态和版本而非心跳判断冗余。工具介绍 其他 BE 副本
巡检证据
关联管理状态、算子耗时和业务可见性,给出问题影响范围。
流向解读 5 条连接
  1. 1

    业务与导入客户端 FE 元数据与协调

    数据 / 请求 · 请求与事务协调

    客户端入口与管理协调关系;不是所有导入字节都经 FE 转发。

  2. 2

    FE 元数据与协调 BE 执行与存储

    控制 / 管理 · 计划与事务调度

    FE 向 BE 分配执行任务并协调可见性。

  3. 3

    BE 执行与存储 其他 BE 副本

    数据 / 请求 · Tablet 副本关系

    示意同一数据的跨节点冗余,具体写入路径按导入协议核验。

  4. 4

    FE 元数据与协调 巡检证据

    观测 / 查询 · 角色与事务记录

    保存元数据角色、批次和提交状态。

  5. 5

    BE 执行与存储 巡检证据

    观测 / 查询 · 容量与执行证据

    保存节点水位与有界查询 Profile。

故障域与操作边界

适用版本与部署模式

以 Doris 3.x 存算一体集群为主线,记录 FE Master、Follower、Observer 和 BE 故障域。存算分离另含 Meta Service、共享存储和计算组,不可套用本流程的本地副本判断。

数据与变更边界

本场景不包含强制选主、直接删除 Tablet、取消状态不明的事务或生产压测。Observer 不参与选主,增加 Observer 不能修复选举多数派。

架构依据与版本核对 2 篇官方资料

图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。

适用范围与阅读目标

本文面向 Apache Doris 3.x 内表的建模评审与运维交接,帮助把部署形态、业务主键和查询口径放到一起检查。既有表应以实际 SHOW CREATE TABLE 和精确补丁版本为准,不能根据新版本默认值推断历史表配置。示例仅供只读检查,库表与日期均须替换;本文尚未在业务环境验证,验证等级保持 PENDING。

先准备三类材料:真实组件清单、订单或事件的生命周期,以及三条代表性查询。明确业务需要原始事件、当前状态还是汇总指标,再选择模型。技术选型记录应写明允许的重复、乱序和修订行为,而不是只记录吞吐量。

FE、BE 与存储边界

在存算一体部署中,FE 负责连接、元数据与查询规划等协调工作,BE 承担数据存储和计算。排障时要区分 FE 的连接或规划压力、BE 的执行压力,以及底层磁盘与网络异常。仅凭 SQL 端口可连接,不能推断整个集群的数据服务健康。

Doris 存算分离仍使用 BE 名称,但增加 Meta Service,并依赖 FoundationDB 管理相应元数据,业务数据使用 S3 或 HDFS 等共享存储。运维清单因此需要包含 MS、FDB 和远端存储,而不仅是 FE、BE。不要把 StarRocks 的 CN 命名直接套入 Doris 资产表。组件差异见 Doris 存算分离部署准备

三种模型决定保留什么

  • Duplicate Key:原始日志与行为事件。 相同 Key 再次写入仍保留重复行,Key 主要参与排序。
  • Unique Key:订单当前状态与维表修订。 同一 Key 保留一条有效记录,需要同时定义业务版本规则。
  • Aggregate Key:固定维度累计指标。 Value 列按照声明的聚合函数合并,不能随意改变统计口径。

例如同一业务键先后出现金额 30 和 40:Duplicate 可能保留两条事件;Unique 表示状态替换;SUM 聚合表示累计 70。三者没有统一的“正确行数”。若 40 是修订后的总额,把它导入 SUM 列会改变业务含义。模型建表后不能直接互换,通常需要新表重建与数据核对,详见 表设计最佳实践

核查现有表而不是猜默认值

假设已确认 analytics.orders_current 是待评审的内表:

SELECT VERSION();
SHOW CREATE TABLE analytics.orders_current;
DESC analytics.orders_current;

保存完整 DDL,再标出模型、Key 列、分区列、分桶表达式与属性。对于 Unique 表,重点确认 enable_unique_key_merge_on_write 的实际设置,以及是否配置 function_column.sequence_col。返回成功只说明能够读取定义;不能证明数据已经按该定义正确接入。

给每个主键字段补上业务解释。例如 (tenant_id, order_id) 是否才能唯一标识订单,订单编号是否会跨租户复用,分区日期是否随更新变化。缺少租户字段可能发生跨租户覆盖;为了分区而把可变日期放进 Key,又可能把同一订单变成多个键。先解决身份定义,再讨论查询速度。

Unique 的去重与乱序是两件事

Merge-on-Write 在写入阶段处理新旧记录的有效性,降低读取时合并的工作;它并不自动理解“业务最后修改时间”。相同 Key 的并发或乱序输入,需要独立的版本规则。Doris 的 Sequence 列允许由业务指定比较值,使较大版本能够替换较小版本;该机制适用于 Unique 模型,见 主键模型的更新并发控制

评审时用两个虚拟输入解释预期:订单 90001 的版本 12 是已支付,迟到的版本 11 是待支付。启用且正确映射 Sequence 后,版本 11 不应覆盖 12。版本相等但内容不同仍需要上游解决冲突,不能把毫秒时间戳天然当成全局唯一顺序。删除事件、部分列更新和新键插入还要分别验证,避免把一次整行更新的结果推广到所有写入方式。

分区、分桶与排序各管一层

分区帮助控制日期范围与生命周期;分桶决定分区内数据分布及执行并行度;Key 和排序布局影响数据组织。时间条件准确并不保证分桶均匀,高基数字段也可能由于少数超大租户出现热点。

用已确认存在的日期字段检查一条代表查询的计划:

EXPLAIN
SELECT order_id, status, amount
FROM analytics.orders_current
WHERE order_date >= '2026-09-01'
  AND order_date < '2026-09-02'
  AND tenant_id = 42
LIMIT 20;

检查扫描节点中的 partitionstablets 和过滤条件。partitions=1/90 只说明计划选中一个分区;它不代表只读取一行,也不证明数据均衡。LIMIT 限制返回数量,不能充当扫描字节预算。字段解释依据 Doris EXPLAIN

用小样本建立模型验收矩阵

在隔离环境准备明确的事件序列,至少涵盖新键、重复批次、旧版本迟到、同版本冲突、删除以及恢复后的重放。本篇不执行写入;需要由验证负责人保存输入文件、摘要、label 与期望结果。对同一键读取时限定租户和日期:

SELECT tenant_id, order_id, status, amount, source_version
FROM analytics.orders_current
WHERE order_date = '2026-09-01'
  AND tenant_id = 42 AND order_id = 90001
LIMIT 10;

输出应与事件序列对应,而不是仅检查有无重复。Aggregate 表还需证明聚合前后的金额与次数口径,Duplicate 表则需区分预期重复事件和传输重放。Unique 表的一条结果不能证明历史输入从未丢失。

常见误区与设计取舍

把所有表都改为 Unique 会丢失需要保留的状态历史;把所有字段都放进 Key 又会让任何属性变化都生成新键,失去状态替换的效果。把 REPLACE 看成有业务时间排序也会误判乱序结果。应先保留可重放的原始来源,再构建服务查询的状态表或汇总表。

频繁小批写入会增加版本与合并压力,不能仅通过增加桶数解决。更大的并行度同时带来元数据、文件和调度成本。容量评估需同时包含当前有效数据、历史版本、合并空间和峰值导入,存算分离还应单列缓存容量和远端读取成本。

验收、停止与回退边界

交付物包括版本与模式、表 DDL、业务键契约、代表查询计划、重放样本及预期结果。通过标准是相同输入在约定顺序规则下得到正确结果,查询范围可解释,且更新高峰下仍满足业务新鲜度与资源预算。所有未实测项目标为待验证。

若出现跨租户覆盖、旧事件反写新状态、输入来源无法重放,停止推广新模型。模型迁移应保留旧表和原始事件,先双读对账再切读;新表接收额外写入后,回退需要补齐这些增量,不能只改回表名。继续阅读 Doris 导入事务诊断Doris 查询调优

参考资料

从现象到判断

先收集证据,再缩小范围。以下是判读路径,不代表已经确认根因或获准变更。

  1. 修订订单金额后报表累计值变大,但原始记录看起来没有缺失。

    只读核对
    读取实际 DDL,确认模型与 Value 聚合函数,再比较一组旧金额和新金额的业务含义。
    如何判读
    可能把修订总额写入 SUM 聚合,属于语义错误;增加去重查询或扩容不能恢复原本统计口径。
  2. 同一订单只查到一行,状态却退回较早版本。

    只读核对
    核对完整业务键、Sequence 配置与输入版本映射,保留同键新旧两条事件的摘要和顺序。
    如何判读
    主键去重可能正常,但乱序保护缺失或映射错误;唯一行数不是状态正确的证据。
  3. 查询只限制一天,计划仍选中了较多历史分区或所有 Tablet。

    只读核对
    把 EXPLAIN 的分区与分桶选择同实际 DDL、类型和过滤条件对照。
    如何判读
    日期过滤、分区策略和分桶裁剪属于不同层;LIMIT 小不能证明扫描成本已经受控。
常见误区与判断边界 2 项

把所有字段放进业务主键

状态、金额或可变日期进入 Key 后,更新可能变成新键,原本的当前状态表出现多条历史组合。应以业务身份为依据核对键,并解释租户与分区约束;不能靠扩大 Key 让唯一性检查表面通过。

认为模型迁移可以直接改回表名

新表一旦接收额外增量,旧表未必具有相同数据。回退必须保留源端事件和切换窗口,明确补齐方式;仅恢复旧 SQL 或表名只能恢复路由,不能自动恢复最新业务状态。

交接时应留下的证据

作为记录提纲使用,不是自动检查结果;未取得的证据应标记缺口,并注明负责人。

  • 保留精确版本、部署形态、组件清单和目标表完整 DDL,标注历史默认值与实际配置差异。
  • 记录业务键、版本字段、金额口径及删除语义,列明相同版本载荷冲突的处理人。
  • 保存新键、重复、迟到、删除和部分更新样本的输入摘要与预期结果,所有未实测项保持待验证。
  • 归档代表查询计划、扫描范围、迁移增量窗口和旧读路径,明确停止推广与补齐责任。

记录需包含环境、版本、时间与时区;分享前脱敏,不附访问令牌、密码或完整业务敏感数据。

继续阅读与资料核对

补充相关主题,再结合当前环境的实施记录形成结论。

返回原理导读

DOUYA OPS ECOSYSTEM

贡献你的经验,帮助更多运维人

把故障复盘、标准流程和最佳实践沉淀为可检索、可复用的知识内容。