
Flowable作为一款强大的开源业务流程管理(BPM)引擎,其数据库表结构设计体现了模块化、高效性和可扩展性。本文将从表命名规则、核心引擎表结构及功能模块表三个方面,全面解析Flowable的数据库表设计。

Flowable的表名遵循前缀+功能标识+后缀的命名规则,便于快速识别表的用途和所属模块:
示例:
流程引擎是Flowable的核心,相关表分为运行时表、历史表和模型仓库表。
CMMN(案例管理模型和符号)用于处理非结构化流程。
DMN(决策模型和符号)用于定义和执行业务规则。
Flowable的表通过关键字段(如PROCINST_ID、 TASKID)建立关联。以下是一个简化的表关系示例:
ACT_RE_PROCDEF (流程定义)
└── PROC_DEF_ID_ → ACT_RU_EXECUTION (流程实例)
└── PROC_INST_ID_ → ACT_RU_TASK (任务)
└── TASK_ID_ → ACT_HI_TASKINST (任务历史)说明:
CREATE INDEX idx_proc_inst_id ON ACT_RU_EXECUTION (PROC_INST_ID_);BPM引擎 | 相似点 | 差异点 | 表结构特点 |
|---|---|---|---|
Activiti | • 与Flowable共享基础表结构 • 运行时/历史数据分离架构 • 相同的ACT_前缀命名 | • 缺少CMMN和DMN支持 • 功能扩展性较弱 • 较少的模块化表设计 | • 核心表相同(ACTRU, ACTHI) • 部署和资源管理表结构一致 • 缺少Flowable特有的FLW_前缀表 |
Camunda | • 类似的命名约定(ACT_前缀) • 运行时/历史数据分离 • 基本流程概念相近 | • 字段命名和设计有差异 • 增加了特有的CAM_前缀表 • 批处理功能表结构不同 | • 更多针对企业级场景优化 • 增强的历史数据表 • 独特的授权和用户任务处理表 |
jBPM | • 流程定义和实例概念 • 运行时/历史数据区分 | • 完全不同的表命名规则 • 与Java EE集成的特有表 • 更紧密的Drools规则集成 | • JBPM_前缀 • 更扁平化的表结构 • 与Flowable相比表数量更少 |
与Flowable相比,Activiti作为其前身提供了基础架构,但功能较为基础;Camunda虽有相似表结构,但针对企业级应用进行了更多优化;jBPM则采用完全不同的设计理念,与Drools规则引擎的集成更为紧密。Flowable在继承Activiti基础上,通过增加CMMN、DMN支持和更丰富的扩展模块表结构,提供了更全面的BPM解决方案。

在一个请假审批流程中:
在高并发场景下,ACTRU_TASK表的任务查询可能变慢。通过为PROC_INST_ID和TASKDEF_KEY创建复合索引,可显著提升性能:
CREATE INDEX idx_task_proc_def ON ACT_RU_TASK (PROC_INST_ID_, TASK_DEF_KEY_);对于历史数据量大的系统,可每月执行脚本将ACTHI*表的数据迁移至归档表(如ACT_HI_PROCINST_ARCHIVE),保持主表轻量化。
flowable.database-schema-update=true # 自动校验并更新表结构
flowable.database-schema-update=ignore # 禁用自动管理Flowable通过模块化的表结构设计,将运行时数据(ACTRU)与历史数据(ACTHI)分离,既满足高性能查询需求,又支持长期审计。其命名规则(如ACT、FLW前缀和RU、HI标识)使开发者能快速定位数据位置。结合性能优化、实践案例和未来展望,开发者可充分利用Flowable表结构,优化流程性能、扩展功能并高效解决问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。