
点击蓝字 关注我们
本文将深入介绍 Apache 所采用的数据库模式,此模式主要用于持久化存储工作流定义、执行状态、调度信息以及系统元数据。它具备广泛的兼容性,可支持 MySQL、PostgreSQL 和 H2 等多种数据库,其具体定义存储在 dolphinscheduler - dao/src/main/resources/sql 目录下。
模式
架构
DolphinScheduler 的数据库模式分为七个主要功能组:
t_ds_workflow_definitiont_ds_task_definitiont_ds_workflow_task_relation | ||
t_ds_workflow_instancet_ds_task_instancet_ds_command | ||
t_ds_schedulesQRTZ_* 表 | ||
t_ds_datasourcet_ds_resourcest_ds_udfs | ||
t_ds_usert_ds_tenantt_ds_project | ||
t_ds_alertt_ds_alertgroup | ||
t_ds_jdbc_registry_* |
工作流和任务
定义模型
DolphinScheduler 严格区分定义(模板)和实例(执行)。这实现了版本控制、并发执行和审计跟踪。


关键设计原则:
核心表
参考
t_ds_workflow_definition工作流模板的主表。
索引:
UNIQUE KEY workflow_unique (name, project_code)UNIQUE KEY uniq_workflow_definition_code (code)KEY idx_project_code (project_code)t_ds_workflow_definition_log存储工作流定义所有版本的审计日志。
镜像 t_ds_workflow_definition 的结构,额外列:operator、operate_time,主键:(code, version)。
t_ds_task_definition可在工作流中重用的任务模板。
t_ds_workflow_task_relation通过指定任务之间的边来定义 DAG 结构。
注意:pre_task_code = 0 表示根节点(无前驱任务)。
t_ds_workflow_instance工作流的运行时执行记录。
索引:
KEY workflow_instance_index (workflow_definition_code, id)KEY start_time_index (start_time, end_time)t_ds_task_instance单个任务的运行时执行记录。
workflow_instance 相同的状态值 | ||
索引:KEY idx_task_instance_code_version (task_code, task_definition_version)
t_ds_command 表实现了基于队列的执行模型,其中命令触发工作流实例。
t_ds_command 结构处理流程:
t_ds_command。MasterSchedulerThread 持续扫描该表(按优先级、id 排序)。t_ds_workflow_instance 记录。t_ds_task_instance 记录。t_ds_error_command。版本控
制系统
DolphinScheduler 使用复杂的版本控制系统,支持:

t_ds_workflow_definition 和 t_ds_task_definition 中。*_log 表中,具有 UNIQUE KEY (code, version)。release_state = 1(在线)。调度体
系架构
DolphinScheduler 集成了 Quartz 调度程序以实现基于 cron 的调度。模式包括标准 Quartz 表以及一个映射表。


t_ds_schedulesQuartz 表要点:
QRTZ_TRIGGERS.NEXT_FIRE_TIME:已索引,便于高效扫描。QRTZ_CRON_TRIGGERS.CRON_EXPRESSION:解析后的 cron 定义。QRTZ_SCHEDULER_STATE:跟踪 Quartz 调度程序实例。资源和
配置表
t_ds_datasource存储 SQL 任务的数据库连接配置。
约束:UNIQUE KEY (name, type) - 防止数据源重复。
t_ds_resources(已弃用)注意:此表在模式中已标记为弃用。资源元数据正在迁移到单独的存储后端。
多租户
与管理

t_ds_tenant默认租户:系统创建一个默认租户,id = -1,tenant_code = 'default'。
t_ds_usert_ds_projectJDBC
注册表
对于不使用 ZooKeeper 的部署,DolphinScheduler 提供基于 JDBC 的注册表用于服务协调。

t_ds_jdbc_registry_data存储类似于 ZooKeeper 节点的注册表项。
EPHEMERALPERSISTENT | ||
t_ds_jdbc_registry_lock实现分布式锁。
t_ds_jdbc_registry_client_heartbeat跟踪活动客户端以清理临时数据。
清理逻辑:当客户端的心跳过期时,其临时注册表数据和锁将自动删除。
告警
系统

t_ds_alert由工作流/任务失败或完成生成的告警记录。
索引:KEY idx_sign (sign) - 实现去重。
t_ds_alertgroup告警通道组。
索引与
查询优化
该模式包含针对常见查询模式精心设计的索引:
- 按定义查询工作流实例:
`KEY workflow_instance_index (workflow_definition_code, id)`
- 按定义查询任务实例:
`KEY idx_task_instance_code_version (task_code, task_definition_version)`
- 用于监控的时间范围查询*:
`KEY start_time_index (start_time, end_time)`
基于优先级的命令扫描:
`KEY priority_id_index (workflow_instance_priority, id)`
- 正向和反向 DAG 遍历:
`KEY idx_pre_task_code_version (pre_task_code, pre_task_version)`
正向和反向 DAG 遍历:
`KEY idx_post_task_code_version (post_task_code, post_task_version)`
`KEY idx_code (project_code, workflow_definition_code)`
在数据库级别强制执行的关键业务规则:
t_ds_workflow_definition | UNIQUE (name, project_code) | |
t_ds_workflow_definition | UNIQUE (code) | |
t_ds_workflow_definition_log | UNIQUE (code, version) | |
t_ds_datasource | UNIQUE (name, type) | |
t_ds_schedules | UNIQUE (workflow_definition_code) |
模式演进
与升级
DolphinScheduler 在 dolphinscheduler - dao/src/main/resources/sql/upgrade 中维护用于跨版本模式迁移的升级脚本。
t_ds_dq_*)。execution_type(并行/串行模式)。next_workflow_instance_id。tenant_code。t_ds_project_parameter 和 t_ds_project_preference。数据交互
模式
数据库访问通过 dolphinscheduler - dao 中的 DAO 层进行抽象。关键服务类:
ProcessService:工作流/任务定义和实例的 CRUD 操作。CommandService:命令队列管理。ProjectService:项目和权限管理。ResourcesService:资源元数据操作。大多数操作使用 Spring 的 @Transactional 注解实现:
系统使用 HikariCP 进行连接池,在 application.yaml 中配置:



用户案例

迁移实战

最新发版消息

加入社区
关注社区的方式有很多:
同样地,参与Apache DolphinScheduler 有非常多的参与贡献的方式,主要分为代码方式和非代码方式两种。
非代码方式包括:
完善文档、翻译文档;翻译技术性、实践性文章;投稿实践性、原理性文章;成为布道师;社区管理、答疑;会议分享;测试反馈;用户反馈等。
代码方式包括:
查找Bug;编写修复代码;开发新功能;提交代码贡献;参与代码审查等。


你的好友秀秀子拍了拍你
并请你帮她点一下“分享”
