Camunda引擎fork自Activiti,因此能在camunda的设计中看到大量Activiti的影子。其核心设计依赖于数据库表,用于持久化流程的状态、历史记录、任务、变量等数据。相比于Activiti,Camunda在版本 7.19 中,Camunda 对其数据库架构进行了优化和调整,以提高性能和可扩展性。本文将详细介绍 Camunda 7.19 的数据库表设计,帮助开发者更好地理解其结构和功能。
一、表结构整体概述
camunda7.19.0初始化脚本中共包含49张表:
完整的49张表及其说明如下:
| 分类 | 表名称 | 描述 |
|---|---|---|
| 资源存储 | act_re_deployment | 流程部署表 |
| 资源存储 | act_re_procdef | BPMN流程模型定义表 |
| 资源存储 | act_re_case_def | CMMN案例管理模型定义表 |
| 资源存储 | act_re_decision_def | DMN决策模型定义表 |
| 资源存储 | act_re_decision_req_def | 决策请求定义 |
| 运行时 | act_ru_authorization | 流程运行时收取表 |
| 运行时 | act_ru_batch | 流程执行批处理表 |
| 运行时 | act_ru_case_execution | CMMN案例运行执行表 |
| 运行时 | act_ru_case_sentry_part | 案例触发相关表 |
| 运行时 | act_ru_event_subscr | 流程事件订阅表 |
| 运行时 | act_ru_execution | BPMN流程运行时记录表 |
| 运行时 | act_ru_ext_task | 流程任务消息执行表 |
| 运行时 | act_ru_filter | 流程定义查询配置表 |
| 运行时 | act_ru_identitylink | 运行时流程人员表 |
| 运行时 | act_ru_incident | 运行时异常事件表 |
| 运行时 | act_ru_job | 流程运行时作业表 |
| 运行时 | act_ru_jobdef | 流程作业定义表 |
| 运行时 | act_ru_meter_log | 流程运行时度量日志表 |
| 运行时 | act_ru_task | 流程运行时任务表 |
| 运行时 | act_ru_variable | 流程运行时变量表 |
| 组织用户信息 | act_id_group | 群组信息表 |
| 组织用户信息 | act_id_info | 用户扩展信息表 |
| 组织用户信息 | act_id_membership | 用户群组关系表 |
| 组织用户信息 | act_id_tenant | 租户信息表 |
| 组织用户信息 | act_id_tenant_member | 用户租户关系表 |
| 组织用户信息 | act_id_user | 用户信息表 |
| 历史记录 | act_hi_actinst | 历史的活动实例表 |
| 历史记录 | act_hi_attachment | 历史的流程附件表 |
| 历史记录 | act_hi_batch | 历史的批处理记录表 |
| 历史记录 | act_hi_caseactinst | 历史的CMMN活动实例表 |
| 历史记录 | act_hi_caseinst | 历史的CMMN实例表 |
| 历史记录 | act_hi_comment | 历史的流程审批意见表 |
| 历史记录 | act_hi_dec_in | 历史的DMN变量输入表 |
| 历史记录 | act_hi_dec_out | 历史的DMN变量输出表 |
| 历史记录 | act_hi_decinst | 历史的DMN实例表 |
| 历史记录 | act_hi_detail | 历史的流程运行时变量详情记录表 |
| 历史记录 | act_hi_ext_task_log | 历史的流程任务消息执行表 |
| 历史记录 | act_hi_identitylink | 历史的流程运行过程中用户关系 |
| 历史记录 | act_hi_incident | 历史的流程异常事件记录表 |
| 历史记录 | act_hi_job_log | 历史的流程作业记录表 |
| 历史记录 | act_hi_op_log | 历史操作日志表 |
| 历史记录 | act_hi_procinst | 历史的流程实例 |
| 历史记录 | act_hi_taskinst | 历史的任务实例 |
| 历史记录 | act_hi_varinst | 历史的流程变量记录表 |
| 通用数据 | act_ge_bytearray | 流程引擎二进制数据表 |
| 通用数据 | act_ge_property | 流程引擎属性配置表 |
| 通用数据 | act_ge_schema_log | 数据库脚本执行日志表 |
Camunda流程引擎是在activiti的基础上做的升级,因此整个库表设计能够看到大量activiti库表设计的影子。表名称都以ACT开头,第二部分是表的用例的两个字符标识,此用例也将与服务API大致匹配,主要分为:GE,RU,ID,HI,GE等5类表,每种类型说明如下:
- ACT_RE_*:RE代表资源repositpry。如流程定义和流程资源(bmmn对应的xml文件、图片、规则等)。
- ACT_RU_*:RU代表运行状态。这些是包含流程实例、用户任务、变量、作业等运行时数据的运行时表。引擎仅在流程实例执行期间存储运行时数据,并在流程实例结束时删除记录并进入历史表,从而保证这使运行时表不会随着流程引擎的持续运行膨胀。
- ACT_ID_*:ID代表身份。这些表包含用户、组等标识信息。
- ACT_HI_*:HI代表历史history。这些表包含历史数据,如过去的流程实例、变量、任务等。
- ACT_GE_*:geeral代表通用数据,用于各种用例。
流程引擎的主表是流程定义、执行、任务、变量和事件订阅的实体。它们之间的关系如下面的UML模型所示。
核心表设计如下:
流程定义(ACT_RE_PROCDEF)
ACT_RE_PROCDEF表包含所有已部署的流程定义。它包括版本详细信息、资源名称或挂起状态等信息。
| 字段名称 | 字段类型 | 描述 |
|---|---|---|
| ID_ | varchar(64) | 主键 |
| REV_ | int(11) | 版本 |
| CATEGORY_ | varchar(255) | 流程定义的Namespace分类 |
| NAME_ | varchar(255) | 流程定义名称 |
| KEY_ | varchar(255) | 流程定义KEY |
| VERSION_ | int(11) | 流程定义版本号 |
| DEPLOYMENT_ID_ | varchar(64) | 部署ID |
| RESOURCE_NAME_ | varchar(4000) | 资源名称 |
| DGRM_RESOURCE_NAME_ | varchar(4000) | DGRM资源名称 |
| HAS_START_FORM_KEY_ | tinyint(4) | 是否有启动表单 |
| SUSPENSION_STATE_ | int(11) | 流程挂起 |
| TENANT_ID_ | varchar(64) | 租户ID |
| VERSION_TAG_ | varchar(64) | 版本标签 |
| HISTORY_TTL_ | int(11) | 过期时间,用于清理 |
| STARTABLE_ | tinyint(1) | 是否是可启动流程 |
流程实例(ACT_HI_PROCINST)
该表存储了流程实例的历史数据。它记录了流程实例的启动、结束时间等信息。表的字段如下:
| 字段名称 | 字段类型 | 描述 |
|---|---|---|
| ID_ | varchar(64) | 主键 |
| PROC_INST_ID_ | varchar(64) | 流程实例ID |
| BUSINESS_KEY_ | varchar(255) | 业务KEY |
| PROC_DEF_KEY_ | varchar(255) | 流程定义KEY |
| PROC_DEF_ID_ | varchar(64) | 流程定义ID |
| START_TIME_ | datetime | 开始时间 |
| END_TIME_ | datetime | 结束时间 |
| REMOVAL_TIME_ | datetime | 移除时间 |
| DURATION_ | bigint(20) | 耗时 |
| START_USER_ID_ | varchar(255) | 启动人ID |
| START_ACT_ID_ | varchar(255) | 启动节点ID |
| END_ACT_ID_ | varchar(255) | 结束节点ID |
| SUPER_PROCESS_INSTANCE_ID_ | varchar(64) | 父流程实例ID |
| ROOT_PROC_INST_ID_ | varchar(64) | 流程实例根ID |
| SUPER_CASE_INSTANCE_ID_ | varchar(64) | 父案例实例ID |
| CASE_INST_ID_ | varchar(64) | 案例实例ID |
| DELETE_REASON_ | varchar(4000) | 删除原因 |
| TENANT_ID_ | varchar(64) | 租户ID |
| STATE_ | varchar(255) | 状态 |
流程执行(ACT_RU_EXECUTION)
ACT_RU_EXECUTION表包含所有当前执行。它包括流程定义、父执行、业务键、当前活动和有关执行状态的不同元数据等信息。
| 字段名称 | 字段类型 | 描述 |
|---|---|---|
| ID_ | varchar(64) | 主键 |
| REV_ | int(11) | 版本 |
| EVENT_TYPE_ | varchar(255) | 事件类型 |
| EVENT_NAME_ | varchar(255) | 事件名称 |
| EXECUTION_ID_ | varchar(64) | 执行ID |
| PROC_INST_ID_ | varchar(64) | 流程实例ID |
| ACTIVITY_ID_ | varchar(255) | 节点ID |
| CONFIGURATION_ | varchar(255) | 配置 |
| CREATED_ | datetime | 创建时间 |
| TENANT_ID_ | varchar(64) | 租户ID |
待办任务(ACT_RU_TASK)
ACT_RU_TASK表包含所有正在运行的流程实例的所有打开的任务。它包括相应的流程实例、执行以及元数据(如创建时间、受理人或截止日期)等信息。
| 字段名称 | 字段类型 | 描述 |
|---|---|---|
| ID_ | varchar(64) | 主键 |
| REV_ | int(11) | 版本 |
| EXECUTION_ID_ | varchar(64) | 流程执行ID |
| PROC_INST_ID_ | varchar(64) | 流程实例ID |
| PROC_DEF_ID_ | varchar(64) | 流程定义ID |
| CASE_EXECUTION_ID_ | varchar(64) | 案例执行ID |
| CASE_INST_ID_ | varchar(64) | 案例实例ID |
| CASE_DEF_ID_ | varchar(64) | 案例定义ID |
| NAME_ | varchar(255) | 名称 |
| PARENT_TASK_ID_ | varchar(64) | 父任务ID |
| DESCRIPTION_ | varchar(4000) | 描述 |
| TASK_DEF_KEY_ | varchar(255) | 任务定义KEY |
| OWNER_ | varchar(255) | 委托人 |
| ASSIGNEE_ | varchar(255) | 办理人 |
| DELEGATION_ | varchar(64) | 委托状态 |
| PRIORITY_ | int(11) | 优先级 |
| CREATE_TIME_ | datetime | 创建时间 |
| DUE_DATE_ | datetime | 截止时间 |
| FOLLOW_UP_DATE_ | datetime | 跟踪时间 |
| SUSPENSION_STATE_ | int(11) | 挂起状态 |
| TENANT_ID_ | varchar(64) | 租户ID |
流程变量(ACT_RU_VARIABLE)
ACT_RU_VARIABLE表包含所有当前设置的流程或任务变量。它包括变量的名称、类型和值,以及有关相应流程实例或任务的信息。
| 字段名称 | 字段类型 | 描述 |
|---|---|---|
| ID_ | varchar(64) | 主键 |
| REV_ | int(11) | 版本 |
| TYPE_ | varchar(255) | 变量类型 |
| NAME_ | varchar(255) | 变量名称 |
| EXECUTION_ID_ | varchar(64) | 流程执行ID |
| PROC_INST_ID_ | varchar(64) | 流程实例ID |
| CASE_EXECUTION_ID_ | varchar(64) | 案例执行ID |
| CASE_INST_ID_ | varchar(64) | 案例实例ID |
| TASK_ID_ | varchar(64) | 任务ID |
| BYTEARRAY_ID_ | varchar(64) | 二进制内容ID |
| DOUBLE_ | double | DOUBLE类型值 |
| LONG_ | bigint(20) | LONG类型值 |
| TEXT_ | varchar(4000) | 文本值 |
| TEXT2_ | varchar(4000) | 文本值 2 |
| VAR_SCOPE_ | varchar(64) | 变量范围 |
| SEQUENCE_COUNTER_ | bigint(20) | 序列计数器 |
| IS_CONCURRENT_LOCAL_ | tinyint(4) | 是否并发 |
| TENANT_ID_ | varchar(64) | 租户ID |
事件订阅(ACT_RU_EVENT_SUBSCR)
ACT_RU_EVENT_SUBSCR表包含所有当前存在的事件预订。它包括预期事件的类型、名称和配置,以及有关相应流程实例和执行的信息。
| 字段名称 | 字段类型 | 描述 |
|---|---|---|
| ID_ | varchar(64) | 主键 |
| REV_ | int(11) | 版本 |
| EVENT_TYPE_ | varchar(255) | 事件类型 |
| EVENT_NAME_ | varchar(255) | 事件名称 |
| EXECUTION_ID_ | varchar(64) | 执行ID |
| PROC_INST_ID_ | varchar(64) | 流程实例ID |
| ACTIVITY_ID_ | varchar(255) | 节点ID |
| CONFIGURATION_ | varchar(255) | 配置 |
| CREATED_ | datetime | 创建时间 |
| TENANT_ID_ | varchar(64) | 租户ID |
二、camunda表结构-实体关系图
数据库不是公共API的一部分。数据库架构可能会因次要和主要版本更新而更改。
请注意:以下图表基于MySQL数据库模式,对于其他数据库,关系图可能略有不同。
下面的实体关系图可视化数据库表及其显式外键约束,按BPMN引擎、DMN引擎、CMMN引擎、引擎历史记录和标识分组。请注意,图表不会将表之间的隐式连接可视化。
2.1、BPMN流程引擎
BPMN引擎共20张表,它们的实体定义和表关系如下:
BPMN引擎数据库表说明:
| 表名称 | 表用途说明 |
|---|---|
| ACT_GE_PROPERTY | 流程引擎参数信息表 |
| ACT_GE_SCHEMA_LOG | 数据库版本日志表 |
| ACT_RE_PROCDEF | BPMN流程模型定义表 |
| ACT_RE_DEPLOYMENT | BPMN流程模型部署表 |
| ACT_RE_CAMFORMDEF | 流程表单定义表 |
| ACT_GE_BYTEARRAY | 二进制数据存储表(BPMN模型、表单、脚本、决策表等流程引擎所需的二进制数据) |
| ACT_RU_TASK_METER_LOG | Task任务性能指标日志表 |
| ACT_RU_EXECUTION | 流程引擎执行实例表 |
| ACT_RU_JOB | 定时器作业运行表 |
| ACT_RU_JOBDEF | 定时器作业定义表 |
| ACT_RU_VARLABLE | 流程运行时变量表 |
| ACT_RU_EXT_TASK | 外部任务待办表 |
| ACT_RU_INCIDENT | 运行时异常记录表 |
| ACT_RU_AUTHORIZATION | 资源授权权限表 |
| ACT_RU_FILTER | 流程查询过滤器定义表 |
| ACT_RU_METER_LOG | 流程指标日志记录表 |
| ACT_RU_TASK | 待办任务表 |
| ACT_RU_EVENT_SUBSCR | 事件订阅表 |
| ACT_RU_IDENTITYLINK | 流程处理用户ID关联表 |
| ACT_RU_BATCH | 流程批处理信息表 |
2.2、DMN决策引擎
DMN引擎数据库表说明:
| 表名称 | 表用途说明 |
|---|---|
| ACT_RE_DECISION_DEF | DMN决策定义表 |
| ACT_RE_DECISION_REQ_DEF | DMN决策需求定义表 |
2.3、CMMN案例引擎
CMMN(案例)引擎共5张表,其中待办任务和变量表,复用流程引擎的ACT_RU_TASK和ACT_RU_VARLABLE表。
CMMN(案例)引擎数据库表说明:
| 表名称 | 表用途说明 |
|---|---|
| ACT_RE_CASE_DEF | CMMN模型定义表 |
| ACT_RU_CASE_EXECUTION | CMMN实例执行信息表 |
| ACT_RU_CASE_SENTRY_PART | CMMN案例实例中的哨兵条件配置和评估结果信息表 |
| ACT_RU_TASK | 待办任务表,跟BPMN引擎复用一张表 |
| ACT_RU_VARLABLE | 流程运行时变量表,跟BPMN引擎复用一张表 |
2.4、实例历史记录表
camunda流程实例历史记录表共18张表,为了允许不同的配置并使表更加灵活,历史表不包含外键约束
流程实例历史记录数据库表说明:
| 表名称 | 表用途说明 |
|---|---|
| ACT_HI_PROCINST | 流程实例的历史记录表 |
| ACT_HI_ACTINST | 活动实例的历史记录表 |
| ACT_HI_ATTACHMENT | 流程附件的历史记录表 |
| ACT_HI_BATCH | 批处理的历史记录表 |
| ACT_HI_COMMENT | 流程审批意见的历史记录表 |
| ACT_HI_DETAIL | 流程变量详情的历史记录表 |
| ACT_HI_EXT_TASK_LOG | 外部任务执行日志的历史记录表 |
| ACT_HI_IDENTITYLINK | 待办处理用户关系的历史记录表 |
| ACT_HI_INCIDENT | 流程异常事件的历史记录表 |
| ACT_HI_JOB_log | 定时作业的历史记录表 |
| ACT_HI_OP_log | 操作日志的历史记录表 |
| ACT_HI_TASKINST | 流程待办任务的历史记录表 |
| ACT_HI_VARINST | 流程变量的历史记录表 |
| ACT_HI_DECINST | DMN决策实例的历史记录表 |
| ACT_HI_DEC_IN | DMN决策变量输入的历史记录表 |
| ACT_HI_DEC_OUT | DMN决策变量输出的历史记录表 |
| ACT_HI_CASEINST | CMMN实例的历史记录表 |
| ACT_HI_CASEACTINST | CMMN活动实例的历史记录表 |
2.5、组织用户身份表
用户身份数据库表说明:
| 表名称 | 表用途说明 |
|---|---|
| ACT_ID_USER | 用户信息表 |
| ACT_ID_GROUP | 群组信息表 |
| ACT_ID_MEMBERSHIP | 用户群组关系表 |
| ACT_ID_INFO | 用户扩展信息表 |
| ACT_ID_TENANT | 租户信息表 |
| ACT_ID_TENANT_MEMBER | 租户成员表 |
本文引用列表
注:本文主要引用[1],文章内容在其基础上对部分描述加以本人的理解做了修改。针对全部49表的详细介绍可见[2]。
[1] camunda数据库表结构详细说明
[2] camunda数据库表结构介绍