2012-10-26 81 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是一個單一的工作條目。

回答