一種基于多狀態(tài)科學(xué)工作流的數(shù)據(jù)世系追溯系統(tǒng)和方法
【專利摘要】一種基于多狀態(tài)科學(xué)工作流的數(shù)據(jù)世系追溯系統(tǒng)和方法,以基于有向圖的科學(xué)工作流過程模型為基礎(chǔ),對(duì)其進(jìn)行擴(kuò)展,得到一個(gè)擴(kuò)展的科學(xué)工作流過程模型。再利用數(shù)據(jù)世系技術(shù)豐富其數(shù)據(jù)模型部分,從過程和數(shù)據(jù)兩個(gè)角度全方位地描述科學(xué)工作流的執(zhí)行過程,得到基于多狀態(tài)的科學(xué)工作流過程數(shù)據(jù)統(tǒng)一管理模型,并以此對(duì)數(shù)據(jù)世系進(jìn)行描述和追溯。本發(fā)明可以更好地描述大規(guī)模復(fù)雜科學(xué)計(jì)算和協(xié)同研發(fā)流程中數(shù)據(jù)的演化和狀態(tài),從而增強(qiáng)對(duì)流程過程的監(jiān)控能力,實(shí)現(xiàn)流程全方位的管理策略,提高科研效率,并促進(jìn)科學(xué)發(fā)展和技術(shù)進(jìn)步。
【專利說明】一種基于多狀態(tài)科學(xué)工作流的數(shù)據(jù)世系追溯系統(tǒng)和方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明提供了一種基于多狀態(tài)科學(xué)工作流的數(shù)據(jù)世系追溯系統(tǒng)和方法,具體涉及一種多任務(wù)狀態(tài)下科學(xué)工作流程實(shí)例中,各流程節(jié)點(diǎn)之間的數(shù)據(jù)世系關(guān)系追溯方法以及數(shù)據(jù)世系關(guān)系的存儲(chǔ)方式。
【背景技術(shù)】
[0002]在大規(guī)模、復(fù)雜系統(tǒng)設(shè)計(jì)制造過程和科學(xué)實(shí)驗(yàn)中,比如航天器設(shè)計(jì)、輪船制造等,通常需要眾多人員協(xié)同完成大量的、相互依賴關(guān)聯(lián)的等量級(jí)任務(wù)。在這一過程中,顯著的特點(diǎn)就是設(shè)計(jì)過程和實(shí)施過程中涉及到大量任務(wù)和海量數(shù)據(jù),工作流程高度復(fù)雜。
[0003]對(duì)于復(fù)雜工作流程的管理,在過程方面,由于復(fù)雜型號(hào)產(chǎn)品的設(shè)計(jì)過程中通常包括大量的活動(dòng)節(jié)點(diǎn)和參數(shù),同時(shí)又要能夠支持多部門多學(xué)科的協(xié)同設(shè)計(jì)和優(yōu)化,這就要求過程管理應(yīng)關(guān)注于各活動(dòng)節(jié)點(diǎn)之間的數(shù)據(jù)傳遞,以及節(jié)點(diǎn)參數(shù)之間的映射,所以,過程管理需要能夠控制復(fù)雜性,兼顧控制流和數(shù)據(jù)流,支持流程優(yōu)化。
[0004]為了解決復(fù)雜工作流程的過程管理問題,研究人員將工作流技術(shù)被引入到科學(xué)研究領(lǐng)域,提出了科學(xué)工作流(Scientific Workflow, SWF)的概念和模型。工作流可以將工作分解成定義良好的任務(wù)和角色,按照預(yù)先定義好的規(guī)則和過程來執(zhí)行,同時(shí)對(duì)各項(xiàng)任務(wù)進(jìn)行協(xié)調(diào)和監(jiān)控。科學(xué)工作流繼承了工作流的優(yōu)點(diǎn),通過對(duì)任務(wù)間數(shù)據(jù)依賴關(guān)系的分析,提供了優(yōu)化組合的方法,控制各部分在一定約束條件下按序完成,可以有效地控制和管理各活動(dòng)節(jié)點(diǎn)之間的數(shù)據(jù)流動(dòng),推進(jìn)工作流程向下進(jìn)行。對(duì)于科學(xué)研究和復(fù)雜系統(tǒng)設(shè)計(jì)過程中各節(jié)點(diǎn)可能出現(xiàn)的迭代研發(fā)操作,在科學(xué)工作流基礎(chǔ)上增加了節(jié)點(diǎn)的狀態(tài)管理,以支持工作流程中的執(zhí)行、重做等操作。
[0005]在數(shù)據(jù)管理方面,隨著系統(tǒng)復(fù)雜度的提高,所涉及的數(shù)據(jù)越來越多,只關(guān)注集成后的結(jié)果數(shù)據(jù)無法保證數(shù)據(jù)的正確性和一致性,所以分析數(shù)據(jù)的產(chǎn)生和演化的過程對(duì)于評(píng)估數(shù)據(jù)質(zhì)量、保證數(shù)據(jù)的正確性和安全性有很大的作用。基于此,在計(jì)算機(jī)領(lǐng)域中,數(shù)據(jù)世系概念被提出并成為研究熱點(diǎn),其重要性已經(jīng)被多個(gè)科學(xué)工作流項(xiàng)目所認(rèn)可,如GridDB,Chimera, myGRID, CMCS 等。
[0006]在工作流程中,各活動(dòng)節(jié)點(diǎn)能夠在前置節(jié)點(diǎn)完成、輸入數(shù)據(jù)滿足的情況下啟動(dòng)執(zhí)行,執(zhí)行結(jié)束后將得到的數(shù)據(jù)進(jìn)行合理存儲(chǔ),并驅(qū)動(dòng)后續(xù)節(jié)點(diǎn)的執(zhí)行;支持任務(wù)重做功能,當(dāng)一個(gè)活動(dòng)節(jié)點(diǎn)重新執(zhí)行后,其后續(xù)節(jié)點(diǎn)都應(yīng)該獲得消息,提示變更;要求能對(duì)各活動(dòng)節(jié)點(diǎn)歷次執(zhí)行的數(shù)據(jù)進(jìn)行有效的版本管理,可以根據(jù)活動(dòng)節(jié)點(diǎn)的某個(gè)數(shù)據(jù)版本,追溯該版本數(shù)據(jù)是由之前各前置節(jié)點(diǎn)的哪個(gè)版本數(shù)據(jù)所計(jì)算得到的,并繪制成世系圖。
[0007]但是這些系統(tǒng)之間對(duì)數(shù)據(jù)世系的表示和查詢都是不同的。例如,Kepler提供了世系記錄器來實(shí)時(shí)記錄所創(chuàng)建的工作流實(shí)例的信息,這些信息包括了工作流上下文,數(shù)據(jù)歷史,工作流的定義和演化。Taverna則通過使用Semantic網(wǎng)技術(shù)構(gòu)建了四個(gè)層次,用來逐層表示世系數(shù)據(jù):流程層,數(shù)據(jù)層,組織層和知識(shí)層。同樣的RDFProv系統(tǒng)也使用了 Semantic網(wǎng)技術(shù),繼承其可互操作性,擴(kuò)展性等優(yōu)點(diǎn),提供了存儲(chǔ)和查詢關(guān)系數(shù)據(jù)庫管理系統(tǒng)的能力。Chimera使用一種虛擬化數(shù)據(jù)目錄(VDC)的技術(shù),由一組將可執(zhí)行任務(wù)映射到變換,將任務(wù)調(diào)用映射到數(shù)據(jù)變換,將輸入/輸出映射到數(shù)據(jù)對(duì)象的關(guān)系組成。VisTrails則是第一個(gè)除了支持?jǐn)?shù)據(jù)演化歷史,也支持工作流演化世系追蹤的科學(xué)工作流管理系統(tǒng)。
【發(fā)明內(nèi)容】
[0008]針對(duì)當(dāng)前基于科學(xué)工作流的復(fù)雜系統(tǒng)設(shè)計(jì)仿真過程和科學(xué)研究實(shí)驗(yàn)中,缺乏一個(gè)統(tǒng)一的支持多狀態(tài)科學(xué)工作流的數(shù)據(jù)世系描述和追溯方法問題,本發(fā)明提供了一種基于多狀態(tài)科學(xué)工作流的數(shù)據(jù)世系追溯方法,給出了科學(xué)工作流過程執(zhí)行中數(shù)據(jù)世系的組織機(jī)制和挖掘方法。
[0009]本發(fā)明的原理是:以基于有向圖的科學(xué)工作流過程模型為基礎(chǔ),對(duì)其進(jìn)行擴(kuò)展,得到一個(gè)擴(kuò)展的科學(xué)工作流過程模型。再利用數(shù)據(jù)世系技術(shù)豐富其數(shù)據(jù)模型部分,從過程和數(shù)據(jù)兩個(gè)角度全方位地描述科學(xué)工作流的執(zhí)行過程,得到基于多狀態(tài)的科學(xué)工作流過程數(shù)據(jù)統(tǒng)一管理模型,并以此對(duì)數(shù)據(jù)世系進(jìn)行描述和追溯。
[0010]本發(fā)明提供的技術(shù)方案如下:
[0011]一種基于多狀態(tài)科學(xué)工作流的數(shù)據(jù)世系追溯系統(tǒng),其特征是,包括:系統(tǒng)服務(wù)端、用戶端、關(guān)系數(shù)據(jù)庫、數(shù)據(jù)操作單元、邏輯計(jì)算單元;其中,
[0012]所述的系統(tǒng)服務(wù)端,為一臺(tái)或多臺(tái)位于云端或局域網(wǎng)環(huán)境的計(jì)算機(jī),用以接受工作流用戶的工作流執(zhí)行請(qǐng)求以及對(duì)請(qǐng)求作出反應(yīng);
[0013]所述的用戶端,為位于本地的計(jì)算機(jī)終端,是工作流用戶執(zhí)行工作流過程的輸入設(shè)備;
[0014]所述的關(guān)系數(shù)據(jù)庫,用以保存工作流活動(dòng)節(jié)點(diǎn)信息、邏輯節(jié)點(diǎn)信息、數(shù)據(jù)的依賴關(guān)系以及條件約束集等;所述的關(guān)系數(shù)據(jù)庫安裝在系統(tǒng)服務(wù)端;
[0015]所述的數(shù)據(jù)操作單元,和所述的關(guān)系數(shù)據(jù)庫進(jìn)行交互,包括:查詢數(shù)據(jù)、增加數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù);
[0016]所述的邏輯計(jì)算單元,根據(jù)工作流用戶的當(dāng)前工作狀態(tài)進(jìn)行邏輯計(jì)算,通過數(shù)據(jù)操作單元和關(guān)系數(shù)據(jù)庫進(jìn)行交互,并把計(jì)算結(jié)果通過用戶端展現(xiàn)給工作流用戶;
[0017]在工作流用戶第一次執(zhí)行某個(gè)任務(wù)節(jié)點(diǎn)時(shí):所述的邏輯計(jì)算單元,首先,檢查關(guān)系數(shù)據(jù)庫中是否已經(jīng)存在以這個(gè)任務(wù)為后置邏輯節(jié)點(diǎn)的表項(xiàng),如果存在,則更新該表項(xiàng)的當(dāng)前任務(wù)版本;然后,檢查關(guān)系數(shù)據(jù)庫中是否存在以這個(gè)任務(wù)為前置邏輯節(jié)點(diǎn)的表項(xiàng),如果存在,則更新該表項(xiàng)的當(dāng)前任務(wù)版本;如果上述兩項(xiàng)均不存在,則在關(guān)系數(shù)據(jù)庫中新增加一項(xiàng),以當(dāng)前任務(wù)、當(dāng)前任務(wù)后置邏輯節(jié)點(diǎn)以及當(dāng)前任務(wù)版本號(hào)創(chuàng)建,后置邏輯節(jié)點(diǎn)版本號(hào)由后置邏輯節(jié)點(diǎn)執(zhí)行時(shí)填寫;
[0018]在工作流用戶重做某個(gè)任務(wù)節(jié)點(diǎn)時(shí):所述的邏輯計(jì)算單元,首先檢查關(guān)系數(shù)據(jù)庫中是否已經(jīng)存在以這個(gè)任務(wù)為后置邏輯節(jié)點(diǎn)的表項(xiàng),如果有,則新增一項(xiàng),保存已存在的前置任務(wù)版本和當(dāng)前重做的任務(wù)版本之間的關(guān)系;然后,檢查關(guān)系數(shù)據(jù)庫中是否存在以這個(gè)任務(wù)為前置節(jié)點(diǎn)的表項(xiàng),如果有,并且后置節(jié)點(diǎn)還沒有進(jìn)行,則直接改變?cè)擁?xiàng)的前置任務(wù)版本號(hào)為當(dāng)前任務(wù)節(jié)點(diǎn)版本號(hào);如果上述兩項(xiàng)均不存在,則新增加一項(xiàng),以當(dāng)前任務(wù)、當(dāng)前任務(wù)后置邏輯節(jié)點(diǎn)以及當(dāng)前任務(wù)版本號(hào)創(chuàng)建,其后置邏輯節(jié)點(diǎn)版本號(hào)由后置邏輯節(jié)點(diǎn)執(zhí)行時(shí)填寫。[0019]所述的數(shù)據(jù)世系追溯系統(tǒng),其特征是,所述的數(shù)據(jù)操作單元和邏輯計(jì)算單元位于系統(tǒng)服務(wù)端,所述的數(shù)據(jù)世系追溯系統(tǒng)為一個(gè)瘦客戶端系統(tǒng),用戶端的用戶接口為瀏覽器或者用戶自定義系統(tǒng)。
[0020]所述的數(shù)據(jù)世系追溯系統(tǒng),其特征是,所述的數(shù)據(jù)操作單元和邏輯計(jì)算單元位于客戶端,所述的數(shù)據(jù)世系追溯系統(tǒng)為一個(gè)胖客戶端系統(tǒng),用戶端的用戶接口為用戶自定義系統(tǒng)。
[0021]所述的數(shù)據(jù)世系追溯系統(tǒng),其特征是,工作流用戶查詢數(shù)據(jù)世系關(guān)系時(shí),直接在關(guān)系數(shù)據(jù)庫中查詢當(dāng)前任務(wù)和當(dāng)前版本號(hào)所在表項(xiàng)。
[0022]本發(fā)明同時(shí)提供一種基于多狀態(tài)科學(xué)工作流的數(shù)據(jù)世系追溯方法,其特征是,包括:
[0023]構(gòu)建關(guān)系數(shù)據(jù)庫,用以保存工作流節(jié)點(diǎn)的活動(dòng)節(jié)點(diǎn)信息、邏輯節(jié)點(diǎn)信息、數(shù)據(jù)的依賴關(guān)系以及條件約束集等;所述的關(guān)系數(shù)據(jù)庫位于服務(wù)器端;
[0024]在工作流用戶第一次執(zhí)行某個(gè)任務(wù)節(jié)點(diǎn)時(shí):首先,檢查關(guān)系數(shù)據(jù)庫中是否已經(jīng)存在以這個(gè)任務(wù)為后置邏輯節(jié)點(diǎn)的表項(xiàng),如果存在,則更新該表項(xiàng)的當(dāng)前任務(wù)版本;然后,檢查關(guān)系數(shù)據(jù)庫中是否存在以這個(gè)任務(wù)為前置邏輯節(jié)點(diǎn)的表項(xiàng),如果存在,則更新該表項(xiàng)的當(dāng)前任務(wù)版本;如果上述兩項(xiàng)均不存在,則在關(guān)系數(shù)據(jù)庫中新增加一項(xiàng),以當(dāng)前任務(wù)、當(dāng)前任務(wù)后置邏輯節(jié)點(diǎn)以及當(dāng)前任務(wù)版本號(hào)創(chuàng)建,后置邏輯節(jié)點(diǎn)版本號(hào)由后置邏輯節(jié)點(diǎn)執(zhí)行時(shí)填與;
[0025]在工作流用戶重做某個(gè)任務(wù)節(jié)點(diǎn)時(shí):首先檢查關(guān)系數(shù)據(jù)庫中是否已經(jīng)存在以這個(gè)任務(wù)為后置邏輯節(jié)點(diǎn)的表項(xiàng),如果有,則新增一項(xiàng),保存已存在的前置任務(wù)版本和當(dāng)前重做的任務(wù)版本之間的關(guān)系;然后,檢查關(guān)系數(shù)據(jù)庫中是否存在以這個(gè)任務(wù)為前置節(jié)點(diǎn)的表項(xiàng),如果有,并且后置節(jié)點(diǎn)還沒有進(jìn)行,則直接改變?cè)擁?xiàng)的前置任務(wù)版本號(hào)為當(dāng)前任務(wù)節(jié)點(diǎn)版本號(hào);如果上述兩項(xiàng)均不存在,則新增加一項(xiàng),以當(dāng)前任務(wù)、當(dāng)前任務(wù)后置邏輯節(jié)點(diǎn)以及當(dāng)前任務(wù)版本號(hào)創(chuàng)建,其后置邏輯節(jié)點(diǎn)版本號(hào)由后置邏輯節(jié)點(diǎn)執(zhí)行時(shí)填寫。
[0026]所述的數(shù)據(jù)世系追溯方法,其特征是,工作流用戶查詢數(shù)據(jù)世系關(guān)系時(shí),直接在關(guān)系數(shù)據(jù)庫中查詢當(dāng)前任務(wù)和當(dāng)前版本號(hào)所在表項(xiàng)。
[0027]所述的數(shù)據(jù)世系追溯方法,其特征是,各工作流數(shù)據(jù)綁定在工作流節(jié)點(diǎn)上,得到的數(shù)據(jù)世系關(guān)系根據(jù)工作流節(jié)點(diǎn)之間關(guān)系的配置與管理自動(dòng)更新。
[0028]所述的數(shù)據(jù)世系追溯方法,其特征是,所述關(guān)系數(shù)據(jù)庫中,每項(xiàng)工作流節(jié)點(diǎn)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)中應(yīng)至少存儲(chǔ)以下節(jié)點(diǎn)信息:當(dāng)前節(jié)點(diǎn)引用〈CurrentNode〉,當(dāng)前節(jié)點(diǎn)數(shù)據(jù)版本號(hào)〈CurrentNodeVersion〉,當(dāng)前節(jié)點(diǎn)的后續(xù)節(jié)點(diǎn)引用〈NextNode〉,當(dāng)前節(jié)點(diǎn)的后續(xù)節(jié)點(diǎn)數(shù)據(jù)版本號(hào)〈NextNodeVersion〉。
[0029]所述的數(shù)據(jù)世系追溯方法,其特征是,科學(xué)工作流節(jié)點(diǎn)之間數(shù)據(jù)世系關(guān)系的建立與更新方法如下:
[0030]數(shù)據(jù)世系關(guān)系建立與更新方法的輸入包括已建立好的科學(xué)工作流模型和科學(xué)工作流中某個(gè)剛執(zhí)行完畢的節(jié)點(diǎn),對(duì)于該節(jié)點(diǎn),將其視作科學(xué)工作流中的一般性節(jié)點(diǎn),由科學(xué)工作流模型可以獲得該節(jié)點(diǎn)的前置、后續(xù)節(jié)點(diǎn)信息,以及該節(jié)點(diǎn)的狀態(tài)是首次執(zhí)行還是重做,為表述方便,做出以下假設(shè):
[0031].Node為工作流中的一個(gè)節(jié)點(diǎn);[0032].Node 的前置節(jié)點(diǎn)共有 m 個(gè),分別為 PNode1, pNode2,...,pNodem ;
[0033].Node 的后續(xù)節(jié)點(diǎn)共有 η 個(gè),分別為 IiNode1, nNode2,..., nNoden ;
[0034]當(dāng)節(jié)點(diǎn)Node執(zhí)行完成、產(chǎn)生新數(shù)據(jù)后:
[0035]I)判斷節(jié)點(diǎn)Node是否為首次執(zhí)行,如果是首次執(zhí)行,則執(zhí)行步驟2);否則節(jié)點(diǎn)Node為重新執(zhí)行,則執(zhí)行步驟3);
[0036]2) Node節(jié)點(diǎn)為首次執(zhí)行,執(zhí)行以下子步驟:
[0037]2.1)檢查是否存在這樣的數(shù)據(jù)記錄:〈NextNode>為Node的引用,<NextNodeVersion>為O ;如果存在這樣的數(shù)據(jù)記錄,則將該數(shù)據(jù)記錄的〈NextNodeVersion〉更新為節(jié)點(diǎn)Node的數(shù)據(jù)版本號(hào);如果不存在這樣的數(shù)據(jù)記錄,執(zhí)行步驟 2.2);
[0038]2.2)為Node的第I個(gè)后續(xù)節(jié)點(diǎn)Node1在存儲(chǔ)結(jié)構(gòu)中增加一項(xiàng)數(shù)據(jù)記錄,其中的<CurrentNode>存儲(chǔ)節(jié)點(diǎn)Node的引用,<CurrentNodeVersion)存儲(chǔ)節(jié)點(diǎn)Node的數(shù)據(jù)版本號(hào),〈NextNode〉存儲(chǔ) Node1 的引用,〈NextNodeVersion〉為 O ;
[0039]2.3)重復(fù)執(zhí)行步驟2.2),直至為Node的所有后續(xù)節(jié)點(diǎn)都在存儲(chǔ)結(jié)構(gòu)中建立了對(duì)應(yīng)的數(shù)據(jù)記錄;
[0040]2.4)方法結(jié)束;
[0041]3)Node節(jié)點(diǎn)為重新執(zhí)行,假設(shè)Node原來的最新數(shù)據(jù)版本號(hào)為OldVersion,重新執(zhí)行后得到的新數(shù)據(jù)版本號(hào)為NewVersion,本方法將執(zhí)行以下子步驟:
[0042]3.1)在存儲(chǔ)結(jié)構(gòu)中檢查是否存在這樣的數(shù)據(jù)記錄:〈NextNode>為Node的引用,〈NextNodeVersion〉為O ;如果存在這樣的數(shù)據(jù)記錄,表明該節(jié)點(diǎn)是由于其前置節(jié)點(diǎn)重做而導(dǎo)致的重做,則將該數(shù)據(jù)記錄的〈NextNodeVersion〉更新為節(jié)點(diǎn)Node的新數(shù)據(jù)版本號(hào)NewVersion值,繼續(xù)執(zhí)行方法步驟3.3);如果不存在這樣的數(shù)據(jù)記錄,則執(zhí)行方法步驟3.2);
[0043]3.2)在存儲(chǔ)結(jié)構(gòu)中檢查是否存在這樣的數(shù)據(jù)記錄:〈NextNode>為Node的引用,〈NextNodeVersion〉為Node原來的數(shù)據(jù)版本號(hào)為OldVersion ;如果存在這樣的數(shù)據(jù)記錄,表明該節(jié)點(diǎn)是主動(dòng)發(fā)起的重新執(zhí)行,則復(fù)制該數(shù)據(jù)記錄,并將復(fù)制得到的數(shù)據(jù)記錄的〈NextNodeVersion〉更新為節(jié)點(diǎn)Node的新數(shù)據(jù)版本號(hào)NewVersion值,繼續(xù)執(zhí)行方法步驟
3.3 ;如果不存在這樣的數(shù)據(jù)記錄,則算法結(jié)束;
[0044]3.3)在存儲(chǔ)結(jié)構(gòu)中檢查是否存在這樣的數(shù)據(jù)記錄:〈CurrentNode>為Node的引用,<CurrentNodeVersion> 為 Node 原來的數(shù)據(jù)版本號(hào)為 OldVersion,〈NextNodeVersion〉為O ;如果存在這樣的數(shù)據(jù)記錄,則將該數(shù)據(jù)記錄的〈NextNodeVersion〉更新為End值,這樣就避免了 Node的后繼節(jié)點(diǎn)還使用舊的數(shù)據(jù)進(jìn)行計(jì)算;如果不存在這樣的數(shù)據(jù)記錄,則跳過該步驟,繼續(xù)執(zhí)行步驟3.4);
[0045]3.4)為Node的第I個(gè)后續(xù)節(jié)點(diǎn)Node1在存儲(chǔ)結(jié)構(gòu)中增加一項(xiàng)數(shù)據(jù)記錄,其中的<CurrentNode>存儲(chǔ)節(jié)點(diǎn)Node的引用,<CurrentNodeVersion>存儲(chǔ)節(jié)點(diǎn)Node的新數(shù)據(jù)版本號(hào)NewVersion,〈NextNode〉存儲(chǔ)Node的第I個(gè)后續(xù)節(jié)點(diǎn)Node1的引用,〈NextNodeVersion〉為 O ;
[0046]3.5)重復(fù)執(zhí)行步驟3.4),直至為Node的所有后續(xù)節(jié)點(diǎn)都在存儲(chǔ)結(jié)構(gòu)中建立了對(duì)應(yīng)的數(shù)據(jù)記錄;[0047]3.6)方法結(jié)束;
[0048]至此,數(shù)據(jù)世系關(guān)系建立與更新方法執(zhí)行完畢,通過對(duì)科學(xué)工作流模型中的每個(gè)節(jié)點(diǎn)進(jìn)行上述方法進(jìn)行操作,即可為整個(gè)科學(xué)工作流模型建立數(shù)據(jù)世系關(guān)系模型。
[0049]所述的數(shù)據(jù)世系追溯方法,其特征是,科學(xué)工作流節(jié)點(diǎn)的數(shù)據(jù)世系追溯方法,基于之前建立的數(shù)據(jù)世系關(guān)系模型,可以基于科學(xué)工作流中任一節(jié)點(diǎn)的任一版本數(shù)據(jù),向前追溯該節(jié)點(diǎn)的該版本數(shù)據(jù)是由前置節(jié)點(diǎn)的哪個(gè)版本數(shù)據(jù)推衍而來,向后查詢?cè)摴?jié)點(diǎn)的該版本數(shù)據(jù)推衍出了哪些后置節(jié)點(diǎn)的數(shù)據(jù)版本;分為向前追溯和向后推衍兩個(gè)子過程; [0050]數(shù)據(jù)世系追溯方法的輸入應(yīng)包括已建立好的科學(xué)工作流模型,以及作為追溯操作基點(diǎn)的科學(xué)工作流中某個(gè)節(jié)點(diǎn)和該節(jié)點(diǎn)的某個(gè)數(shù)據(jù)版本;假設(shè)輸入的節(jié)點(diǎn)為Node并且該節(jié)點(diǎn)的版本號(hào)為Version,兩者組成一個(gè)二元組(Node, Version),為處理方便建立一個(gè)隊(duì)列數(shù)據(jù)結(jié)構(gòu)Q存儲(chǔ)該二元組,則數(shù)據(jù)世系追溯方法的執(zhí)行過程如下:
[0051]?向前追溯過程:
[0052]I)對(duì)于節(jié)點(diǎn)Node和其版本號(hào)Version所組成的一個(gè)二元組(Node, Version),首先將其加入待處理隊(duì)列Q ;
[0053]2)通過已建立好的科學(xué)工作流模型找到Node節(jié)點(diǎn)的所有前置節(jié)點(diǎn),記為PNode1,PNode2,...,PNodem;如果不存在任何前置節(jié)點(diǎn),則跳轉(zhuǎn)到步驟5);
[0054]3)在建立好的世系數(shù)據(jù)結(jié)構(gòu)中查找如下數(shù)據(jù)記錄:〈CurrentNode〉值為對(duì)pNodei的引用,〈NextNode〉值為對(duì)Node的引用,〈NextNodeVersion〉值為Version ;如果存在這樣的數(shù)據(jù),則記錄下〈CurrentNodeVersion〉的值,假設(shè)為pVersion,這表明Node節(jié)點(diǎn)的Version版本數(shù)據(jù)是根據(jù)其前置節(jié)點(diǎn)PNode1的pVersion版本數(shù)據(jù)計(jì)算出來的,如果待處理隊(duì)列Q中沒有二元組(PNode1,pVersion),則將其加入Q ;如果不存在這樣的數(shù)據(jù),繼續(xù)執(zhí)行步驟4);
[0055]4)重復(fù)步驟3),查詢Node的Version版本數(shù)據(jù)所對(duì)應(yīng)的前置節(jié)點(diǎn)pNode2,...,pNodem的版本號(hào),加入待處理隊(duì)列Q ;
[0056]5)從隊(duì)列 Q 中刪除(Node, Version);
[0057]6)從隊(duì)列Q中順序選擇下一個(gè)二元組,重復(fù)步驟2)至5),從而遞歸地向前追溯數(shù)據(jù)世系關(guān)系,直至隊(duì)列Q為空;
[0058]?向后推衍過程:
[0059]I)對(duì)于節(jié)點(diǎn)Node和其版本號(hào)Version所組成的一個(gè)二元組(Node, Version),首先將其加入待處理隊(duì)列Q ;
[0060]2)判斷其版本號(hào)Version是否為End或0,如果為End或0,跳轉(zhuǎn)至步驟5),如果不為End,則通過已建立好的科學(xué)工作流模型找到Node節(jié)點(diǎn)的所有已執(zhí)行完且不處在待重做狀態(tài)下的后繼節(jié)點(diǎn),記為IiNode1, nNode2,..., nNoden ;如果不存在任何后繼節(jié)點(diǎn),跳轉(zhuǎn)至步驟5);
[0061]3)在根據(jù)建立好的譜系數(shù)據(jù)結(jié)構(gòu)中查找如下數(shù)據(jù)記錄:〈CurrentNode〉值為對(duì)Node 的引用,<CurrentNodeVersion)值為 Version,〈NextNode〉值為對(duì) IiNode1 的引用,且〈NextNodeVersion〉的版本號(hào)最新;如果存在這樣的數(shù)據(jù),則記錄下〈NextNodeVersion〉的值,假設(shè)為nVersion,這表明后置節(jié)點(diǎn)IiNode1根據(jù)Node節(jié)點(diǎn)的Version版本數(shù)據(jù)計(jì)算出的最新版本數(shù)據(jù)是nVersion,如果待處理隊(duì)列Q中沒有二元組(IiNode1, nVersion),將其加入Q ;如果不存在這樣的數(shù)據(jù),則執(zhí)行步驟4);
[0062]4)重復(fù)步驟3),查詢Node的Version版本數(shù)據(jù)所對(duì)應(yīng)的后置節(jié)點(diǎn)nNode2,...,nNoden的最新版本號(hào),并進(jìn)行記錄,加入待處理隊(duì)列Q ;
[0063]5)從隊(duì)列 Q 中刪除(Node, Version);
[0064]6)從隊(duì)列Q中順序選擇下一個(gè)二元組,重復(fù)步驟2)至5),從而遞歸地向后推衍數(shù)據(jù)世系關(guān)系,直至隊(duì)列Q為空;
[0065]最終得到了 Node節(jié)點(diǎn)Version版本數(shù)據(jù)的前置、后繼數(shù)據(jù)版本,結(jié)合科學(xué)工作流模型中定義的節(jié)點(diǎn)之間前置、后繼關(guān)系,可將每一個(gè)數(shù)據(jù)版本標(biāo)識(shí)在對(duì)應(yīng)的節(jié)點(diǎn)上,形成一個(gè)數(shù)據(jù)世系關(guān)系模型,再通過對(duì)科學(xué)工作流模型輸出方法進(jìn)行擴(kuò)充,即可輸出該數(shù)據(jù)世系關(guān)系1?型。
[0066]本發(fā)明的有益效果:本發(fā)明所提出的追溯數(shù)據(jù)世系的新方法——基于多狀態(tài)科學(xué)工作流的數(shù)據(jù)世系追溯方法,在原有的科學(xué)工作流模型基礎(chǔ)上,整合了數(shù)據(jù)世系技術(shù),增加了模型動(dòng)態(tài)運(yùn)行時(shí)的數(shù)據(jù)狀態(tài),以及模型數(shù)據(jù)的歷史記錄。本發(fā)明可以更好地描述大規(guī)模復(fù)雜科學(xué)計(jì)算和協(xié)同研發(fā)流程中數(shù)據(jù)的演化和狀態(tài),從而增強(qiáng)對(duì)流程過程的監(jiān)控能力,實(shí)現(xiàn)流程全方位的管理策略,提高科研效率,并促進(jìn)科學(xué)發(fā)展和技術(shù)進(jìn)步。
[0067]和現(xiàn)有技術(shù)相比,本發(fā)明所述的方法具有以下優(yōu)點(diǎn):
[0068]邏輯清晰:通過本發(fā)明提供的數(shù)據(jù)存儲(chǔ)方法和追溯方法,可以在科學(xué)工作流執(zhí)行過程中產(chǎn)生的海量數(shù)據(jù)基礎(chǔ)之上,遵循自然的計(jì)算順序和數(shù)據(jù)輸入輸出關(guān)系,由前至后生成一張網(wǎng)狀數(shù)據(jù)世系關(guān)系圖;在該圖中可以清晰定位每一個(gè)數(shù)據(jù)的位置和狀態(tài)信息,以及其前置和后繼數(shù)據(jù)的狀態(tài)信息,并可根據(jù)需要截取數(shù)據(jù)世系關(guān)系圖的部分或分支進(jìn)行分析。
[0069]易于實(shí)現(xiàn):本發(fā)明提供的追溯方法使用軟件方法實(shí)現(xiàn),采用遞歸算法處理數(shù)據(jù)關(guān)系,對(duì)硬件要求低;此外,本發(fā)明所提供方法根據(jù)實(shí)際情況既可利用數(shù)據(jù)庫語言直接構(gòu)建在數(shù)據(jù)存儲(chǔ)之上,亦可利用相關(guān)程序語言構(gòu)建于數(shù)據(jù)抽象對(duì)象上。
[0070]適應(yīng)性強(qiáng):根據(jù)多狀態(tài)的科學(xué)工作流過程數(shù)據(jù)統(tǒng)一管理模型,各數(shù)據(jù)綁定在工作流過程節(jié)點(diǎn)上,因此得到的數(shù)據(jù)世系關(guān)系可根據(jù)工作流過程節(jié)點(diǎn)之間關(guān)系的配置與管理自動(dòng)更新。
【專利附圖】
【附圖說明】
[0071]在以下附圖中描述前后兩個(gè)關(guān)聯(lián)節(jié)點(diǎn)的數(shù)據(jù)版本世系關(guān)系時(shí),為表述方便,將某節(jié)點(diǎn)η的第V版數(shù)據(jù)信息表示為η: V,將某節(jié)點(diǎn)η的最新版本數(shù)據(jù)信息表示為n: [Latest]。
[0072]圖1數(shù)據(jù)世系關(guān)系管理功能與科學(xué)工作流系統(tǒng)間的O層數(shù)據(jù)流圖
[0073]圖2數(shù)據(jù)世系關(guān)系管理功能與科學(xué)工作流系統(tǒng)間的I層數(shù)據(jù)流圖
[0074]圖3數(shù)據(jù)世系關(guān)系建立與更新功能流程圖(節(jié)點(diǎn)首次執(zhí)行)
[0075]圖4數(shù)據(jù)世系關(guān)系建立與更新功能流程圖(節(jié)點(diǎn)重新執(zhí)行)
[0076]圖5數(shù)據(jù)世系追溯方法流程圖(向前追溯)
[0077]圖6數(shù)據(jù)世系追溯方法流程圖(向后推衍)
[0078]圖7 —個(gè)簡(jiǎn)單的科學(xué)工作流模型實(shí)例
[0079]圖8節(jié)點(diǎn)2vl.0版本數(shù)據(jù)向前追溯過程[0080]圖9節(jié)點(diǎn)2vl.0版本數(shù)據(jù)向后推衍過程
[0081]圖10節(jié)點(diǎn)2vl.0版本數(shù)據(jù)的數(shù)據(jù)世系圖
[0082]圖11節(jié)點(diǎn)4vl.0版本數(shù)據(jù)的向前追溯數(shù)據(jù)世系圖
[0083]圖12節(jié)點(diǎn)4vl.0版本數(shù)據(jù)的向后追溯數(shù)據(jù)世系圖
[0084]圖13節(jié)點(diǎn)4vl.0版本數(shù)據(jù)的數(shù)據(jù)世系圖
[0085]圖1為本發(fā)明的部署環(huán)境中,數(shù)據(jù)世系關(guān)系管理功能與科學(xué)工作流系統(tǒng)節(jié)點(diǎn)操作功能之間的數(shù)據(jù)流關(guān)系,用戶向科學(xué)工作流系統(tǒng)輸入某節(jié)點(diǎn)計(jì)算的數(shù)據(jù)后,系統(tǒng)將模型、節(jié)點(diǎn)和版本數(shù)據(jù)發(fā)送給數(shù)據(jù)世系關(guān)系管理子系統(tǒng)中進(jìn)行處理和存儲(chǔ)。用戶向數(shù)據(jù)世系關(guān)系管理子系統(tǒng)輸入指定的節(jié)點(diǎn)名稱和版本號(hào),該子系統(tǒng)可進(jìn)行查詢和追溯,輸出數(shù)據(jù)世系關(guān)系數(shù)據(jù)。
[0086]對(duì)圖1中數(shù)據(jù)世系關(guān)系管理功能進(jìn)行進(jìn)一步細(xì)化,可以得到圖2。圖2中,將數(shù)據(jù)世系關(guān)系管理功能具體分成了數(shù)據(jù)世系關(guān)系建立與更新功能和數(shù)據(jù)世系關(guān)系查詢功能。
[0087]圖3描述了數(shù)據(jù)世系關(guān)系建立與更新功能中,對(duì)于首次執(zhí)行的節(jié)點(diǎn)所產(chǎn)生的數(shù)據(jù)進(jìn)行處理的具體執(zhí)行流程。為了存儲(chǔ)前后兩個(gè)關(guān)聯(lián)節(jié)點(diǎn)的數(shù)據(jù)版本世系關(guān)系,這里每一條關(guān)系記錄都包括了前置節(jié)點(diǎn)信息、前置節(jié)點(diǎn)數(shù)據(jù)版本信息,后繼節(jié)點(diǎn)信息、后繼節(jié)點(diǎn)數(shù)據(jù)版本信息。對(duì)于一個(gè)首次執(zhí)行的節(jié)點(diǎn),通過圖3中的流程對(duì)其計(jì)算數(shù)據(jù)記錄進(jìn)行處理,即可把該節(jié)點(diǎn)的數(shù)據(jù)信息加入到數(shù)據(jù)世系關(guān)系中。
[0088]圖4描述了數(shù)據(jù)世系關(guān)系建立與更新功能中,對(duì)于重新執(zhí)行的節(jié)點(diǎn)所產(chǎn)生的數(shù)據(jù)進(jìn)行處理的具體執(zhí)行流程。一個(gè)節(jié)點(diǎn)如果由于某種原因重新執(zhí)行,需要對(duì)重新執(zhí)行的原因進(jìn)行判斷并分別處理,之后建立新的世系關(guān)系記錄進(jìn)行存儲(chǔ)。
[0089]圖3和圖4對(duì)數(shù)據(jù)世系關(guān)系建立與更新功能的執(zhí)行流程進(jìn)行了描述,其中的處理細(xì)節(jié)參考后文【具體實(shí)施方式】中的解釋。
[0090]圖5和圖6描述了本發(fā)明的數(shù)據(jù)世系追溯方法的處理流程。對(duì)指定的節(jié)點(diǎn)以及該節(jié)點(diǎn)指定的數(shù)據(jù)版本,可以在數(shù)據(jù)世系模型中進(jìn)行查詢追溯,得到此節(jié)點(diǎn)的該版本數(shù)據(jù)源自哪些前置節(jié)點(diǎn)數(shù)據(jù),以及以此節(jié)點(diǎn)的該版本數(shù)據(jù)為基礎(chǔ),向后計(jì)算推衍出了哪些后繼節(jié)點(diǎn)的數(shù)據(jù)。因此,數(shù)據(jù)世系追溯方法分為向前追溯和向后推衍兩個(gè)子過程,圖5展示了向前追溯子過程的處理流程,圖6展示了向后推衍子過程的處理流程。其中具體處理細(xì)節(jié)可參考后文【具體實(shí)施方式】中的解釋。
【具體實(shí)施方式】
[0091]本發(fā)明基于科學(xué)工作流模型,在其之上進(jìn)行數(shù)據(jù)世系建立、分析、追溯,【具體實(shí)施方式】如下:
[0092]1.建立存儲(chǔ)結(jié)構(gòu)
[0093]本發(fā)明的數(shù)據(jù)世系追溯方法并不依賴于某種固定的數(shù)據(jù)存儲(chǔ)形式,可根據(jù)具體實(shí)施環(huán)境為數(shù)據(jù)庫表、數(shù)據(jù)存儲(chǔ)對(duì)象等。本方法計(jì)算并存儲(chǔ)科學(xué)工作流節(jié)點(diǎn)之間的數(shù)據(jù)版本世系關(guān)系,故要求數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)(為便于表述,記為Table)中,每項(xiàng)數(shù)據(jù)應(yīng)至少存儲(chǔ)以下節(jié)點(diǎn)信息:
[0094]?當(dāng)前節(jié)點(diǎn)引用(記為〈CurrentNode〉);
[0095]?當(dāng)前節(jié)點(diǎn)數(shù)據(jù)版本號(hào)(記為〈CurrentNodeVersion〉);[0096]籲當(dāng)前節(jié)點(diǎn)的后續(xù)節(jié)點(diǎn)引用(記為〈NextNode〉);
[0097]?當(dāng)前節(jié)點(diǎn)的后續(xù)節(jié)點(diǎn)數(shù)據(jù)版本號(hào)(記為〈NextNodeVersion〉);
[0098]數(shù)據(jù)版本號(hào)可為指向某個(gè)數(shù)據(jù)版本的引用,根據(jù)具體實(shí)施環(huán)境不同而相異,但數(shù)據(jù)版本管理不在本發(fā)明的討論范圍之內(nèi),因此這里單純將數(shù)據(jù)版本號(hào)看作某個(gè)值,此處定義一個(gè)常量數(shù)據(jù)版本號(hào)End,表明對(duì)應(yīng)的節(jié)點(diǎn)沒有產(chǎn)生數(shù)據(jù)。
[0099]2.數(shù)據(jù)世系關(guān)系的建立與更新操作
[0100]本發(fā)明提供了科學(xué)工作流節(jié)點(diǎn)之間數(shù)據(jù)世系關(guān)系的建立與更新方法,這種建立與更新方法可綁定在工作流節(jié)點(diǎn)的執(zhí)行操作事件中,待一個(gè)節(jié)點(diǎn)執(zhí)行完成、產(chǎn)生新數(shù)據(jù)后,自動(dòng)調(diào)用這種數(shù)據(jù)世系關(guān)系建立與更新方法,對(duì)數(shù)據(jù)世系存儲(chǔ)數(shù)據(jù)進(jìn)行維護(hù)。
[0101]數(shù)據(jù)世系關(guān)系建立與更新方法輸入包括已建立好的科學(xué)工作流模型和科學(xué)工作流中某個(gè)剛執(zhí)行完畢的節(jié)點(diǎn),對(duì)于該節(jié)點(diǎn),應(yīng)將其視作科學(xué)工作流中的一般性節(jié)點(diǎn),由科學(xué)工作流模型可以獲得該節(jié)點(diǎn)的前置、后續(xù)節(jié)點(diǎn)信息,以及該節(jié)點(diǎn)的狀態(tài)(首次執(zhí)行或重做),為表述方便,做出以下假設(shè): [0102].Node為工作流中的一個(gè)節(jié)點(diǎn);
[0103].Node 的前置節(jié)點(diǎn)共有 m 個(gè),分別為 PNode1, pNode2,..., pNodem ;
[0104].Node 的后續(xù)節(jié)點(diǎn)共有 η 個(gè),分別為 IiNode1, nNode2,..., nNoden。
[0105]當(dāng)節(jié)點(diǎn)Node執(zhí)行完成、產(chǎn)生新數(shù)據(jù)后,將調(diào)用數(shù)據(jù)世系關(guān)系建立與更新方法,在方法中還需針對(duì)Node是首次執(zhí)行,還是重新執(zhí)行進(jìn)行判斷,并采取不同的處理過程。需要注意的是,一個(gè)節(jié)點(diǎn)進(jìn)行了重新執(zhí)行計(jì)算而產(chǎn)生的數(shù)據(jù)版本變化,會(huì)導(dǎo)致后續(xù)節(jié)點(diǎn)全部變?yōu)榇匦聢?zhí)行狀態(tài),表明這些后續(xù)節(jié)點(diǎn)需要進(jìn)行重新執(zhí)行計(jì)算,這也是科學(xué)工作流模型的特點(diǎn)所決定的。一個(gè)節(jié)點(diǎn)是主動(dòng)重新執(zhí)行,亦或是由于受到前置節(jié)點(diǎn)的影響而被動(dòng)進(jìn)行重新執(zhí)行,兩種情況下數(shù)據(jù)世系數(shù)據(jù)記錄中的狀態(tài)是不同的,因此一個(gè)節(jié)點(diǎn)進(jìn)行重新執(zhí)行時(shí)需要判斷這是否是由于其前置節(jié)點(diǎn)進(jìn)行重新執(zhí)行而導(dǎo)致的。方法中具體調(diào)度與執(zhí)行過程如下:
[0106]4)判斷節(jié)點(diǎn)Node是否為首次執(zhí)行,如果是首次執(zhí)行,則本方法繼續(xù)執(zhí)行下方步驟2 ;否則節(jié)點(diǎn)Node為重新執(zhí)行,則本方法繼續(xù)執(zhí)行下方步驟3。
[0107]5) Node節(jié)點(diǎn)為首次執(zhí)行,本方法將執(zhí)行以下子步驟:
[0108]2.1)在存儲(chǔ)結(jié)構(gòu)Table中檢查是否存在這樣的數(shù)據(jù)記錄:〈NextNode>為Node的引用,〈NextNodeVersion〉為O。如果存在這樣的數(shù)據(jù)記錄,則將該數(shù)據(jù)記錄的〈NextNodeVersion〉更新為節(jié)點(diǎn)Node的數(shù)據(jù)版本號(hào);如果不存在這樣的數(shù)據(jù)記錄,則跳過該步驟。
[0109]2.2)為Node的第I個(gè)后續(xù)節(jié)點(diǎn)Node1在存儲(chǔ)結(jié)構(gòu)Table中增加一項(xiàng)數(shù)據(jù)記錄,其中的〈CurrentNode〉存儲(chǔ)節(jié)點(diǎn)Node的引用,〈CurrentNodeVersion〉存儲(chǔ)節(jié)點(diǎn)Node的數(shù)據(jù)版本號(hào),〈NextNode〉存儲(chǔ) Node1 的引用,〈NextNodeVersion〉為 O。
[0110]2.3)重復(fù)執(zhí)行步驟2.2,直至為Node的所有后續(xù)節(jié)點(diǎn)都在存儲(chǔ)結(jié)構(gòu)Table中建立了對(duì)應(yīng)的數(shù)據(jù)記錄。
[0111]2.4)方法結(jié)束。
[0112]6)Node節(jié)點(diǎn)為重新執(zhí)行,假設(shè)Node原來的最新數(shù)據(jù)版本號(hào)為OldVersion,重新執(zhí)行后得到的新數(shù)據(jù)版本號(hào)為NewVersion,本方法將執(zhí)行以下子步驟:[0113]3.1)在存儲(chǔ)結(jié)構(gòu)Table中檢查是否存在這樣的數(shù)據(jù)記錄:〈NextNode>為Node的引用,〈NextNodeVersion〉為O。如果存在這樣的數(shù)據(jù)記錄,表明該節(jié)點(diǎn)是由于其前置節(jié)點(diǎn)重做而導(dǎo)致的重做,則將該數(shù)據(jù)記錄的〈NextNodeVersion〉更新為節(jié)點(diǎn)Node的新數(shù)據(jù)版本號(hào)NewVersion值,繼續(xù)執(zhí)行方法步驟3.3 ;如果不存在這樣的數(shù)據(jù)記錄,則執(zhí)行方法步驟
3.2。
[0114]3.2)在存儲(chǔ)結(jié)構(gòu)Table中檢查是否存在這樣的數(shù)據(jù)記錄:〈NextNode>為Node的引用,〈NextNodeVersion〉為Node原來的數(shù)據(jù)版本號(hào)為OldVersion。如果存在這樣的數(shù)據(jù)記錄,表明該節(jié)點(diǎn)是主動(dòng)發(fā)起的重新執(zhí)行,則復(fù)制該數(shù)據(jù)記錄,并將復(fù)制得到的數(shù)據(jù)記錄的〈NextNodeVersion〉更新為節(jié)點(diǎn)Node的新數(shù)據(jù)版本號(hào)NewVersion值,繼續(xù)執(zhí)行方法步驟
3.3 ;如果不存在這樣的數(shù)據(jù)記錄,則算法結(jié)束。
[0115]3.3)在存儲(chǔ)結(jié)構(gòu)Table中檢查是否存在這樣的數(shù)據(jù)記錄:〈CurrentNode〉為Node的引用,〈CurrentNodeVersion〉為Node原來的數(shù)據(jù)版本號(hào)為OldVersion,〈NextNodeVersion〉為O。如果存在這樣的數(shù)據(jù)記錄,則將該數(shù)據(jù)記錄的〈NextNodeVersion〉更新為End值,這樣就避免了 Node的后繼節(jié)點(diǎn)還使用舊的數(shù)據(jù)進(jìn)行計(jì)算;如果不存在這樣的數(shù)據(jù)記錄,則跳過該步驟,繼續(xù)執(zhí)行步驟3.4。
[0116]3.4)為Node的第I個(gè)后續(xù)節(jié)點(diǎn)Node1在存儲(chǔ)結(jié)構(gòu)Table中增加一項(xiàng)數(shù)據(jù)記錄,其中的〈CurrentNode〉存儲(chǔ)節(jié)點(diǎn)Node的引用,〈CurrentNodeVersion〉存儲(chǔ)節(jié)點(diǎn)Node的新數(shù)據(jù)版本號(hào)NewVersion,〈NextNode〉存儲(chǔ)Node的第I個(gè)后續(xù)節(jié)點(diǎn)Node1的引用,〈NextNodeVersion〉為 O。
[0117]3.5)重復(fù)執(zhí)行步驟3.4,直至為Node的所有后續(xù)節(jié)點(diǎn)都在存儲(chǔ)結(jié)構(gòu)Table中建立了對(duì)應(yīng)的數(shù)據(jù)記錄。
[0118]3.6)方法結(jié)束。
[0119]至此,數(shù)據(jù)世系關(guān)系建立與更新方法執(zhí)行完畢,通過對(duì)科學(xué)工作流模型中的每個(gè)節(jié)點(diǎn)進(jìn)行上述方法進(jìn)行操作,即可為整個(gè)科學(xué)工作流模型建立數(shù)據(jù)世系關(guān)系模型。
[0120]3.數(shù)據(jù)世系追溯方法
[0121]本發(fā)明提供了科學(xué)工作流節(jié)點(diǎn)的數(shù)據(jù)世系追溯方法,基于之前建立的數(shù)據(jù)世系關(guān)系模型,可以基于科學(xué)工作流中任一節(jié)點(diǎn)的任一版本數(shù)據(jù),向前追溯該節(jié)點(diǎn)的該版本數(shù)據(jù)是由前置節(jié)點(diǎn)的哪個(gè)版本數(shù)據(jù)推衍而來,向后查詢?cè)摴?jié)點(diǎn)的該版本數(shù)據(jù)推衍出了哪些后置節(jié)點(diǎn)的數(shù)據(jù)版本,因此,本方法分為向前追溯和向后推衍兩個(gè)子過程。
[0122]實(shí)際上,根據(jù)前文所定義的數(shù)據(jù)關(guān)系建立與維護(hù)方法,一個(gè)節(jié)點(diǎn)的某個(gè)數(shù)據(jù)版本其前置節(jié)點(diǎn)數(shù)據(jù)版本必定是確定而唯一的,即不可能出現(xiàn)前置節(jié)點(diǎn)的不同版本數(shù)據(jù)推衍出的后繼節(jié)點(diǎn)數(shù)據(jù),其版本必不相同;而一個(gè)節(jié)點(diǎn)的某個(gè)數(shù)據(jù)版本的后置節(jié)點(diǎn)數(shù)據(jù)版本可能有多個(gè)而不唯一,即允許出現(xiàn)根據(jù)前置節(jié)點(diǎn)的同一個(gè)版本數(shù)據(jù)計(jì)算推衍出后繼節(jié)點(diǎn)的不同版本數(shù)據(jù)。
[0123]數(shù)據(jù)世系追溯方法的輸入應(yīng)包括已建立好的科學(xué)工作流模型,以及作為追溯操作基點(diǎn)的科學(xué)工作流中某個(gè)節(jié)點(diǎn)和該節(jié)點(diǎn)的某個(gè)數(shù)據(jù)版本。假設(shè)輸入的節(jié)點(diǎn)為Node并且該節(jié)點(diǎn)的版本號(hào)為Version,兩者組成一個(gè)二元組(Node, Version),為處理方便建立一個(gè)隊(duì)列數(shù)據(jù)結(jié)構(gòu)Q存儲(chǔ)該二元組,則數(shù)據(jù)世系追溯方法的執(zhí)行過程如下:
[0124]?向前追溯過程:[0125]I)對(duì)于節(jié)點(diǎn)Node和其版本號(hào)Version所組成的一個(gè)二元組(Node, Version),首先將其加入待處理隊(duì)列Q。
[0126]2)通過已建立好的科學(xué)工作流模型找到Node節(jié)點(diǎn)的所有前置節(jié)點(diǎn),記為PNode1,PNode2,..., pNodem0如果不存在任何前置節(jié)點(diǎn),則跳轉(zhuǎn)到步驟5。
[0127]3)在建立好的世系數(shù)據(jù)結(jié)構(gòu)中查找如下數(shù)據(jù)記錄:〈CurrentNode〉值為對(duì)pNodei的引用,〈NextNode〉值為對(duì)Node的引用,〈NextNodeVersion〉值為Version。如果存在這樣的數(shù)據(jù),則記錄下〈CurrentNodeVersion〉的值(假設(shè)為pVersion),這表明Node節(jié)點(diǎn)的Version版本數(shù)據(jù)是根據(jù)其前置節(jié)點(diǎn)PNode1的pVersion版本數(shù)據(jù)計(jì)算出來的,如果待處理隊(duì)列Q中沒有二元組(PNode1, pVersion),則將其加入Q。如果不存在這樣的數(shù)據(jù),繼續(xù)執(zhí)行步驟4。
[0128]4)重復(fù)步驟3,查詢Node的Version版本數(shù)據(jù)所對(duì)應(yīng)的前置節(jié)點(diǎn)pNode2,...,pNodem的版本號(hào),加入待處理隊(duì)列Q。
[0129]5)從隊(duì)列 Q 中刪除(Node, Version)。
[0130]6)從隊(duì)列Q中順序選擇下一個(gè)二元組,重復(fù)步驟2至5,從而遞歸地向前追溯數(shù)據(jù)世系關(guān)系,直至隊(duì)列Q為空。
[0131]?向后推衍過程:
[0132]前文已經(jīng)提到,一個(gè)節(jié)點(diǎn)的某個(gè)數(shù)據(jù)版本的后置節(jié)點(diǎn)數(shù)據(jù)版本可能不唯一,向后推衍過程先只查找后繼節(jié)點(diǎn)的最新一個(gè)版本數(shù)據(jù)。
[0133]I)對(duì)于節(jié)點(diǎn)Node和其版本號(hào)Version所組成的一個(gè)二元組(Node, Version),首先將其加入待處理隊(duì)列Q。
[0134]2)判斷其版本號(hào)Version是否為End或0,如果為End或0,跳轉(zhuǎn)至步驟5,如果不為End,則通過已建立好的科學(xué)工作流模型找到Node節(jié)點(diǎn)的所有已執(zhí)行完且不處在待重做狀態(tài)下的后繼節(jié)點(diǎn),記為IiNode1, nNode2,..., nNoden。如果不存在任何后繼節(jié)點(diǎn),跳轉(zhuǎn)至步驟5。
[0135]3)在根據(jù)建立好的譜系數(shù)據(jù)結(jié)構(gòu)中查找如下數(shù)據(jù)記錄:〈CurrentNode>值為對(duì)Node 的引用,〈CurrentNodeVersion〉值為 Version,〈NextNode〉值為對(duì) IiNode1 的引用,且〈NextNodeVersion〉的版本號(hào)最新。如果存在這樣的數(shù)據(jù),則記錄下〈NextNodeVersion〉的值(假設(shè)為nVersion),這表明后置節(jié)點(diǎn)IiNode1根據(jù)Node節(jié)點(diǎn)的Version版本數(shù)據(jù)計(jì)算出的最新版本數(shù)據(jù)是nVersion,如果待處理隊(duì)列Q中沒有二元組(IiNode1, nVersion),將其加AQ0如果不存在這樣的數(shù)據(jù),則執(zhí)行步驟4。
[0136]4)重復(fù)步驟3,查詢Node的Version版本數(shù)據(jù)所對(duì)應(yīng)的后置節(jié)點(diǎn)nNode2,...,nNoden的最新版本號(hào),并進(jìn)行記錄,加入待處理隊(duì)列Q。
[0137]5)從隊(duì)列 Q 中刪除(Node, Version)。
[0138]6)從隊(duì)列Q中順序選擇下一個(gè)二元組,重復(fù)步驟2至5,從而遞歸地向后推衍數(shù)據(jù)世系關(guān)系,直至隊(duì)列Q為空。
[0139]最終得到了 Node節(jié)點(diǎn)Version版本數(shù)據(jù)的前置、后繼數(shù)據(jù)版本,結(jié)合科學(xué)工作流模型中定義的節(jié)點(diǎn)之間前置、后繼關(guān)系,可將每一個(gè)數(shù)據(jù)版本標(biāo)識(shí)在對(duì)應(yīng)的節(jié)點(diǎn)上,形成一個(gè)數(shù)據(jù)世系關(guān)系模型,再通過對(duì)科學(xué)工作流模型輸出方法進(jìn)行擴(kuò)充,即可輸出該數(shù)據(jù)世系關(guān)系1?型。[0140]向后推衍過程中,如果想推衍出后繼節(jié)點(diǎn)的所有數(shù)據(jù)版本,只需要對(duì)步驟2)的查找進(jìn)行修改,去掉限制條件〈NextNodeVersion〉的版本號(hào)最新。但這種操作在一個(gè)每個(gè)節(jié)點(diǎn)都有多個(gè)數(shù)據(jù)版本的科學(xué)工作流模型中,很容易導(dǎo)致查詢操作指數(shù)級(jí)增長,嚴(yán)重影響系統(tǒng)效率,故建議采用推衍后繼節(jié)點(diǎn)最新數(shù)據(jù)版本的操作。另外一種可行的方式是記錄下后繼節(jié)點(diǎn)的所有數(shù)據(jù)版本,根據(jù)用戶選擇動(dòng)態(tài)推衍指定的數(shù)據(jù)版本。
[0141]為了進(jìn)一步對(duì)本發(fā)明進(jìn)行闡述,特舉例如下:
[0142]實(shí)施例1:
[0143]圖7為一個(gè)簡(jiǎn)單的科學(xué)工作流模型,其中共有7個(gè)節(jié)點(diǎn),該模型具有如下規(guī)定:
[0144]1)每個(gè)節(jié)點(diǎn)每次執(zhí)行后將產(chǎn)生一個(gè)版本的數(shù)據(jù);
[0145]2)每個(gè)節(jié)點(diǎn)只有其所有前置節(jié)點(diǎn)均執(zhí)行完成并產(chǎn)生數(shù)據(jù)后才可開始執(zhí)行;
[0146]3) 一個(gè)節(jié)點(diǎn)執(zhí)行過一次后,可以重新執(zhí)行;
[0147]4) 一個(gè)節(jié)點(diǎn)如果重新執(zhí)行,其所有后繼節(jié)點(diǎn)也需重新執(zhí)行。
[0148]對(duì)于該模型,本實(shí)例將進(jìn)行如下一系列操作:
[0149]1)按照順序執(zhí)行節(jié)點(diǎn)1、2、3、5、4、6,每次執(zhí)行得到數(shù)據(jù)的版本為1.0 ;
[0150]2)重新執(zhí)行節(jié)點(diǎn)4,重新執(zhí)行得到的數(shù)據(jù)版本為2.0 ;
[0151]3)重新執(zhí)行節(jié)點(diǎn)4的所有已執(zhí)行后續(xù)節(jié)點(diǎn),得到新的數(shù)據(jù)版本2.0 ;
[0152]4)執(zhí)行節(jié)點(diǎn)7,得到的數(shù)據(jù)版本為1.0 ;
[0153]5)查詢節(jié)點(diǎn)2的1.0版本數(shù)據(jù)其前后數(shù)據(jù)世系關(guān)系;
[0154]6)查詢節(jié)點(diǎn)4的1.0版本數(shù)據(jù)其前后數(shù)據(jù)世系關(guān)系;
[0155]現(xiàn)對(duì)該模型應(yīng)用本發(fā)明的數(shù)據(jù)世系關(guān)系處理方法如下:
[0156]1.建立存儲(chǔ)結(jié)構(gòu)
[0157]在關(guān)系數(shù)據(jù)庫(如SQL Server)中建立表DataProvenance結(jié)構(gòu)如下:
[0158]表1 表 DataProvenance 存儲(chǔ)結(jié)構(gòu)
[0159]
[0160]
【權(quán)利要求】
1.一種基于多狀態(tài)科學(xué)工作流的數(shù)據(jù)世系追溯系統(tǒng),其特征是,包括:系統(tǒng)服務(wù)端、用戶端、關(guān)系數(shù)據(jù)庫、數(shù)據(jù)操作單元、邏輯計(jì)算單元;其中, 所述的系統(tǒng)服務(wù)端,為一臺(tái)或多臺(tái)位于云端或局域網(wǎng)環(huán)境的計(jì)算機(jī),用以接受工作流用戶的工作流執(zhí)行請(qǐng)求以及對(duì)請(qǐng)求作出反應(yīng); 所述的用戶端,為位于本地的計(jì)算機(jī)終端,是工作流用戶執(zhí)行工作流過程的輸入設(shè)備; 所述的關(guān)系數(shù)據(jù)庫,用以保存工作流活動(dòng)節(jié)點(diǎn)信息、邏輯節(jié)點(diǎn)信息、數(shù)據(jù)的依賴關(guān)系以及條件約束集;所述的關(guān)系數(shù)據(jù)庫安裝在系統(tǒng)服務(wù)端; 所述的數(shù)據(jù)操作單元,和所述的關(guān)系數(shù)據(jù)庫進(jìn)行交互,包括:查詢數(shù)據(jù)、增加數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù); 所述的邏輯計(jì)算單元,根據(jù)工作流用戶的當(dāng)前工作狀態(tài)進(jìn)行邏輯計(jì)算,通過數(shù)據(jù)操作單元和關(guān)系數(shù)據(jù)庫進(jìn)行交互,并把計(jì)算結(jié)果通過用戶端展現(xiàn)給工作流用戶; 在工作流用戶第一次執(zhí)行某個(gè)任務(wù)節(jié)點(diǎn)時(shí):所述的邏輯計(jì)算單元,首先,檢查關(guān)系數(shù)據(jù)庫中是否已經(jīng)存在以這個(gè)任務(wù)為后置邏輯節(jié)點(diǎn)的表項(xiàng),如果存在,則更新該表項(xiàng)的當(dāng)前任務(wù)版本;然后,檢查關(guān)系數(shù)據(jù)庫中是否存在以這個(gè)任務(wù)為前置邏輯節(jié)點(diǎn)的表項(xiàng),如果存在,則更新該表項(xiàng)的當(dāng)前任務(wù)版本;如果上述兩項(xiàng)均不存在,則在關(guān)系數(shù)據(jù)庫中新增加一項(xiàng),以當(dāng)前任務(wù)、當(dāng)前任務(wù)后置邏輯節(jié)點(diǎn)以及當(dāng)前任務(wù)版本號(hào)創(chuàng)建,后置邏輯節(jié)點(diǎn)版本號(hào)由后置邏輯節(jié)點(diǎn)執(zhí)行時(shí)填寫; 在工作流用戶重做某個(gè)任務(wù)節(jié)點(diǎn)時(shí):所述的邏輯計(jì)算單元,首先檢查關(guān)系數(shù)據(jù)庫中是否已經(jīng)存在以這個(gè)任務(wù)為后置邏輯節(jié)點(diǎn)的表項(xiàng),如果有,則新增一項(xiàng),保存已存在的前置任務(wù)版本和當(dāng)前重做的任務(wù)版本之間的關(guān)系;然后,檢查關(guān)系數(shù)據(jù)庫中是否存在以這個(gè)任務(wù)為前置節(jié)點(diǎn)的表項(xiàng),如果有,并且后置節(jié)點(diǎn)還沒有進(jìn)行,則直接改變?cè)擁?xiàng)的前置任務(wù)版本號(hào)為當(dāng)前任務(wù)節(jié)點(diǎn)版本號(hào);如果上述兩項(xiàng)均不存在,則新增加一項(xiàng),以當(dāng)前任務(wù)、當(dāng)前任務(wù)后置邏輯節(jié)點(diǎn)以及當(dāng)前任務(wù)版本號(hào)創(chuàng)建,其后置邏輯節(jié)點(diǎn)版本號(hào)由后置邏輯節(jié)點(diǎn)執(zhí)行時(shí)填與。
2.如權(quán)利要求1所述的數(shù)據(jù)世系追溯系統(tǒng),其特征是,所述的數(shù)據(jù)操作單元和邏輯計(jì)算單元位于系統(tǒng)服務(wù)端。
3.如權(quán)利要求1所述的數(shù)據(jù)世系追溯系統(tǒng),其特征是,所述的數(shù)據(jù)操作單元和邏輯計(jì)算單元位于客戶端。
4.如權(quán)利要求1所述的數(shù)據(jù)世系追溯系統(tǒng),其特征是,工作流用戶查詢數(shù)據(jù)世系關(guān)系時(shí),直接在關(guān)系數(shù)據(jù)庫中查詢當(dāng)前任務(wù)和當(dāng)前版本號(hào)所在表項(xiàng)。
5.一種基于多狀態(tài)科學(xué)工作流的數(shù)據(jù)世系追溯方法,其特征是,包括: 構(gòu)建關(guān)系數(shù)據(jù)庫,用以保存工作流節(jié)點(diǎn)的活動(dòng)節(jié)點(diǎn)信息、邏輯節(jié)點(diǎn)信息、數(shù)據(jù)的依賴關(guān)系以及條件約束集;所述的關(guān)系數(shù)據(jù)庫位于服務(wù)器端; 在工作流用戶第一次執(zhí)行某個(gè)任務(wù)節(jié)點(diǎn)時(shí):首先,檢查關(guān)系數(shù)據(jù)庫中是否已經(jīng)存在以這個(gè)任務(wù)為后置邏輯節(jié)點(diǎn)的表項(xiàng),如果存在,則更新該表項(xiàng)的當(dāng)前任務(wù)版本;然后,檢查關(guān)系數(shù)據(jù)庫中是否存在以這個(gè)任務(wù)為前置邏輯節(jié)點(diǎn)的表項(xiàng),如果存在,則更新該表項(xiàng)的當(dāng)前任務(wù)版本;如果上述兩項(xiàng)均不存在,則在關(guān)系數(shù)據(jù)庫中新增加一項(xiàng),以當(dāng)前任務(wù)、當(dāng)前任務(wù)后置邏輯節(jié)點(diǎn)以及當(dāng)前任務(wù)版本號(hào)創(chuàng)建,后置邏輯節(jié)點(diǎn)版本號(hào)由后置邏輯節(jié)點(diǎn)執(zhí)行時(shí)填與; 在工作流用戶重做某個(gè)任務(wù)節(jié)點(diǎn)時(shí):首先檢查關(guān)系數(shù)據(jù)庫中是否已經(jīng)存在以這個(gè)任務(wù)為后置邏輯節(jié)點(diǎn)的表項(xiàng),如果有,則新增一項(xiàng),保存已存在的前置任務(wù)版本和當(dāng)前重做的任務(wù)版本之間的關(guān)系;然后,檢查關(guān)系數(shù)據(jù)庫中是否存在以這個(gè)任務(wù)為前置節(jié)點(diǎn)的表項(xiàng),如果有,并且后置節(jié)點(diǎn)還沒有進(jìn)行,則直接改變?cè)擁?xiàng)的前置任務(wù)版本號(hào)為當(dāng)前任務(wù)節(jié)點(diǎn)版本號(hào);如果上述兩項(xiàng)均不存在,則新增加一項(xiàng),以當(dāng)前任務(wù)、當(dāng)前任務(wù)后置邏輯節(jié)點(diǎn)以及當(dāng)前任務(wù)版本號(hào)創(chuàng)建,其后置邏輯節(jié)點(diǎn)版本號(hào)由后置邏輯節(jié)點(diǎn)執(zhí)行時(shí)填寫。
6.如權(quán)利要求5所述的數(shù)據(jù)世系追溯方法,其特征是,工作流用戶查詢數(shù)據(jù)世系關(guān)系時(shí),直接在關(guān)系數(shù)據(jù)庫中查詢當(dāng)前任務(wù)和當(dāng)前版本號(hào)所在表項(xiàng)。
7.如權(quán)利要求5所述的數(shù)據(jù)世系追溯方法,其特征是,各工作流數(shù)據(jù)綁定在工作流節(jié)點(diǎn)上,得到的數(shù)據(jù)世系關(guān)系根據(jù)工作流節(jié)點(diǎn)之間關(guān)系的配置與管理自動(dòng)更新。
8.如權(quán)利要求5所述的數(shù)據(jù)世系追溯方法,其特征是,所述關(guān)系數(shù)據(jù)庫中,每項(xiàng)工作流節(jié)點(diǎn)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)中應(yīng)至少存儲(chǔ)以下節(jié)點(diǎn)信息:當(dāng)前節(jié)點(diǎn)引用〈CurrentNode〉,當(dāng)前節(jié)點(diǎn)數(shù)據(jù)版本號(hào)〈CurrentNodeVersion〉,當(dāng)前節(jié)點(diǎn)的后續(xù)節(jié)點(diǎn)引用〈NextNode〉,當(dāng)前節(jié)點(diǎn)的后續(xù)節(jié)點(diǎn)數(shù)據(jù)版本號(hào)〈NextNodeVersion〉。
9.如權(quán)利要求8所述的數(shù)據(jù)世系追溯方法,其特征是,科學(xué)工作流節(jié)點(diǎn)之間數(shù)據(jù)世系關(guān)系的建立與更新方法如下: 數(shù)據(jù)世系關(guān)系建立與更新方法的輸入包括已建立好的科學(xué)工作流模型和科學(xué)工作流中某個(gè)剛執(zhí)行完畢的節(jié)點(diǎn),對(duì)于該節(jié)點(diǎn),將其視作科學(xué)工作流中的一般性節(jié)點(diǎn),由科學(xué)工作流模型可以獲得該節(jié)點(diǎn)的前置、后續(xù)節(jié)點(diǎn)信息,以及該節(jié)點(diǎn)的狀態(tài)是首次執(zhí)行還是重做,為表述方便,做出以下假設(shè): ?Node為工作流中的一個(gè)節(jié)點(diǎn); ?Node的前置節(jié)點(diǎn)共有m個(gè),分別為PNode1, pNode2,..., pNodem ; ?Node的后續(xù)節(jié)點(diǎn)共有n個(gè),分別為IiNode1, nNode2,..., nNoden ; 當(dāng)節(jié)點(diǎn)Node執(zhí)行完成、產(chǎn)生新數(shù)據(jù)后: .1)判斷節(jié)點(diǎn)Node是否為首次執(zhí)行,如果是首次執(zhí)行,則執(zhí)行步驟2);否則節(jié)點(diǎn)Node為重新執(zhí)行,則執(zhí)行步驟3); . 2)Node節(jié)點(diǎn)為首次執(zhí)行,執(zhí)行以下子步驟: .2.1)檢查是否存在這樣的數(shù)據(jù)記錄:〈NextNode>為Node的引用,〈NextNodeVersion〉為O ;如果存在這樣的數(shù)據(jù)記錄,則將該數(shù)據(jù)記錄的〈NextNodeVersion〉更新為節(jié)點(diǎn)Node的數(shù)據(jù)版本號(hào);如果不存在這樣的數(shù)據(jù)記錄,執(zhí)行步驟2.2); . 2.2)為Node的第I個(gè)后續(xù)節(jié)點(diǎn)Node1在存儲(chǔ)結(jié)構(gòu)中增加一項(xiàng)數(shù)據(jù)記錄,其中的〈CurrentNode〉存儲(chǔ)節(jié)點(diǎn)Node的引用,<CurrentNodeVersion)存儲(chǔ)節(jié)點(diǎn)Node的數(shù)據(jù)版本號(hào),〈NextNode〉存儲(chǔ) Node1 的引用,〈NextNodeVersion〉為 O ; .2.3)重復(fù)執(zhí)行步驟2.2),直至為Node的所有后續(xù)節(jié)點(diǎn)都在存儲(chǔ)結(jié)構(gòu)中建立了對(duì)應(yīng)的數(shù)據(jù)記錄; .2.4)方法結(jié)束; .3)Node節(jié)點(diǎn)為重新執(zhí)行,假設(shè)Node原來的最新數(shù)據(jù)版本號(hào)為OldVersion,重新執(zhí)行后得到的新數(shù)據(jù)版本號(hào)為NewVersion,本方法將執(zhí)行以下子步驟:. 3.1)在存儲(chǔ)結(jié)構(gòu)中檢查是否存在這樣的數(shù)據(jù)記錄:〈NextNode>為Node的引用,〈NextNodeVersion〉為O ;如果存在這樣的數(shù)據(jù)記錄,表明該節(jié)點(diǎn)是由于其前置節(jié)點(diǎn)重做而導(dǎo)致的重做,則將該數(shù)據(jù)記錄的〈NextNodeVersion〉更新為節(jié)點(diǎn)Node的新數(shù)據(jù)版本號(hào)NewVersion值,繼續(xù)執(zhí)行方法步驟3.3);如果不存在這樣的數(shù)據(jù)記錄,則執(zhí)行方法步驟3.2); . 3.2)在存儲(chǔ)結(jié)構(gòu)中檢查是否存在這樣的數(shù)據(jù)記錄:〈NextNode>為Node的引用,〈NextNodeVersion〉為Node原來的數(shù)據(jù)版本號(hào)為OldVersion ;如果存在這樣的數(shù)據(jù)記錄,表明該節(jié)點(diǎn)是主動(dòng)發(fā)起的重新執(zhí)行,則復(fù)制該數(shù)據(jù)記錄,并將復(fù)制得到的數(shù)據(jù)記錄的〈NextNodeVersion〉更新為節(jié)點(diǎn)Node的新數(shù)據(jù)版本號(hào)NewVersion值,繼續(xù)執(zhí)行方法步驟3.3 ;如果不存在這樣的數(shù)據(jù)記錄,則算法結(jié)束; . 3.3)在存儲(chǔ)結(jié)構(gòu)中檢查是否存在這樣的數(shù)據(jù)記錄:〈CurrentNode〉為Node的引用,<CurrentNodeVersion)為 Node 原來的數(shù)據(jù)版本號(hào)為 OldVersion,〈NextNodeVersion〉為O ;如果存在這樣的數(shù)據(jù)記錄,則將該數(shù)據(jù)記錄的〈NextNodeVersion〉更新為End值,這樣就避免了 Node的后繼節(jié)點(diǎn)還使用舊的數(shù)據(jù)進(jìn)行計(jì)算;如果不存在這樣的數(shù)據(jù)記錄,則跳過該步驟,繼續(xù)執(zhí)行步驟3.4); .3.4)為Node的第I個(gè)后續(xù)節(jié)點(diǎn)Node1在存儲(chǔ)結(jié)構(gòu)中增加一項(xiàng)數(shù)據(jù)記錄,其中的〈CurrentNode〉存儲(chǔ)節(jié)點(diǎn) Node 的引用,〈CurrentNodeVersion〉存儲(chǔ)節(jié)點(diǎn) Node 的新數(shù)據(jù)版本號(hào)NewVersion,〈NextNode〉存儲(chǔ)Node的第I個(gè)后續(xù)節(jié)點(diǎn)Node1的引用,〈NextNodeVersion〉為 O ; .3.5)重復(fù)執(zhí)行步驟3.4),直至為Node的所有后續(xù)節(jié)點(diǎn)都在存儲(chǔ)結(jié)構(gòu)中建立了對(duì)應(yīng)的數(shù)據(jù)記錄; . 3.6)方法結(jié)束; 至此,數(shù)據(jù)世系關(guān)系建立與更新方法執(zhí)行完畢,通過對(duì)科學(xué)工作流模型中的每個(gè)節(jié)點(diǎn)進(jìn)行上述方法進(jìn)行操作,即可為整個(gè)科學(xué)工作流模型建立數(shù)據(jù)世系關(guān)系模型。
10.如權(quán)利要求9所述的數(shù)據(jù)世系追溯方法,其特征是,科學(xué)工作流節(jié)點(diǎn)的數(shù)據(jù)世系追溯方法,基于之前建立的數(shù)據(jù)世系關(guān)系模型,可以基于科學(xué)工作流中任一節(jié)點(diǎn)的任一版本數(shù)據(jù),向前追溯該節(jié)點(diǎn)的該版本數(shù)據(jù)是由前置節(jié)點(diǎn)的哪個(gè)版本數(shù)據(jù)推衍而來,向后查詢?cè)摴?jié)點(diǎn)的該版本數(shù)據(jù)推衍出了哪些后置節(jié)點(diǎn)的數(shù)據(jù)版本;分為向前追溯和向后推衍兩個(gè)子過程; 數(shù)據(jù)世系追溯方法的輸入應(yīng)包括已建立好的科學(xué)工作流模型,以及作為追溯操作基點(diǎn)的科學(xué)工作流中某個(gè)節(jié)點(diǎn)和該節(jié)點(diǎn)的某個(gè)數(shù)據(jù)版本;假設(shè)輸入的節(jié)點(diǎn)為Node并且該節(jié)點(diǎn)的版本號(hào)為Version,兩者組成一個(gè)二元組(Node, Version),為處理方便建立一個(gè)隊(duì)列數(shù)據(jù)結(jié)構(gòu)Q存儲(chǔ)該二元組,則數(shù)據(jù)世系追溯方法的執(zhí)行過程如下: ?向前追溯過程: 1)對(duì)于節(jié)點(diǎn)Node和其版本號(hào)Version所組成的一個(gè)二元組(Node,Version),首先將其加入待處理隊(duì)列Q ; 2)通過已建立好的科學(xué)工作流模型找到Node節(jié)點(diǎn)的所有前置節(jié)點(diǎn),記為PNode1,PNode2,...,PNodem;如果不存在任何前置節(jié)點(diǎn),則跳轉(zhuǎn)到步驟5); 3)在建立好的世系數(shù)據(jù)結(jié)構(gòu)中查找如下數(shù)據(jù)記錄:〈CurrentNode>值為對(duì)PNode1的引用,<NextNode>值為對(duì)Node的引用,<NextNodeVersion>值為Version ;如果存在這樣的數(shù)據(jù),貝丨』記錄下〈CurrentNodeVersion〉的值,假設(shè)為pVersion,這表明Node節(jié)點(diǎn)的Version版本數(shù)據(jù)是根據(jù)其前置節(jié)點(diǎn)PNode1的pVersion版本數(shù)據(jù)計(jì)算出來的,如果待處理隊(duì)列Q中沒有二元組(PNode1, pVersion),則將其加入Q ;如果不存在這樣的數(shù)據(jù),繼續(xù)執(zhí)行步驟4); 4)重復(fù)步驟3),查詢Node的Version版本數(shù)據(jù)所對(duì)應(yīng)的前置節(jié)點(diǎn)pNode2,..pNodem的版本號(hào),加入待處理隊(duì)列Q ; 5)從隊(duì)列Q中刪除(Node,Version); 6)從隊(duì)列Q中順序選擇下一個(gè)二元組,重復(fù)步驟2)至5),從而遞歸地向前追溯數(shù)據(jù)世系關(guān)系,直至隊(duì)列Q為空; ?向后推衍過程: 1)對(duì)于節(jié)點(diǎn)Node和其版本號(hào)Version所組成的一個(gè)二元組(Node,Version),首先將其加入待處理隊(duì)列Q ; 2)判斷其版本號(hào)Version是否為End或0,如果為End或0,跳轉(zhuǎn)至步驟5),如果不為End,則通過已建立好的科學(xué)工作流模型找到Node節(jié)點(diǎn)的所有已執(zhí)行完且不處在待重做狀態(tài)下的后繼節(jié)點(diǎn),記為IiNode1, nNode2,..., nNoden ;如果不存在任何后繼節(jié)點(diǎn),跳轉(zhuǎn)至步驟5); 3)在根據(jù)建立好的譜系數(shù)據(jù)結(jié)構(gòu)中查找如下數(shù)據(jù)記錄:〈CurrentNode>值為對(duì)Node的引用,<CurrentNodeVersion)值為 Version,〈NextNode〉值為對(duì) IiNode1 的引用,且<NextNodeVersion>的版本號(hào)最新;如果存在這樣的數(shù)據(jù),則記錄下〈NextNodeVersion〉的值,假設(shè)為nVersion,這表明后置節(jié)點(diǎn)IiNode1根據(jù)Node節(jié)點(diǎn)的Version版本數(shù)據(jù)計(jì)算出的最新版本數(shù)據(jù)是nVersion,如果待處理隊(duì)列Q中沒有二元組(IiNode1, nVersion),將其加入Q ;如果不存在這樣的數(shù)據(jù) ,則執(zhí)行步驟4); 4)重復(fù)步驟3),查詢Node的Version版本數(shù)據(jù)所對(duì)應(yīng)的后置節(jié)點(diǎn)nNode2,...,nNoden的最新版本號(hào),并進(jìn)行記錄,加入待處理隊(duì)列Q ; 5)從隊(duì)列Q中刪除(Node,Version); 6)從隊(duì)列Q中順序選擇下一個(gè)二元組,重復(fù)步驟2)至5),從而遞歸地向后推衍數(shù)據(jù)世系關(guān)系,直至隊(duì)列Q為空; 最終得到了 Node節(jié)點(diǎn)Version版本數(shù)據(jù)的前置、后繼數(shù)據(jù)版本,結(jié)合科學(xué)工作流模型中定義的節(jié)點(diǎn)之間前置、后繼關(guān)系,可將每一個(gè)數(shù)據(jù)版本標(biāo)識(shí)在對(duì)應(yīng)的節(jié)點(diǎn)上,形成一個(gè)數(shù)據(jù)世系關(guān)系模型,再通過對(duì)科學(xué)工作流模型輸出方法進(jìn)行擴(kuò)充,即可輸出該數(shù)據(jù)世系關(guān)系模型。
【文檔編號(hào)】G06Q10/06GK103745319SQ201410010013
【公開日】2014年4月23日 申請(qǐng)日期:2014年1月9日 優(yōu)先權(quán)日:2014年1月9日
【發(fā)明者】黃雨, 井玉欣, 王捍貧, 張世琨 申請(qǐng)人:北京大學(xué)