0

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

例如,给定下表:



    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    |
    +----+-------------------------+------------+-----+


Jobdependant_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             |
    +--------+----------------------+---------------------+----------+-----------------+


在 B 中,如果您输入名称dependant_box,它会告诉您*delete_everything* 是罪魁祸首。这是因为由于它有依赖关系,它会等到所有依赖关系都满足才开始运行。也可能发生多个作业被链接起来,因此您必须检查所有作业,或者至少检查经过时间较长的 5 个作业。

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

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

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

我忘了提它:b表示包含 1 个或多个工作 (j) 的框。j是单个作业条目。

4

1 回答 1

0

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

  1. 流口水规划师
  2. 石英调度器
于 2012-10-26T17:44:11.393 回答