【问题标题】:Persisting dynamic data in the database for workflow execution将动态数据保存在数据库中以执行工作流
【发布时间】:2017-07-10 22:05:31
【问题描述】:

我们有一个 Java 应用程序,用于调度和执行多个彼此独立的工作流。对于每个工作流执行,可以有“n”个与之关联的变量,其值取决于用于该工作流执行的源数据。

所以,让我们说,对于工作流 W1,我们有 10 个与之关联的变量。同样,对于工作流 W2,我们有 8 个变量,对于工作流 W3,我们有 6 个变量。要求是将这些变量信息(对于每个工作流执行)保存在某处,以便在执行后,业务用户可以在应用程序仪表板中跟踪这些变量并搜索该信息。

方法 1:最初,我们考虑创建一个数据库表来跟踪这些变量 - 每个工作流一个。但是这个想法被放弃了,因为它会导致应用程序中出现大量的数据库表(与应用程序中的许多工作流相同)。此外,在与工作流相关的 10 个变量中,用户可以决定跟踪 5 个变量或 8 个变量或全部 10 个(取决于它想要什么)。因此,很难根据用户选择跟踪的变量不断更改数据库表的列(用于变量跟踪)。

方法 2:后来,我们决定创建一个数据库表,其中包含通用列名,如 var1、var2、var 3...最多 var 25,以及 workflowId、workflowName 等列。对于每个工作流,我们维护需要跟踪的实际变量名称与 XML 格式的列名称的映射。因此,对于需要跟踪 4 个变量的工作流,我们将有一个类似的 XML:

<variables>
    <variable name="var1">CustomerId</variable>
    <variable name="var2">PolicyNumber</variable>
    <variable name="var3">ReferenceCode</variable>
    <variable name="var4">Type</variable>
</variables>

在运行时,我们会将工作流执行变量数据插入到用于跟踪的数据库表中。在仪表板中显示数据的同时,我们将解析上述 XML,映射数据库表中的数据并显示。但是这种方法看起来有点复杂,听起来并不是最好的方法。

我的问题是:方法 2 是否可行,或者有更好的方法来保存此信息?在这种情况下有什么建议可以遵循吗?

【问题讨论】:

    标签: java sql-server database database-design


    【解决方案1】:

    我会使用垂直方法来创建一个表来保存变量。您的表格只需要三列即可处理任意数量的工作流:

    WorkflowID    VariableNumber    VariableValue
    

    WorkflowID 是您为其保存变量的工作流的唯一 ID。 VariableNumber 是该工作流使用的变量的序号。

    (上面的两列构成表的主键,顺便说一句)

    VariableValue 是您在表中为该变量/工作流保存的值。

    因此,如果一个工作流有 10 个变量,那么表中将有 10 行对应 WorkflowID

    【讨论】:

    • 感谢您的好建议。我在这里看到的唯一问题是,对于每个工作流执行,它将有多行(取决于变量的数量)。这可能会导致表中的行数过多。想法?
    • 我的想法是这样就可以了。在这样一个只有 3 列的窄表上,加上 WorkflowID 和 VariableNumber 上的聚集索引,即使您进入数十亿行,性能也会非常快。
    • Allerman:在我们的例子中,一种常见的情况是一个变量可以有多个值。例如,如果工作流正在处理采购订单文件,它可能有多个需要跟踪的订单号。所以,一个工作流实例可以有多个变量——那么删除 WorkflowID 和 VariableNumber 列上的唯一约束(或主键)是否有意义?如果是,当表变大时是否会影响性能?
    • 没有唯一约束对我来说没有意义。您如何跟踪哪个订单号是哪个?如果订单有“OrderNumber1”和“OrderNumber2”等,但不是多个变量都命名为“OrderNumber”,这对我来说是有意义的。
    • 我明白你的意思了,谢谢!但是有没有其他推荐的方法来持久化可以有多个值的变量?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 2016-05-05
    • 2020-04-17
    相关资源
    最近更新 更多