2012-10-26 80 views
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 | 
    +----+-------------------------+------------+-----+ 

 

工作dependant_box可能有相关性 - 即使several-,另一个表中描述:

 


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

 

因此,假设您输入工作nam e,在这种情况下是“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是一个单一的工作条目。

回答