流程的建议/推荐引擎

时间:2012-10-26 16:59:54

标签: java algorithm oracle autosuggest recommendation-engine

我有一些表包含多个作业,依赖项和已用时间。引擎的目的是当您插入作业的名称时,它会为您提供有关要检查哪些过程以使其更快的建议。

例如,给出下一个表格:



    jobs
    +----+-------------------------+------------+-----+
    | id | job_name                | parent_job |type |
    +----+-------------------------+------------+-----+
    | 1  | delete_everything_box   |            |b    |
    | 2  | delete_everything       | 2          |j    |
    | 3  | another_job             |            |j    |
    | 4  | dependant_box           |            |b    |
    | 5  | dependant_job_1         | 4          |j    |
    | 6  | dependant_job_2         | 4          |j    |
    +----+-------------------------+------------+-----+


Job dependant_box可能有一个依赖项 - 即几个 - ,在另一个表中描述:



    dependencies
    +--------+-------------------------+------+
    | job_id | condition_job           | type |
    +--------+-------------------------+------+
    | 4      | delete_everything_box   | b    |
    +--------+-------------------------+------+


然后,您有一个表格,其中存储了每个经过的时间(A):



    timings
    +--------+----------------------+---------------------+----------+-----------------+
    | job_id | start_time           | end_time            | status   | elapsed_time    |
    +--------+----------------------+---------------------+----------+-----------------+
    | 1      | 2012/09/19 02:57:35  | 2012/09/20 02:59:38 | success  | 86523           |
    | 2      | 2012/09/19 02:57:36  | 2012/09/20 02:59:37 | success  | 86521           |
    | 3      | 2012/09/19 02:57:36  | 2012/09/19 02:59:37 | success  | 121             |
    | 4      | 2012/09/20 02:59:39  | 2012/09/20 03:05:02 | success  | 323             |
    | 5      | 2012/09/20 02:59:40  | 2012/09/20 03:01:01 | success  | 81              |
    | 6      | 2012/09/20 02:59:40  | 2012/09/20 03:05:01 | success  | 321             |
    +--------+----------------------+---------------------+----------+-----------------+


所以,假设您输入了一个工作名称,在本例中为“delete_everything_box”。从A中,您可以推断出* delete_everything *是罪魁祸首。但还有另一种情况(B):


timings

    +--------+----------------------+---------------------+----------+-----------------+
    | job_id | start_time           | end_time            | status   | elapsed_time    |
    +--------+----------------------+---------------------+----------+-----------------+
    | 1      | 2012/09/19 02:57:35  | 2012/09/20 02:59:38 | success  | 86523           |
    | 2      | 2012/09/19 02:57:36  | 2012/09/20 02:59:37 | success  | 86521           |
    | 3      | 2012/09/19 02:57:36  | 2012/09/19 02:59:37 | success  | 121             |
    | 4      | 2012/09/19 02:57:35  | 2012/09/20 03:05:02 | success  | 86847           |
    | 5      | 2012/09/20 02:59:39  | 2012/09/20 03:01:01 | success  | 82              |
    | 6      | 2012/09/20 02:59:39  | 2012/09/20 03:05:01 | success  | 322             |
    +--------+----------------------+---------------------+----------+-----------------+


如果你输入名称dependant_box,它会告诉你* delete_everything *是罪魁祸首。这是因为它具有依赖关系,它将等待所有依赖关系满足以开始运行。也可能会发生多个作业被链接,因此您必须检查所有作业,或者至少检查5个作业时间。

因此,根据给定的信息,它应该显示10个要优化的候选者,这些候选者将被输入引擎。也可能发生一些工作无法修复,因此不应该显示它们。此外,可能会有一些工作需要更长时间或链接,但权重是基于已用时间。

表存储在oracle中,语言应该是java。

你有什么建议?我们正在讨论为团队开发自动化工具来检查花费更长时间的工作。如果您能指出算法,库等,我们将不胜感激。

我忘记提及: b 表示包含1个或多个作业(j)的框。 j 是一个单一的职位。

1 个答案:

答案 0 :(得分:0)

有一些很棒的开源工具可用于Java,你提到的功能;看看这两个:

  1. Drools Planner
  2. Quartz Scheduler