本文档对 Apache DolphinScheduler 的数据库模式进行了系统介绍,涵盖存储工作流定义、任务配置、调度信息、用户数据及其他核心系统组件的各类表的结构、相互关系和功能,帮助用户深入理解 DolphinScheduler 的运行机制。
目的与范围
在 DolphinScheduler 中,数据库模式是整个工作流调度系统的持久化基础。它用于存储所有配置信息、执行记录、用户数据以及系统运行所需的元数据。系统官方支持 MySQL、PostgreSQL 和 H2 三种数据库,并为每种数据库提供了对应的 SQL 脚本。
支持的数据库系统
DolphinScheduler 提供了以下数据库的初始化脚本:
- MySQL
- PostgreSQL (
- H2(主要用于测试)
脚本文件位置如下:
- MySQL:
dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql
- PostgreSQL:
dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql
- H2:
dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql
架构总览
数据库模式可按功能分为以下几组:
![]()
- 工作流(Workflow)相关表
- 任务(Task)相关表
- 项目(Project)与资源(Resource)相关表
- 用户管理表
- 调度(Scheduling)表
- 告警(Alerting)表
- 注册(Registry)表(3.3.0 版本新增)
模式结构详解
1. 工作流相关表
工作流相关表用于存储工作流定义、实例及其与任务的关系。在 3.3.0 版本中,所有“process”前缀的表均重命名为“workflow”。
关键表:
| 表名 |
描述 |
| t_ds_workflow_definition |
存储工作流定义,包括代码、名称、描述及其他元数据。 |
| t_ds_workflow_definition_log |
保存工作流定义变更历史。 |
| t_ds_workflow_instance |
记录运行中及已完成的工作流实例。 |
| t_ds_workflow_task_relation |
映射工作流内部任务之间的关系。 |
| t_ds_workflow_task_relation_log |
保存任务关系变更历史。 |
工作流实例状态:
![]()
2. 任务相关表
任务相关表用于存储任务定义、执行实例及参数。
关键表:
| 表名 |
描述 |
| t_ds_task_definition |
存储任务定义,包括类型、参数及其他配置。 |
| t_ds_task_definition_log |
保存任务定义变更历史。 |
| t_ds_task_instance |
记录运行中及已完成的任务实例。 |
| t_ds_task_group |
定义任务组,用于资源隔离和优先级管理。 |
| t_ds_task_instance_context |
存储任务执行上下文数据。 |
![]()
3. 项目与资源表
用于管理项目及其相关资源(文件、UDF、自定义数据源等)。
关键表:
| 表名 |
描述 |
| t_ds_project |
存储项目定义,包括名称和描述。 |
| t_ds_project_parameter |
存储项目级参数。 |
| t_ds_project_preference |
存储项目偏好设置及配置。 |
| t_ds_resources |
管理资源文件(已弃用)。 |
| t_ds_udfs |
存储用户自定义函数(UDF)。 |
| t_ds_datasource |
管理数据源连接信息。 |
4. 用户管理表
用于用户认证、授权、租户管理等功能。
关键表:
| 表名 |
描述 |
| t_ds_user |
存储用户信息,包括用户名、密码和邮箱。 |
| t_ds_tenant |
管理租户信息。 |
| t_ds_access_token |
存储 API 访问令牌。 |
| t_ds_session |
管理用户会话。 |
| t_ds_relation_project_user |
映射用户与项目的关系及权限级别。 |
| t_ds_relation_datasource_user |
映射用户与数据源的关系及权限级别。 |
5. 调度表
管理调度命令、定时配置及任务调度记录。
关键表:
| 表名 |
描述 |
| t_ds_command |
存储用于执行工作流的命令。 |
| t_ds_error_command |
存储执行失败的命令。 |
| t_ds_schedules |
存储工作流的调度配置。 |
| QRTZ_* |
Quartz 调度器表,用于作业调度。 |
指令类型:
| 类型值 |
描述 |
| 0 |
启动作业流 |
| 1 |
从当前节点开始执行 |
| 2 |
恢复容错工作流 |
| 3 |
恢复已暂停的工作流 |
| 4 |
从失败节点开始执行 |
| 5 |
补数(Backfill) |
| 6 |
调度执行 |
| 7 |
重跑(Rerun) |
| 8 |
暂停 |
| 9 |
停止 |
| 10 |
恢复等待线程 |
6. 告警表
管理告警配置及记录。
关键表:
| 表名 |
描述 |
| t_ds_alert |
存储告警消息。 |
| t_ds_alertgroup |
管理告警分组及通知路由。 |
| t_ds_alert_plugin_instance |
配置告警插件(如 Email、Slack 等)。 |
7. 注册表
从 3.3.0 版本起,增加了基于 JDBC 的注册实现,替代 ZooKeeper。
关键表:
| 表名 |
描述 |
| t_ds_jdbc_registry_data |
存储注册中心数据。 |
| t_ds_jdbc_registry_lock |
管理分布式锁。 |
| t_ds_jdbc_registry_client_heartbeat |
记录客户端心跳信息。 |
| t_ds_jdbc_registry_data_change_event |
记录数据变更事件。 |
表关系示意图
下图展示了关键表之间的关系:
![]()
模式演化的重要变更
3.3.0 版本
-
将“process”前缀表重命名为“workflow”:
t_ds_process_definition→t_ds_workflow_definition
t_ds_process_instance→t_ds_workflow_instance
t_ds_process_task_relation→t_ds_workflow_task_relation 及对应 log 表
-
新增 JDBC 注册表:t_ds_jdbc_registry_data、t_ds_jdbc_registry_lock、t_ds_jdbc_registry_client_heartbeat、t_ds_jdbc_registry_data_change_event
-
新增任务血缘表:t_ds_workflow_task_lineage
-
任务类型 SUB_PROCESS 改为 SUB_WORKFLOW
3.2.0 版本
- 新增项目参数表和项目偏好设置表:
t_ds_project_parameter、t_ds_project_preference
- 流程定义表新增执行类型字段:
execution_type
- 任务表新增缓存能力字段:
is_cache、cache_key
- 引入任务测试标记(task test flag)功能
功能分类的模式详情
工作流定义与执行
工作流定义表存储工作流的结构和配置,实例表跟踪执行情况。
存储在工作流定义表中的关键元数据:
- 工作流代码(唯一标识)
- 工作流名称和描述
- 全局参数
- 超时设置
- 告警组设置
- 执行类型(并行、串行等待、串行丢弃、串行优先)
![]()
任务定义与执行
任务定义表存储任务配置,实例表跟踪执行。
关键元数据包括:
- 任务代码(唯一标识)
- 任务名称和描述
- 任务类型(SHELL、SQL、SPARK 等)
- 任务参数(针对具体类型)
- 资源需求(CPU、内存)
- 超时设置
- 重试配置
- Worker 组分配
![]()
用户与安全管理
安全模型包括:
- 用户密码认证
- 会话管理
- 基于访问令牌的 API 认证
- 通过租户系统实现多租户
- 资源级权限控制
![]()
总结
DolphinScheduler 的数据库模式覆盖了工作流调度的各个环节,包括定义、执行跟踪、资源管理和安全控制。 随着版本迭代,该模式不断演进,尤其是 3.3.0 版本,将许多“process”表改为“workflow”,更准确地反映其功能。
理解这一数据库模式有助于:
- 为 DolphinScheduler 开发新功能
- 通过数据库排查问题
- 构建自定义报表或集成解决方案
- 升级版本时理解数据模型