Camunda 流程存储库中的性能和指标
Performance and indexes in Camunda process repository
几天来,我一直在评估 camunda 在我的 Tomcat 应用程序中使用 embedded,但我对 [=32= 提出了一些性能担忧]assignees 和变量,以进一步过滤我的存储库。有一些简单的用例场景对我有实际用处:
1) 筛选分配给特定用户的所有活动任务。
2) 筛选与客户关联的所有活动流程实例。
3) 从与客户关联的流程实例中过滤所有活动任务。
所以我更担心的是:
a - 我可以依赖用例 1 具有 数据库索引 的受让人,这些受让人将来会很好地执行人口密集的任务 table 吗?
b - 为了完成用例 2,我会将客户 ID 作为 流程级变量 添加到我的流程实例中以进一步过滤它们。 variables 是否也被索引 - 假设受让人是? (假设我需要查询具有给定变量集的 100 万个进程中的 20 个进程 table)
c - 最后,从性能的角度来看,我是否应该在每个任务中复制客户 id 变量,然后过滤它们而不检查相应的流程实例?
ps1:我使用的是postgres数据库作为存储库,对BPM引擎下的底层结构和索引没有完全的了解。如果需要一些理解来创建默认情况下不可用的索引,我希望能提供一些线索 tables/columns 我应该继续努力。
ps2:我不是在处理关键的并发软件,但在不久的将来可能会有很大的数据库负载。
如果您对数据库结构等感兴趣,可以查看一些内容。数据库结构在[1]
中描述
您还可以通过查看预打包的发行版来查看数据库创建脚本。对于 Tomcat,查看文件夹 sql/create。
回答您的具体问题;
有个叫ACT_RU_TASK的table。这具有运行时任务。查看 Postgresql 的 SQL 脚本,在 ACT_RU_TASK(ASSIGNEE_) 上有一个索引 ACT_IDX_TASK_ASSIGNEE。因此看起来任务分配者有一个索引。
变量稍微复杂一些,因为变量类型可能决定它的实际存储位置。
businessKey 上有一个索引,因此如果您使用 businessKey 来存储客户 ID,您可能会从 businessKey 中获得一些牵引力。
除了必要时在适当的位置添加索引外,另一种要考虑的技术是添加您自己的 table,这是引擎中的索引。例如,使用任务或流程生命周期事件侦听器等,您可以使 table 与查找值保持同步。因此,您可以保留 table 客户 ID 和流程或任务 ID,或某个变量和任务 ID 等。一旦 table 到位,您就可以添加客户 sql 或插件使用该功能。
[1] https://docs.camunda.org/manual/7.4/user-guide/process-engine/database/
(由 Webcyberrob 在 https://forum.camunda.org/t/performance-and-indexes-in-camunda-process-repository/650 回答)
几天来,我一直在评估 camunda 在我的 Tomcat 应用程序中使用 embedded,但我对 [=32= 提出了一些性能担忧]assignees 和变量,以进一步过滤我的存储库。有一些简单的用例场景对我有实际用处:
1) 筛选分配给特定用户的所有活动任务。
2) 筛选与客户关联的所有活动流程实例。
3) 从与客户关联的流程实例中过滤所有活动任务。
所以我更担心的是:
a - 我可以依赖用例 1 具有 数据库索引 的受让人,这些受让人将来会很好地执行人口密集的任务 table 吗?
b - 为了完成用例 2,我会将客户 ID 作为 流程级变量 添加到我的流程实例中以进一步过滤它们。 variables 是否也被索引 - 假设受让人是? (假设我需要查询具有给定变量集的 100 万个进程中的 20 个进程 table)
c - 最后,从性能的角度来看,我是否应该在每个任务中复制客户 id 变量,然后过滤它们而不检查相应的流程实例?
ps1:我使用的是postgres数据库作为存储库,对BPM引擎下的底层结构和索引没有完全的了解。如果需要一些理解来创建默认情况下不可用的索引,我希望能提供一些线索 tables/columns 我应该继续努力。
ps2:我不是在处理关键的并发软件,但在不久的将来可能会有很大的数据库负载。
如果您对数据库结构等感兴趣,可以查看一些内容。数据库结构在[1]
中描述您还可以通过查看预打包的发行版来查看数据库创建脚本。对于 Tomcat,查看文件夹 sql/create。
回答您的具体问题; 有个叫ACT_RU_TASK的table。这具有运行时任务。查看 Postgresql 的 SQL 脚本,在 ACT_RU_TASK(ASSIGNEE_) 上有一个索引 ACT_IDX_TASK_ASSIGNEE。因此看起来任务分配者有一个索引。
变量稍微复杂一些,因为变量类型可能决定它的实际存储位置。
businessKey 上有一个索引,因此如果您使用 businessKey 来存储客户 ID,您可能会从 businessKey 中获得一些牵引力。
除了必要时在适当的位置添加索引外,另一种要考虑的技术是添加您自己的 table,这是引擎中的索引。例如,使用任务或流程生命周期事件侦听器等,您可以使 table 与查找值保持同步。因此,您可以保留 table 客户 ID 和流程或任务 ID,或某个变量和任务 ID 等。一旦 table 到位,您就可以添加客户 sql 或插件使用该功能。
[1] https://docs.camunda.org/manual/7.4/user-guide/process-engine/database/
(由 Webcyberrob 在 https://forum.camunda.org/t/performance-and-indexes-in-camunda-process-repository/650 回答)