我有一些包含多个作业、依赖项和经过时间的表。该引擎的目的是,当您插入作业名称时,它会为您提供有关检查哪些流程以使其更快的建议。
例如,给定下表:
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是单个作业条目。