數(shù)據(jù)及代碼版本管理系統(tǒng)及方法
【專利摘要】本發(fā)明提供一種數(shù)據(jù)和代碼版本管理系統(tǒng)及方法。其中,所述系統(tǒng)包括:數(shù)據(jù)管理模塊,代碼管理模塊,執(zhí)行引擎模塊及系統(tǒng)核心模塊,其中,數(shù)據(jù)管理模塊存儲有至少一個數(shù)據(jù)集;代碼管理模塊存儲有至少一個執(zhí)行代碼,以及接收用戶推送的代碼予以存儲或依據(jù)用戶推送的代碼發(fā)送一代碼處理請求;執(zhí)行引擎模塊配置有至少一種執(zhí)行后端引擎,依據(jù)接收的執(zhí)行命令調(diào)用一執(zhí)行后端引擎,運行一執(zhí)行代碼以對所述數(shù)據(jù)管理模塊中的至少一數(shù)據(jù)集執(zhí)行操作;系統(tǒng)核心模塊接收到用戶提交的數(shù)據(jù)處理請求時,處理數(shù)據(jù)管理模塊中的數(shù)據(jù)集,創(chuàng)建數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息和代碼版本信息。本發(fā)明有效解決了數(shù)據(jù)和代碼的版本管理效率低或混亂等問題。
【專利說明】
數(shù)據(jù)及代碼版本管理系統(tǒng)及方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及數(shù)據(jù)分析領(lǐng)域,特別是涉及一種數(shù)據(jù)和代碼版本管理系統(tǒng)及方法。
【背景技術(shù)】
[0002]近幾年,人們收集了大量的數(shù)據(jù)。同時,數(shù)據(jù)科學家也成為各大公司炙手可熱的工作。但是,現(xiàn)在缺乏足夠的工具幫助數(shù)據(jù)科學家分析數(shù)據(jù)流。隨著數(shù)據(jù)科學的任務(wù)越來越復雜,許多數(shù)據(jù)分析師開始改造代碼版本工具,比如說Git。但是,數(shù)據(jù)科學的任務(wù)并不是Git可以完全處理的。
[0003]首先,數(shù)據(jù)科學是以數(shù)據(jù)為中心的。一個數(shù)據(jù)集可以經(jīng)過清洗、標記和預處理等幾個操作。這樣數(shù)據(jù)集就產(chǎn)生了多個版本。數(shù)據(jù)科學家需要記錄這些版本以及隨時修改數(shù)據(jù)。一種常見但并不推薦的方法就是保存多個副本,并將些副本分別命名為data, csv,data-vers1nl.csv,data-final-vers1n.csv,data-last_vers1n.csv。這種命名方式經(jīng)常使人們感到很混亂。而因為版本或者數(shù)據(jù)集弄錯經(jīng)常會導致一些錯誤。
[0004]第二,一個機器學習模型通常包含很多參數(shù),而訓練這些參數(shù)是數(shù)據(jù)科學中很常見的任務(wù)。這些參數(shù)比如學習速率、初始值、正則化等等經(jīng)常讓人們感覺迷茫。所以,后來人們也就忘了這些參數(shù)的意義和重要性。
[0005]第三,當數(shù)據(jù)集越來越大,數(shù)據(jù)科學家經(jīng)常需要搭建一個分布式平臺,并且在其之上反復重復這些實驗。他們還可能使用一些第三方的軟件包。但是不幸的是,在不同的軟件/硬件環(huán)境中安裝和配置這些軟件包通常是很乏味的。
[0006]最后,數(shù)據(jù)科學家之間共享數(shù)據(jù)集和經(jīng)驗是很困難的事。當然他們可以共享他們的代碼和結(jié)果,但是這并不利于他們深刻理解他們的數(shù)據(jù)集以及充分利用別人的代碼和結(jié)果O
[0007]MIT的DataHub項目支持數(shù)據(jù)集版本控制,卻并不能操控整個數(shù)據(jù)集分析與開發(fā)過程。所以該項目更多的是一個數(shù)據(jù)庫管理工具而不是軟件開發(fā)工具。另一方面,Harvard的Dataverse則是一個數(shù)據(jù)發(fā)布和分享平臺,但缺少數(shù)據(jù)的版本控制和分析功能。
【發(fā)明內(nèi)容】
[0008]鑒于以上所述現(xiàn)有技術(shù)的缺點,本發(fā)明的目的在于提供一種數(shù)據(jù)和代碼版本管理系統(tǒng)及方法,用于解決現(xiàn)有技術(shù)中數(shù)據(jù)和代碼的版本管理效率低或混亂等問題。
[0009]為實現(xiàn)上述目的及其他相關(guān)目的,本申請的第一方面在于提供一種數(shù)據(jù)版本管理系統(tǒng),包括:數(shù)據(jù)管理模塊,代碼管理模塊,執(zhí)行引擎模塊,以及系統(tǒng)核心模塊,其中,所述數(shù)據(jù)管理模塊存儲有至少一個數(shù)據(jù)集;所述代碼管理模塊存儲有至少一個執(zhí)行代碼,所述執(zhí)行代碼用于對所述至少一個數(shù)據(jù)集進行操作;所述執(zhí)行引擎模塊配置有至少一種執(zhí)行后端引擎,依據(jù)接收的執(zhí)行命令調(diào)用一執(zhí)行后端引擎,運行一執(zhí)行代碼以對所述數(shù)據(jù)管理模塊中的至少一數(shù)據(jù)集執(zhí)行操作;所述系統(tǒng)核心模塊接收到用戶提交的數(shù)據(jù)處理請求時,處理所述數(shù)據(jù)管理模塊中的數(shù)據(jù)集,創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本?目息O
[0010]于本申請的一實施例中,所述數(shù)據(jù)集的數(shù)據(jù)存儲于一第一存儲單元,所述數(shù)據(jù)集的元數(shù)據(jù)存儲于一第二存儲單元,且所述數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù)藉由一數(shù)據(jù)ID相關(guān)聯(lián)。
[0011]于本申請的一實施例中,所述系統(tǒng)核心模塊接收到用戶提交的數(shù)據(jù)處理請求為提交一個新數(shù)據(jù)集時,所述系統(tǒng)核心模塊提取所述新數(shù)據(jù)集的數(shù)據(jù)并存儲于所述第一存儲單元,提取所述新數(shù)據(jù)集的元數(shù)據(jù)并存儲于所述第二存儲單元,且形成一新數(shù)據(jù)ID關(guān)聯(lián)所述新數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù),創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0012]于本申請的一實施例中,所述系統(tǒng)核心模塊接收到用戶提交的數(shù)據(jù)處理請求為修改所述數(shù)據(jù)管理模塊中存儲的一個數(shù)據(jù)集時,所述系統(tǒng)核心模塊依據(jù)所述數(shù)據(jù)處理請求將一執(zhí)行代碼復制至所述執(zhí)行引擎模塊中,并發(fā)送一執(zhí)行命令給所述執(zhí)行引擎模塊令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集,所述系統(tǒng)核心模塊提取所述新數(shù)據(jù)集的數(shù)據(jù)并存儲于所述第一存儲單元,提取所述新數(shù)據(jù)集的元數(shù)據(jù)并存儲于所述第二存儲單元,且形成一新數(shù)據(jù)ID關(guān)聯(lián)所述新數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù),以及形成一代碼ID將所述執(zhí)行代碼與所述新數(shù)據(jù)集相關(guān)聯(lián),創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0013]本申請的另一方面提供一種數(shù)據(jù)版本管理方法,所述方法包括以下步驟:預存至少一個數(shù)據(jù)集以及用于對所述至少一個數(shù)據(jù)集進行操作的至少一個執(zhí)行代碼,并配置至少一種用于運行所述執(zhí)行代碼的執(zhí)行后端引擎;以及;接收到用戶提交的數(shù)據(jù)處理請求時,調(diào)用一執(zhí)行后端引擎運行所述至少一執(zhí)行代碼以對所述至少一數(shù)據(jù)集執(zhí)行處理,創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0014]于本申請的一實施例中,所述數(shù)據(jù)集的數(shù)據(jù)存儲于一第一存儲單元,所述數(shù)據(jù)集的元數(shù)據(jù)存儲于一第二存儲單元,且所述數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù)藉由一數(shù)據(jù)ID相關(guān)聯(lián)。
[0015]于本申請的一實施例中,所述的接收到用戶提交的數(shù)據(jù)處理請求為提交一個新數(shù)據(jù)集時,提取所述新數(shù)據(jù)集的數(shù)據(jù)并存儲于所述第一存儲單元,提取所述新數(shù)據(jù)集的元數(shù)據(jù)并存儲于所述第二存儲單元,且形成一新數(shù)據(jù)ID關(guān)聯(lián)所述新數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù),并記錄形成的數(shù)據(jù)版本信息。
[0016]于本申請的一實施例中,所述的接收到用戶提交的數(shù)據(jù)處理請求為修改所述數(shù)據(jù)管理模塊中存儲的一個數(shù)據(jù)集時,依據(jù)所述數(shù)據(jù)處理請求將一執(zhí)行代碼復制至所述執(zhí)行引擎中,并發(fā)送一執(zhí)行命令給所述執(zhí)行引擎令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集,提取所述新數(shù)據(jù)集的數(shù)據(jù)并存儲于所述第一存儲單元,提取所述新數(shù)據(jù)集的元數(shù)據(jù)并存儲于所述第二存儲單元,且形成一新數(shù)據(jù)ID關(guān)聯(lián)所述新數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù),以及形成一代碼ID將所述執(zhí)行代碼與所述新數(shù)據(jù)集相關(guān)聯(lián),并記錄形成的數(shù)據(jù)版本信息。
[0017]本申請的再一方面在于提供一種代碼版本管理系統(tǒng),包括:數(shù)據(jù)管理模塊,代碼管理模塊,執(zhí)行引擎模塊,以及系統(tǒng)核心模塊,其中所述數(shù)據(jù)管理模塊存儲有至少一個數(shù)據(jù)集;所述代碼管理模塊存儲有至少一個執(zhí)行代碼,所述執(zhí)行代碼用于對所述數(shù)據(jù)管理模塊存儲的至少一個數(shù)據(jù)集進行操作;所述代碼管理模塊還用于接收用戶推送的代碼予以存儲或依據(jù)用戶推送的代碼發(fā)送一代碼處理請求;所述執(zhí)行引擎模塊配置有至少一種執(zhí)行后端引擎,用于接收到執(zhí)行命令時,依據(jù)一執(zhí)行命令調(diào)用所述執(zhí)行后端引擎,運行一執(zhí)行代碼以對所述數(shù)據(jù)管理模塊中的一數(shù)據(jù)集執(zhí)行操作;所述系統(tǒng)核心模塊用于記錄用戶推送的代碼并形成代碼版本信息,以及接收到所述代碼管理模塊的代碼處理請求時,發(fā)送一執(zhí)行命令給所述執(zhí)行引擎模塊,令其運行所述代碼管理模塊中的執(zhí)行代碼,并在所述執(zhí)行代碼以對所述數(shù)據(jù)管理模塊中的一數(shù)據(jù)集執(zhí)行操作后記錄形成的代碼版本信息。
[0018]于本申請的一實施例中,所述系統(tǒng)核心模塊還用于依據(jù)用戶提交的數(shù)據(jù)處理請求將一執(zhí)行代碼復制至所述執(zhí)行引擎模塊中,并發(fā)送一執(zhí)行命令給所述執(zhí)行引擎模塊令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集,并形成一代碼ID將所述執(zhí)行代碼與所述新數(shù)據(jù)集相關(guān)聯(lián),并記錄形成的代碼版本信息。
[0019]于本申請的一實施例中,所述系統(tǒng)核心模塊依據(jù)所述數(shù)據(jù)處理請求復制至所述執(zhí)行引擎模塊的執(zhí)行代碼為用戶提交的新執(zhí)行代碼或者調(diào)用的所述代碼管理模塊中存儲的執(zhí)行代碼。
[0020]本申請的又一方面在于提供一種代碼版本管理方法,包括以下步驟:預存至少一個數(shù)據(jù)集以及用于對所述至少一個數(shù)據(jù)集進行操作的至少一個執(zhí)行代碼,并配置至少一種用于運行所述執(zhí)行代碼的執(zhí)行后端引擎;以及;接收用戶推送的代碼予以存儲,并記錄形成的代碼版本信息;或者依據(jù)用戶推送的代碼發(fā)送一代碼處理請求,發(fā)送一執(zhí)行命令給所述執(zhí)行后端引擎令其運行預存的執(zhí)行代碼,并在所述執(zhí)行代碼以對預存的所述一數(shù)據(jù)集執(zhí)行操作后記錄形成的代碼版本信息。
[0021]于本申請的一實施例中,所述數(shù)據(jù)集的數(shù)據(jù)存儲于一第一存儲單元,所述數(shù)據(jù)集的元數(shù)據(jù)存儲于一第二存儲單元,且所述數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù)藉由一數(shù)據(jù)ID相關(guān)聯(lián)。
[0022]于本申請的一實施例中,代碼版本管理方法還包括步驟,依據(jù)用戶提交的數(shù)據(jù)處理請求將一執(zhí)行代碼復制至所述執(zhí)行后端引擎中,并發(fā)送一執(zhí)行命令令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集,并形成一代碼ID將所述執(zhí)行代碼與所述新數(shù)據(jù)集相關(guān)聯(lián),并記錄形成的代碼版本信息。
[0023]于本申請的一實施例中,所述的依據(jù)所述數(shù)據(jù)處理請求復制至所述執(zhí)行后端引擎中的執(zhí)行代碼為用戶提交的新執(zhí)行代碼或者調(diào)用的所述代碼管理模塊中存儲的執(zhí)行代碼。
[0024]于本申請的一實施例中,代碼版本管理方法還包括配置有多種用戶UI的步驟,用以分別接收不同用戶提交的請求或向不同用戶反饋請求信息。
[0025]如上所述,本發(fā)明的數(shù)據(jù)和代碼版本管理系統(tǒng)及方法,具有以下有益效果:本發(fā)明通過為數(shù)據(jù)集和代碼提供各自的版本管理,并為各數(shù)據(jù)集和代碼提供有向無環(huán)的工作流及構(gòu)建二者的關(guān)聯(lián)關(guān)系,有效解決了數(shù)據(jù)和代碼的版本管理效率低或混亂等問題;另外,采用UI設(shè)計,能夠為用戶比對、分析各歷史數(shù)據(jù)集提供了便捷的途徑;另外,各單元分布在不同服務(wù)器上,能夠便于減輕各服務(wù)器上的運行壓力。
【附圖說明】
[0026]圖1顯示為本發(fā)明的數(shù)據(jù)版本管理系統(tǒng)的結(jié)構(gòu)示意圖。
[0027]圖2顯示為本發(fā)明的數(shù)據(jù)版本管理方法的流程圖。
[0028]圖3顯示為本發(fā)明的代碼版本管理系統(tǒng)的結(jié)構(gòu)示意圖。
[0029]圖4顯示為本發(fā)明的代碼版本管理方法的流程圖。
[0030]圖5顯示為本發(fā)明一具體實施例中數(shù)據(jù)工作流的組成示意圖。
元件標號說明
[0031]I數(shù)據(jù)版本管理系統(tǒng)
[0032]11數(shù)據(jù)管理模塊
[0033]12代碼管理模塊
[0034]13執(zhí)行引擎模塊
[0035]14系統(tǒng)核心模塊
[0036]2代碼版本管理系統(tǒng)
[0037]21數(shù)據(jù)管理模塊
[0038]22代碼管理模塊
[0039]23執(zhí)行引擎模塊
[0040]24系統(tǒng)核心模塊[0041 ]Sll ?S12、S21 ?S22步驟
【具體實施方式】
[0042]以下通過特定的具體實例說明本發(fā)明的實施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點與功效。本發(fā)明還可以通過另外不同的【具體實施方式】加以實施或應(yīng)用,本說明書中的各項細節(jié)也可以基于不同觀點與應(yīng)用,在沒有背離本發(fā)明的精神下進行各種修飾或改變。需說明的是,在不沖突的情況下,以下實施例及實施例中的特征可以相互組合。
[0043]需要說明的是,以下實施例中所提供的圖示僅以示意方式說明本發(fā)明的基本構(gòu)想,遂圖式中僅顯示與本發(fā)明中有關(guān)的組件而非按照實際實施時的組件數(shù)目及形狀繪制,其實際實施時各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可能更為復雜。
[0044]實施例一
[0045]請參閱圖1,顯示為本發(fā)明的數(shù)據(jù)版本管理系統(tǒng)的結(jié)構(gòu)示意圖,如圖所示,本申請的第一方面在于提供一種數(shù)據(jù)版本管理系統(tǒng),所述數(shù)據(jù)版本管理體系可以配置在單臺服務(wù)器、服務(wù)器集群、基于云計算架構(gòu)的服務(wù)器、或分布式服務(wù)器中。其中,所述服務(wù)器集群指將很多服務(wù)器集中起來一起進行數(shù)據(jù)版本管理,所述服務(wù)器集群可以利用多個計算機進行并行計算,以提高運算速度。所述基于云計算架構(gòu)的服務(wù)器通過虛擬化技術(shù)將各服務(wù)器存儲池化,使得數(shù)據(jù)版本管理系統(tǒng)中各模塊所在服務(wù)器共享計算資源。所述分布式服務(wù)器是將所述數(shù)據(jù)版本管理系統(tǒng)中的數(shù)據(jù)和程序分散在多個服務(wù)器上進行協(xié)調(diào)運行。
[0046]所述數(shù)據(jù)版本管理系統(tǒng)中的各模塊可根據(jù)實際設(shè)計需要,配置在上述任一種服務(wù)器中。具體地,所述數(shù)據(jù)版本管理系統(tǒng)I包括:數(shù)據(jù)管理模塊11,代碼管理模塊12,執(zhí)行引擎模塊13,以及系統(tǒng)核心模塊14。
[0047]所述數(shù)據(jù)管理模塊11存儲有至少一個數(shù)據(jù)集。其中,所述數(shù)據(jù)集為被版本管理的數(shù)據(jù)的集合。所述數(shù)據(jù)包括但不限于:文本數(shù)據(jù)、和/或多媒體數(shù)據(jù)等。在一具體的實施例中,所述文本數(shù)據(jù)舉例為代碼數(shù)據(jù)、系統(tǒng)日志等。所述多媒體數(shù)據(jù)舉例為圖片數(shù)據(jù)、視頻數(shù)據(jù)等。若所述數(shù)據(jù)管理模塊11保存多個數(shù)據(jù)集,則各數(shù)據(jù)集之間可以是無關(guān)聯(lián)的、或者有關(guān)聯(lián)的。例如,數(shù)據(jù)集Al、A2、和A3中,數(shù)據(jù)集A3是由數(shù)據(jù)集Al和A2衍生出的。數(shù)據(jù)集A3通過索引、或關(guān)聯(lián)字段與數(shù)據(jù)集Al和A2進行關(guān)聯(lián)。
[0048]所述數(shù)據(jù)集中還可以包含用于索引、或描述數(shù)據(jù)的元數(shù)據(jù)。其中,所述數(shù)據(jù)集中的各數(shù)據(jù)及對應(yīng)的元數(shù)據(jù)可藉由一數(shù)據(jù)ID相關(guān)聯(lián)。具體地,所述元數(shù)據(jù)(Metadata)又稱中介數(shù)據(jù)、中繼數(shù)據(jù),為描述數(shù)據(jù)的數(shù)據(jù)(data about data),主要是描述數(shù)據(jù)屬性(property)的信息,用來支持如指示存儲位置、歷史數(shù)據(jù)、資源查找、文件記錄等功能。所述的元數(shù)據(jù)算是一種電子式目錄,為了達到編制目錄的目的,必須在描述并收藏數(shù)據(jù)的內(nèi)容或特色,進而達成協(xié)助數(shù)據(jù)檢索的目的。
[0049]一種可選方案是,所述數(shù)據(jù)集的數(shù)據(jù)存儲于一第一存儲單元,所述數(shù)據(jù)集的元數(shù)據(jù)存儲于一第二存儲單元,且所述數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù)藉由一數(shù)據(jù)ID相關(guān)聯(lián)。在此,所述第一存儲單元和第二存儲單元可配置在同一數(shù)據(jù)庫服務(wù)器內(nèi)。也可以根據(jù)實際需要配置在不同的服務(wù)器內(nèi)。例如在一可選的實施例中,所述第一存儲單元配置于Hadoop分布式文件系統(tǒng)(大數(shù)據(jù)分布式文件系統(tǒng))中;第二存儲單元配置于NoSQL數(shù)據(jù)庫(非關(guān)系型的數(shù)據(jù)庫)中。
[°°50] 其中,所述分布式文件系統(tǒng)(Distributed File System)設(shè)計基于客戶機/服務(wù)器模式,具體是指文件系統(tǒng)管理的物理存儲資源不一定直接連接在本地節(jié)點上,而是通過計算機網(wǎng)絡(luò)與節(jié)點相連。所述NoSQL數(shù)據(jù)庫例如為鍵值(Key-Value)存儲數(shù)據(jù)庫,列存儲數(shù)據(jù)庫,文檔型數(shù)據(jù)庫,圖形(Graph)數(shù)據(jù)庫或MongoDB數(shù)據(jù)庫等。
[0051]在本申請中,利用分布式文件系統(tǒng)可以高效的掃描數(shù)據(jù)集,但是隨機訪問則低效的。為了解決這個問題,本申請?zhí)峁┑姆桨甘?,存儲每張圖片的標識和注解,例如文件名、大小、內(nèi)容描述,這些內(nèi)容被存儲在NoSQL數(shù)據(jù)庫中以加快查詢速度,也就是根據(jù)數(shù)據(jù)ID來連接原始數(shù)據(jù)和元數(shù)據(jù)。
[0052]本申請的數(shù)據(jù)版本管理系統(tǒng)記錄了數(shù)據(jù)的每個域,比如,一個新數(shù)據(jù)為一個新名字和版本號的集合。在本申請具體采用的實施例中使用的是MongoDB數(shù)據(jù)庫來存儲元數(shù)據(jù),但并不局限與此,在其他的實施方式中,還可能將會迀移到列存儲數(shù)據(jù)庫,鍵值存儲數(shù)據(jù)庫,文檔型數(shù)據(jù)庫,或者圖形(Graph)數(shù)據(jù)庫中以提高效率。
[0053]所述代碼管理模塊12存儲有至少一個執(zhí)行代碼,所述執(zhí)行代碼用于對所述至少一個數(shù)據(jù)集進行操作。其中,當所述執(zhí)行代碼被調(diào)用時,執(zhí)行對數(shù)據(jù)集、及數(shù)據(jù)集中的數(shù)據(jù)進行增刪改等操作。例如,所述執(zhí)行代碼包括但不限于:增加一新數(shù)據(jù)集的執(zhí)行代碼、刪除數(shù)據(jù)集的執(zhí)行代碼、在預設(shè)數(shù)據(jù)集中的數(shù)據(jù)中增加標簽/字符等的執(zhí)行代碼、在預設(shè)數(shù)據(jù)集中的數(shù)據(jù)中刪除標簽/字符等的執(zhí)行代碼、在預設(shè)數(shù)據(jù)集中的數(shù)據(jù)中替換標簽/字符等的執(zhí)行代碼。
[0054]在一個可選用是實施例中,所述的執(zhí)行代碼存儲在例如Gitlab中,并且使用GitLab的API與之交互。所述的Gitlab是利用Ruby on Rails一個開源的版本管理系統(tǒng),實現(xiàn)一個自托管的Git項目倉庫,可通過Web界面進行訪問公開的或者私人項目。所述的Gitlab擁有與Github類似的功能,能夠瀏覽源代碼,管理缺陷和注釋??梢怨芾韴F隊對倉庫的訪問,所述的Gitlab非常易于瀏覽提交過的版本并提供一個文件歷史庫。團隊成員可以利用內(nèi)置的簡單聊天程序(Wall)進行交流。所述的Gitlab還提供一個代碼片段收集功能可以輕松實現(xiàn)代碼復用,便于日后有需要的時候進行查找。
[0055]所述執(zhí)行引擎模塊13配置有至少一種執(zhí)行后端引擎,依據(jù)接收的執(zhí)行命令調(diào)用一執(zhí)行后端引擎,運行一執(zhí)行代碼以對所述數(shù)據(jù)管理模塊11中的至少一數(shù)據(jù)集執(zhí)行操作。在此,所述執(zhí)行后端引擎針對各執(zhí)行代碼的編程語言而設(shè)。所述執(zhí)行后端引擎包括單機引擎及分布式引擎。
[0056]所述單機引擎例如為單機上的Python,所述的Python是純粹的自由軟件,源代碼和解釋器CPython遵循GPL(GNU General Public License)協(xié)議,其在執(zhí)行時首先會將.py文件中的源代碼編譯成Python的byte code(字節(jié)碼),然后再由Python Virtual Machine(Python虛擬機)來執(zhí)行這些編譯好的byte code。
[0057]所述分布式引擎例如為集群上的Spark,所述Spark是一個快速且通用的計算集群框架,它的內(nèi)核使用Scala語言編寫,它提供了 Scala、Java和Python編程語言high-1 eve IAPI,使用這些API能夠非常容易地開發(fā)并行處理的應(yīng)用程序。
[0058]在具體的實施例中,配置所述的執(zhí)行后端引擎是必需,因為這樣不但方便為用戶搭建好分布式集群的環(huán)境;還可以能夠自動地將代碼和結(jié)果數(shù)據(jù)集連接起來。也就是說,在本申請的數(shù)據(jù)版本管理系統(tǒng)中執(zhí)行代碼可以得到任意的中間結(jié)果,只要用戶保留了原始數(shù)據(jù)和代碼。
[0059]所述系統(tǒng)核心模塊14接收到用戶提交的數(shù)據(jù)處理請求時,處理所述數(shù)據(jù)管理模塊11中的數(shù)據(jù)集,創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0060]其中,所述數(shù)據(jù)工作流(DataWork Flow,DWF)用于標記在版本管理期間數(shù)據(jù)集和/或數(shù)據(jù)集中的數(shù)據(jù)的有向的無環(huán)的版本節(jié)點。對于新數(shù)據(jù)集來說,所述數(shù)據(jù)工作流對應(yīng)標記版本節(jié)點為根節(jié)點。對于包含版本更新的數(shù)據(jù)集/數(shù)據(jù)來說,所述數(shù)據(jù)工作流為表示數(shù)據(jù)集中的兩數(shù)據(jù)之間、和/或兩數(shù)據(jù)集之間的衍生關(guān)系。所述衍生關(guān)系包括一數(shù)據(jù)集的執(zhí)行歷史記錄和版本。其中,所述執(zhí)行歷史記錄包括但不限于:變化前和變化后的數(shù)據(jù)集中數(shù)據(jù)的指向關(guān)系(即父子節(jié)點關(guān)系)、變化前后所調(diào)用的執(zhí)行代碼、執(zhí)行時間等。簡而言之,所述數(shù)據(jù)工作流的概念作為本申請的數(shù)據(jù)版本管理系統(tǒng)中的數(shù)據(jù)集邏輯關(guān)系。所述數(shù)據(jù)集依據(jù)此形成了依賴關(guān)系。所述數(shù)據(jù)工作流是本申請的數(shù)據(jù)版本管理系統(tǒng)中重現(xiàn)數(shù)據(jù)的核心功會K。
[0061]在一個所述數(shù)據(jù)工作流中,一個節(jié)點表示表示了數(shù)據(jù)集的一個特定版本。一條連接兩個節(jié)點的有向邊表示一個數(shù)據(jù)集是有另一個數(shù)據(jù)集衍生而來。邊上的標記表示的則是一次實驗的代碼版本。請參閱圖5,圖5所示的一個數(shù)據(jù)工作流的示例,S卩,一個數(shù)據(jù)工作流是一個有向無環(huán)圖。圖片5表示了常見的一對一和多對一結(jié)構(gòu)兩種數(shù)據(jù)工作流結(jié)構(gòu)。
[0062]在上述的一對一結(jié)構(gòu)中,一個數(shù)據(jù)集由另一個數(shù)據(jù)集衍生而來。舉例來說,用戶可以基于一個已有的數(shù)據(jù)集創(chuàng)建一個新的數(shù)據(jù)集,并在新的數(shù)據(jù)集上打上一些新的標簽并將其共享給其他用戶。而上述的多對一結(jié)構(gòu)表示一個數(shù)據(jù)集可以由兩個或更多的數(shù)據(jù)集衍生而來。像一些合并兩個數(shù)據(jù)表之類的操作都是如此。
[0063]在本申請的數(shù)據(jù)版本管理系統(tǒng)中在實現(xiàn)上述數(shù)據(jù)工作流結(jié)構(gòu)的時候引入父子節(jié)點關(guān)系這一屬性用來記錄這個數(shù)據(jù)集是從哪個數(shù)據(jù)集衍生而來的。同時,本申請的數(shù)據(jù)版本管理系統(tǒng)還可以實現(xiàn)比較父子數(shù)據(jù)集之間的區(qū)別的功能。這些功能幫助用戶能更容易的發(fā)現(xiàn)自己代碼的修改導致了什么結(jié)果。因此,所述的數(shù)據(jù)工作流的結(jié)構(gòu)圖不但可以理順數(shù)據(jù)集之間的關(guān)系,還可以幫助管理用戶的執(zhí)行記錄,包括根據(jù)版本號來產(chǎn)生結(jié)果。
[0064]所述系統(tǒng)核心模塊14根據(jù)變化前的數(shù)據(jù)集及數(shù)據(jù)的標記信息(如ID值)和數(shù)據(jù)工作流,得到并記錄形成對應(yīng)變化后的數(shù)據(jù)版本信息。其中,所述數(shù)據(jù)版本信息包括但不限于數(shù)據(jù)集名稱、數(shù)據(jù)ID、代碼ID、形成時間、及運行日志中的至少一種。
[0065]在此,所述系統(tǒng)核心模塊14可以通過網(wǎng)絡(luò)/提交接口獲取用戶提交的數(shù)據(jù)處理請求,并根據(jù)所獲取的數(shù)據(jù)處理請求向所述執(zhí)行引擎模塊13發(fā)送對應(yīng)的執(zhí)行命令和從代碼管理模塊12中選定的執(zhí)行代碼,以供所述執(zhí)行引擎模塊13調(diào)用對應(yīng)的執(zhí)行后端引擎來運行所選擇的執(zhí)行代碼,以便進行數(shù)據(jù)集的版本管理。
[0066]比如在一具體的實施過程中,每當用戶向Gitlab服務(wù)器提交執(zhí)行代碼(Push),Gitlab服務(wù)器就會通過一個Web hook通知所述系統(tǒng)核心模塊14。所述系統(tǒng)核心模塊14會將用戶請求推入自己的隊列,同時從隊首選取請求來進行處理。所述系統(tǒng)核心模塊14會將該請求的執(zhí)行代碼拷貝到所述執(zhí)行引擎模塊13,然后所述執(zhí)行引擎模塊13會使用用戶提供的參數(shù)和輸入來運行執(zhí)行代碼。該任務(wù)結(jié)束之后,所述系統(tǒng)核心模塊14會記錄下這次請求的信息,包括這次Push在Gitlab服務(wù)器上的commit ID,用戶指定的參數(shù)以及任何具體與實驗相關(guān)的信息。有些情況下,實驗會產(chǎn)生新的數(shù)據(jù)集。這樣所述系統(tǒng)核心模塊14也會記錄這些數(shù)據(jù)集之間的關(guān)系,即前述的數(shù)據(jù)工作流。
[0067]當用戶提交處理的數(shù)據(jù)請求為多種情況,以下將分別予以闡述:
[0068]在一種情況下,當所述數(shù)據(jù)處理請求為提交一個新數(shù)據(jù)集時,所述系統(tǒng)核心模塊14可以直接將新數(shù)據(jù)集保存在第一存儲單元中,創(chuàng)建所述新數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息?;蛘?,所述系統(tǒng)核心模塊14按照該數(shù)據(jù)處理請求從代碼管理模塊12中選取對應(yīng)的執(zhí)行代碼,以及向執(zhí)行引擎模塊13發(fā)送對應(yīng)的提交新數(shù)據(jù)集的執(zhí)行命令。所述執(zhí)行引擎模塊13根據(jù)所接收的執(zhí)行命令執(zhí)行所選取的執(zhí)行代碼,并將所獲取的新數(shù)據(jù)集的數(shù)據(jù)存儲于第一存儲單元中。與此同時,所述系統(tǒng)核心模塊14還創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0069]在一種可選方案中,所述新數(shù)據(jù)集包括數(shù)據(jù)和元數(shù)據(jù)。所述系統(tǒng)核心模塊14在選取執(zhí)行代碼時,選取能夠?qū)?yīng)保存數(shù)據(jù)和元數(shù)據(jù)的執(zhí)行代碼,并執(zhí)行所選取的執(zhí)行代碼,從新數(shù)據(jù)集中分別提取數(shù)據(jù)和元數(shù)據(jù),再將所提取的數(shù)據(jù)存儲于第一存儲單元中,將所提取的元數(shù)據(jù)存儲于第二存儲單元,且形成一新數(shù)據(jù)ID關(guān)聯(lián)所述新數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù),創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。在此,所述數(shù)據(jù)工作流中包含作為根節(jié)點的數(shù)據(jù)和對應(yīng)的元數(shù)據(jù)。所記錄的數(shù)據(jù)版本信息包括:數(shù)據(jù)集名稱、數(shù)據(jù)ID、元數(shù)據(jù)ID、數(shù)據(jù)ID和元數(shù)據(jù)ID的對應(yīng)關(guān)系、執(zhí)行添加該數(shù)據(jù)集的代碼ID、形成時間、及運行日志。
[0070]在另一種情況下,當用戶提交的數(shù)據(jù)處理請求為修改所述數(shù)據(jù)管理模塊11中存儲的一個數(shù)據(jù)集時,所述系統(tǒng)核心模塊14依據(jù)所述數(shù)據(jù)處理請求將一執(zhí)行代碼復制至所述執(zhí)行引擎模塊13中,并發(fā)送一執(zhí)行命令給所述執(zhí)行引擎模塊13令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集。再將所形成的新數(shù)據(jù)集保存在第一存儲單元中,同時創(chuàng)建該新數(shù)據(jù)集相對修改前的數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0071]一種可選方式是,所述系統(tǒng)核心模塊14提取所述新數(shù)據(jù)集的數(shù)據(jù)并存儲于所述第一存儲單元,提取所述新數(shù)據(jù)集的元數(shù)據(jù)并存儲于所述第二存儲單元,且形成一新數(shù)據(jù)ID關(guān)聯(lián)所述新數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù),以及形成一代碼ID將所述執(zhí)行代碼與所述新數(shù)據(jù)集相關(guān)聯(lián),創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0072]更為優(yōu)選的方式是,所述系統(tǒng)核心模塊14依據(jù)所述數(shù)據(jù)處理請求復制至所述執(zhí)行引擎模塊13的執(zhí)行代碼為用戶提交的新執(zhí)行代碼或者調(diào)用的所述代碼管理模塊12中存儲的執(zhí)行代碼。
[0073]具體地,用戶還可以預先根據(jù)自身需求提交新的執(zhí)行代碼,并手動、或通過所述系統(tǒng)核心模塊14調(diào)整新的執(zhí)行代碼與執(zhí)行引擎模塊13中的執(zhí)行后端引擎之間的對應(yīng)關(guān)系。由此,當用戶提交的數(shù)據(jù)處理請求為修改所述數(shù)據(jù)管理模塊11中存儲的一個數(shù)據(jù)集時,所述系統(tǒng)核心模塊14依據(jù)所述數(shù)據(jù)處理請求,確定將該新的執(zhí)行代碼復制到所述執(zhí)行引擎模塊13中,并由對應(yīng)的執(zhí)行后端引擎執(zhí)行相應(yīng)的執(zhí)行代碼,以保存新的數(shù)據(jù)集,并創(chuàng)建新的數(shù)據(jù)集相對于修改前的數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0074]當用戶需要對不同版本之間的數(shù)據(jù)集進行分析和計算時,本實施例中一種優(yōu)選方式為,所述數(shù)據(jù)版本管理系統(tǒng)I還包括:用戶接口模塊(未予以圖示)。所述用戶接口模塊配置有多種用戶UI,用以分別接收不同用戶提交的請求或向不同用戶反饋請求信息。
[0075]具體地,用戶經(jīng)常需要分析一些數(shù)據(jù)集并且計算一些參數(shù),比如自然語言處理中的準確率或者股票市場回測中的每日投資回報。在創(chuàng)建了數(shù)據(jù)集的數(shù)據(jù)工作流及數(shù)據(jù)版本信息之后,所述用戶接口模塊可為用戶提供基于數(shù)據(jù)工作流而關(guān)聯(lián)的各數(shù)據(jù)集中的數(shù)據(jù)。所顯示的數(shù)據(jù)可以幫助用戶對比一對歷史分析結(jié)果、展示代碼和/或參數(shù)上的不同。針對多種用戶的多種UI設(shè)計可以幫助每一個用戶得到最好的算法和參數(shù)。
[0076]綜上所述,本申請?zhí)峁┑臄?shù)據(jù)版本管理系統(tǒng)可以實現(xiàn)在一個整合的系統(tǒng)里管理數(shù)據(jù)的版本,并在系統(tǒng)中運行用戶代碼;同時可以保留用戶的代碼和數(shù)據(jù),并能對兩次版本進行比較,發(fā)現(xiàn)不同;另外,本發(fā)明的數(shù)據(jù)版本管理系統(tǒng)將數(shù)據(jù)和元數(shù)據(jù)分開存儲,使得可以更快捷的過濾數(shù)據(jù);再者,本發(fā)明通過為數(shù)據(jù)集和代碼提供各自的版本管理,并為各數(shù)據(jù)集和代碼提供有向無環(huán)的工作流及構(gòu)建二者的關(guān)聯(lián)關(guān)系,有效解決了數(shù)據(jù)和代碼的版本管理效率低或混亂等問題;另外,采用多種UI設(shè)計,能夠為用戶比對、分析各歷史數(shù)據(jù)集提供了便捷的途徑;另外,各單元分布在不同服務(wù)器上,能夠便于減輕各服務(wù)器上的運行壓力。
[0077]實施例二
[0078]請參閱圖2,顯示為本發(fā)明的數(shù)據(jù)版本管理方法的流程圖,如圖所示,本申請的第二方面在于提供一種數(shù)據(jù)版本管理方法。所述數(shù)據(jù)版本管理方法主要有數(shù)據(jù)版本管理系統(tǒng)來執(zhí)行。其中,所述數(shù)據(jù)版本管理系統(tǒng)可以配置在單臺服務(wù)器、服務(wù)器集群、基于云計算架構(gòu)的服務(wù)器、或分布式服務(wù)器中。其中,所述服務(wù)器集群指將很多服務(wù)器集中起來一起進行數(shù)據(jù)版本管理,所述服務(wù)器集群可以利用多個計算機進行并行計算,以提高運算速度。所述基于云計算架構(gòu)的服務(wù)器通過虛擬化技術(shù)將各服務(wù)器存儲池化,使得數(shù)據(jù)版本管理系統(tǒng)中各模塊所在服務(wù)器共享計算資源。所述分布式服務(wù)器是將所述數(shù)據(jù)版本管理系統(tǒng)中的數(shù)據(jù)和程序分散在多個服務(wù)器上進行協(xié)調(diào)運行。
[0079]所述數(shù)據(jù)版本管理系統(tǒng)中的各模塊可根據(jù)實際設(shè)計需要,配置在上述任一種服務(wù)器中。所述數(shù)據(jù)版本管理系統(tǒng)按照如下各步驟執(zhí)行所述方法。
[0080]在步驟Sll中,預存至少一個數(shù)據(jù)集以及用于對所述至少一個數(shù)據(jù)集進行操作的至少一個執(zhí)行代碼,并配置至少一種用于運行所述執(zhí)行代碼的執(zhí)行后端引擎。
[0081]在此,所述數(shù)據(jù)集為被版本管理的數(shù)據(jù)的集合。所述數(shù)據(jù)包括但不限于:文本數(shù)據(jù)、和/或多媒體數(shù)據(jù)等。在一具體的實施例中,所述文本數(shù)據(jù)舉例為代碼數(shù)據(jù)、系統(tǒng)日志等。所述多媒體數(shù)據(jù)舉例為圖片數(shù)據(jù)、視頻數(shù)據(jù)等。若所述數(shù)據(jù)管理模塊保存多個數(shù)據(jù)集,則各數(shù)據(jù)集之間可以是無關(guān)聯(lián)的、或者有關(guān)聯(lián)的。例如,數(shù)據(jù)集A1、A2、和A3中,數(shù)據(jù)集A3是由數(shù)據(jù)集Al和A2衍生出的。數(shù)據(jù)集A3通過索引、或關(guān)聯(lián)字段與數(shù)據(jù)集Al和A2進行關(guān)聯(lián)。
[0082]所述數(shù)據(jù)集中還可以包含用于索引、或描述數(shù)據(jù)的元數(shù)據(jù)。其中,所述數(shù)據(jù)集中的各數(shù)據(jù)及對應(yīng)的元數(shù)據(jù)可藉由一數(shù)據(jù)ID相關(guān)聯(lián)。具體地,所述元數(shù)據(jù)(Metadata)又稱中介數(shù)據(jù)、中繼數(shù)據(jù),為描述數(shù)據(jù)的數(shù)據(jù)(data about data),主要是描述數(shù)據(jù)屬性(property)的信息,用來支持如指示存儲位置、歷史數(shù)據(jù)、資源查找、文件記錄等功能。所述的元數(shù)據(jù)算是一種電子式目錄,為了達到編制目錄的目的,必須在描述并收藏數(shù)據(jù)的內(nèi)容或特色,進而達成協(xié)助數(shù)據(jù)檢索的目的。
[0083]一種可選方案是,所述數(shù)據(jù)集的數(shù)據(jù)存儲于一第一存儲單元,所述數(shù)據(jù)集的元數(shù)據(jù)存儲于一第二存儲單元,且所述數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù)藉由一數(shù)據(jù)ID相關(guān)聯(lián)。在此,所述第一存儲單元和第二存儲單元可配置在同一數(shù)據(jù)庫服務(wù)器內(nèi)。也可以根據(jù)實際需要配置在不同的服務(wù)器內(nèi)。例如在一可選的實施例中,所述第一存儲單元配置于Hadoop分布式文件系統(tǒng)(大數(shù)據(jù)分布式文件系統(tǒng))中;第二存儲單元配置于NoSQL數(shù)據(jù)庫(非關(guān)系型的數(shù)據(jù)庫)中。
[0084]其中,所述分布式文件系統(tǒng)(Distributed File System)設(shè)計基于客戶機/服務(wù)器模式,具體是指文件系統(tǒng)管理的物理存儲資源不一定直接連接在本地節(jié)點上,而是通過計算機網(wǎng)絡(luò)與節(jié)點相連。所述NoSQL數(shù)據(jù)庫例如為鍵值(Key-Value)存儲數(shù)據(jù)庫,列存儲數(shù)據(jù)庫,文檔型數(shù)據(jù)庫,圖形(Graph)數(shù)據(jù)庫或MongoDB數(shù)據(jù)庫等。
[0085]在本申請中,利用分布式文件系統(tǒng)可以高效的掃描數(shù)據(jù)集,但是隨機訪問則低效的。為了解決這個問題,本申請?zhí)峁┑姆桨甘?,存儲每張圖片的標識和注解,例如文件名、大小、內(nèi)容描述,這些內(nèi)容被存儲在NoSQL數(shù)據(jù)庫中以加快查詢速度,也就是根據(jù)數(shù)據(jù)ID來連接原始數(shù)據(jù)和元數(shù)據(jù)。
[0086]本申請的數(shù)據(jù)版本管理系統(tǒng)記錄了數(shù)據(jù)的每個域,比如,一個新數(shù)據(jù)為一個新名字和版本號的集合。在本申請具體采用的實施例中使用的是MongoDB數(shù)據(jù)庫來存儲元數(shù)據(jù),但并不局限與此,在其他的實施方式中,還可能將會迀移到列存儲數(shù)據(jù)庫,鍵值存儲數(shù)據(jù)庫,文檔型數(shù)據(jù)庫,或者圖形(Graph)數(shù)據(jù)庫中以提高效率。
[0087]在此,所述執(zhí)行代碼用于對所述至少一個數(shù)據(jù)集進行操作。其中,當所述執(zhí)行代碼被調(diào)用時,執(zhí)行對數(shù)據(jù)集、及數(shù)據(jù)集中的數(shù)據(jù)進行增刪改等操作。例如,所述執(zhí)行代碼包括但不限于:增加一新數(shù)據(jù)集的執(zhí)行代碼、刪除數(shù)據(jù)集的執(zhí)行代碼、在預設(shè)數(shù)據(jù)集中的數(shù)據(jù)中增加標簽/字符等的執(zhí)行代碼、在預設(shè)數(shù)據(jù)集中的數(shù)據(jù)中刪除標簽/字符等的執(zhí)行代碼、在預設(shè)數(shù)據(jù)集中的數(shù)據(jù)中替換標簽/字符等的執(zhí)行代碼。
[0088]在一個可選用是實施例中,所述的執(zhí)行代碼存儲在例如Gitlab中,并且使用GitLab的API與之交互。所述的Gitlab是利用Ruby on Rails一個開源的版本管理系統(tǒng),實現(xiàn)一個自托管的Git項目倉庫,可通過Web界面進行訪問公開的或者私人項目。所述的Gitlab擁有與Github類似的功能,能夠瀏覽源代碼,管理缺陷和注釋??梢怨芾韴F隊對倉庫的訪問,所述的Gitlab非常易于瀏覽提交過的版本并提供一個文件歷史庫。團隊成員可以利用內(nèi)置的簡單聊天程序(Wall)進行交流。所述的Gitlab還提供一個代碼片段收集功能可以輕松實現(xiàn)代碼復用,便于日后有需要的時候進行查找。在此,所述執(zhí)行后端引擎針對各執(zhí)行代碼的編程語言而設(shè)。所述執(zhí)行后端引擎包括單機引擎及分布式引擎。
[0089]所述單機引擎例如為單機上的Python,所述的Python是純粹的自由軟件,源代碼和解釋器CPython遵循GPL(GNU General Public License)協(xié)議,其在執(zhí)行時首先會將.py文件中的源代碼編譯成Python的byte code(字節(jié)碼),然后再由Python Virtual Machine(Python虛擬機)來執(zhí)行這些編譯好的byte code。
[0090]所述分布式引擎例如為集群上的Spark,所述Spark是一個快速且通用的計算集群框架,它的內(nèi)核使用Scala語言編寫,它提供了 Scala、Java和Python編程語言high-1 eve IAPI,使用這些API能夠非常容易地開發(fā)并行處理的應(yīng)用程序。
[0091]在具體的實施例中,配置所述的執(zhí)行后端引擎是必需,因為這樣不但方便為用戶搭建好分布式集群的環(huán)境;還可以能夠自動地將代碼和結(jié)果數(shù)據(jù)集連接起來。也就是說,在本申請的數(shù)據(jù)版本管理系統(tǒng)中執(zhí)行代碼可以得到任意的中間結(jié)果,只要用戶保留了原始數(shù)據(jù)和代碼。
[0092]在步驟S12中,接收到用戶提交的數(shù)據(jù)處理請求時,調(diào)用一執(zhí)行后端引擎運行所述至少一執(zhí)行代碼以對所述至少一數(shù)據(jù)集執(zhí)行處理,創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0093]具體地,所述數(shù)據(jù)版本管理系統(tǒng)接收到用戶提交的數(shù)據(jù)處理請求時,處理所述數(shù)據(jù)管理模塊中的數(shù)據(jù)集,創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0094]其中,所述數(shù)據(jù)工作流(DataWork Flow,DWF)用于標記在版本管理期間數(shù)據(jù)集和/或數(shù)據(jù)集中的數(shù)據(jù)的有向的無環(huán)的版本節(jié)點。對于新數(shù)據(jù)集來說,所述數(shù)據(jù)工作流對應(yīng)標記版本節(jié)點為根節(jié)點。對于包含版本更新的數(shù)據(jù)集/數(shù)據(jù)來說,所述數(shù)據(jù)工作流為表示數(shù)據(jù)集中的兩數(shù)據(jù)之間、和/或兩數(shù)據(jù)集之間的衍生關(guān)系。
[0095]所述衍生關(guān)系包括一數(shù)據(jù)集的執(zhí)行歷史記錄和版本。其中,所述執(zhí)行歷史記錄包括但不限于:變化前和變化后的數(shù)據(jù)集中數(shù)據(jù)的指向關(guān)系(即父子節(jié)點關(guān)系)、變化前后所調(diào)用的執(zhí)行代碼、執(zhí)行時間等。簡而言之,所述數(shù)據(jù)工作流的概念作為本申請的數(shù)據(jù)版本管理系統(tǒng)中的數(shù)據(jù)集邏輯關(guān)系。所述數(shù)據(jù)集依據(jù)此形成了依賴關(guān)系。所述數(shù)據(jù)工作流是本申請的數(shù)據(jù)版本管理系統(tǒng)中重現(xiàn)數(shù)據(jù)的核心功能。
[0096]在一個所述數(shù)據(jù)工作流中,一個節(jié)點表示表示了數(shù)據(jù)集的一個特定版本。一條連接兩個節(jié)點的有向邊表示一個數(shù)據(jù)集是有另一個數(shù)據(jù)集衍生而來。邊上的標記表示的則是一次實驗的代碼版本。請參閱圖5,圖5所示的一個數(shù)據(jù)工作流的示例,S卩,一個數(shù)據(jù)工作流是一個有向無環(huán)圖。圖片5表示了常見的一對一和多對一結(jié)構(gòu)兩種數(shù)據(jù)工作流結(jié)構(gòu)。
[0097]在上述的一對一結(jié)構(gòu)中,一個數(shù)據(jù)集由另一個數(shù)據(jù)集衍生而來。舉例來說,用戶可以基于一個已有的數(shù)據(jù)集創(chuàng)建一個新的數(shù)據(jù)集,并在新的數(shù)據(jù)集上打上一些新的標簽并將其共享給其他用戶。而上述的多對一結(jié)構(gòu)表示一個數(shù)據(jù)集可以由兩個或更多的數(shù)據(jù)集衍生而來。像一些合并兩個數(shù)據(jù)表之類的操作都是如此。
[0098]在本申請的數(shù)據(jù)版本管理系統(tǒng)中在實現(xiàn)上述數(shù)據(jù)工作流結(jié)構(gòu)的時候引入父子節(jié)點關(guān)系這一屬性用來記錄這個數(shù)據(jù)集是從哪個數(shù)據(jù)集衍生而來的。同時,本申請的數(shù)據(jù)版本管理系統(tǒng)還可以實現(xiàn)比較父子數(shù)據(jù)集之間的區(qū)別的功能。這些功能幫助用戶能更容易的發(fā)現(xiàn)自己代碼的修改導致了什么結(jié)果。因此,所述的數(shù)據(jù)工作流的結(jié)構(gòu)圖不但可以理順數(shù)據(jù)集之間的關(guān)系,還可以幫助管理用戶的執(zhí)行記錄,包括根據(jù)版本號來產(chǎn)生結(jié)果。
[0099]所述數(shù)據(jù)版本管理系統(tǒng)根據(jù)變化前的數(shù)據(jù)集及數(shù)據(jù)的標記信息(如ID值)和數(shù)據(jù)工作流,得到并記錄形成對應(yīng)變化后的數(shù)據(jù)版本信息。其中,所述數(shù)據(jù)版本信息包括但不限于數(shù)據(jù)集名稱、數(shù)據(jù)ID、代碼ID、形成時間、及運行日志中的至少一種。
[0100]在此,所述數(shù)據(jù)版本管理系統(tǒng)可以通過網(wǎng)絡(luò)/提交接口獲取用戶提交的數(shù)據(jù)處理請求,并根據(jù)所獲取的數(shù)據(jù)處理請求向所述執(zhí)行引擎模塊發(fā)送對應(yīng)的執(zhí)行命令和從代碼管理模塊中選定的執(zhí)行代碼,以供所述執(zhí)行引擎模塊調(diào)用對應(yīng)的執(zhí)行后端引擎來運行所選擇的執(zhí)行代碼,以便進行數(shù)據(jù)集的版本管理。
[0101]比如在一具體的實施過程中,每當用戶向Gitlab服務(wù)器提交執(zhí)行代碼(Push),Gitlab服務(wù)器就會通過一個Web hook通知所述系統(tǒng)核心模塊14。所述系統(tǒng)核心模塊14會將用戶請求推入自己的隊列,同時從隊首選取請求來進行處理。所述系統(tǒng)核心模塊14會將該請求的執(zhí)行代碼拷貝到所述執(zhí)行引擎模塊13,然后所述執(zhí)行引擎模塊13會使用用戶提供的參數(shù)和輸入來運行執(zhí)行代碼。該任務(wù)結(jié)束之后,所述系統(tǒng)核心模塊14會記錄下這次請求的信息,包括這次Push在Gitlab服務(wù)器上的commit ID,用戶指定的參數(shù)以及任何具體與實驗相關(guān)的信息。有些情況下,實驗會產(chǎn)生新的數(shù)據(jù)集。這樣所述系統(tǒng)核心模塊14也會記錄這些數(shù)據(jù)集之間的關(guān)系,即前述的數(shù)據(jù)工作流。
[0102]當用戶提交處理的數(shù)據(jù)請求為多種情況,以下將分別予以闡述:
[0103]在一種情況下,當所述數(shù)據(jù)處理請求為提交一個新數(shù)據(jù)集時,所數(shù)據(jù)版本管理系統(tǒng)可以直接將新數(shù)據(jù)集保存在第一存儲單元中,創(chuàng)建所述新數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息?;蛘?,所述數(shù)據(jù)版本管理系統(tǒng)按照該數(shù)據(jù)處理請求選取對應(yīng)的執(zhí)行代碼,以將所獲取的新數(shù)據(jù)集的數(shù)據(jù)存儲于第一存儲單元中。與此同時,所述數(shù)據(jù)版本管理系統(tǒng)還創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0104]在一種可選方案中,所述新數(shù)據(jù)集包括數(shù)據(jù)和元數(shù)據(jù)。所述數(shù)據(jù)版本管理系統(tǒng)在選取執(zhí)行代碼時,選取能夠?qū)?yīng)保存數(shù)據(jù)和元數(shù)據(jù)的執(zhí)行代碼,并執(zhí)行所選取的執(zhí)行代碼,從新數(shù)據(jù)集中分別提取數(shù)據(jù)和元數(shù)據(jù),再將所提取的數(shù)據(jù)存儲于第一存儲單元中,將所提取的元數(shù)據(jù)存儲于第二存儲單元,且形成一新數(shù)據(jù)ID關(guān)聯(lián)所述新數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù),創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。在此,所述數(shù)據(jù)工作流中包含作為根節(jié)點的數(shù)據(jù)和對應(yīng)的元數(shù)據(jù)。所記錄的數(shù)據(jù)版本信息包括:數(shù)據(jù)集名稱、數(shù)據(jù)ID、元數(shù)據(jù)ID、數(shù)據(jù)ID和元數(shù)據(jù)ID的對應(yīng)關(guān)系、執(zhí)行添加該數(shù)據(jù)集的代碼ID、形成時間、及運行日
V 1、1、O
[0105]在另一種情況下,當用戶提交的數(shù)據(jù)處理請求為修改已存儲的一個數(shù)據(jù)集時,所述數(shù)據(jù)版本管理系統(tǒng)依據(jù)所述數(shù)據(jù)處理請求將一執(zhí)行代碼復制至相應(yīng)的執(zhí)行后端引擎中,并發(fā)送一執(zhí)行命令給所述執(zhí)行后端引擎令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集。再將所形成的新數(shù)據(jù)集保存在第一存儲單元中,同時創(chuàng)建該新數(shù)據(jù)集相對修改前的數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0106]—種可選方式是,所述數(shù)據(jù)版本管理系統(tǒng)提取所述新數(shù)據(jù)集的數(shù)據(jù)并存儲于所述第一存儲單元,提取所述新數(shù)據(jù)集的元數(shù)據(jù)并存儲于所述第二存儲單元,且形成一新數(shù)據(jù)ID關(guān)聯(lián)所述新數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù),以及形成一代碼ID將所述執(zhí)行代碼與所述新數(shù)據(jù)集相關(guān)聯(lián),創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0107]更為優(yōu)選的方式是,所述數(shù)據(jù)版本管理系統(tǒng)依據(jù)所述數(shù)據(jù)處理請求復制至所述執(zhí)行后端引擎的執(zhí)行代碼為用戶提交的新執(zhí)行代碼或者調(diào)用的所述代碼管理模塊中存儲的執(zhí)行代碼。
[0108]具體地,用戶還可以預先根據(jù)自身需求提交新的執(zhí)行代碼,并通過所述數(shù)據(jù)版本管理系統(tǒng)調(diào)整新的執(zhí)行代碼與各執(zhí)行后端引擎之間的對應(yīng)關(guān)系。由此,當用戶提交的數(shù)據(jù)處理請求為修改已存儲的一個數(shù)據(jù)集時,所述數(shù)據(jù)版本管理系統(tǒng)依據(jù)所述數(shù)據(jù)處理請求,確定將該新的執(zhí)行代碼復制到對應(yīng)執(zhí)行后端引擎中,并由對應(yīng)的執(zhí)行后端引擎執(zhí)行相應(yīng)的執(zhí)行代碼,以保存新的數(shù)據(jù)集,并創(chuàng)建新的數(shù)據(jù)集相對于修改前的數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。
[0109]當用戶需要對不同版本之間的數(shù)據(jù)集進行分析和計算時,本實施例中一種優(yōu)選方式為,所述數(shù)據(jù)版本管理方法還包括配置有多種用戶UI的步驟,在該步驟中,配置有多種用戶UI,用以分別接收不同用戶提交的請求或向不同用戶反饋請求信息。
[0110]具體地,用戶經(jīng)常需要分析一些數(shù)據(jù)集并且計算一些參數(shù),比如自然語言處理中的準確率或者股票市場回測中的每日投資回報。在創(chuàng)建了數(shù)據(jù)集的數(shù)據(jù)工作流及數(shù)據(jù)版本信息之后,所述數(shù)據(jù)版本管理系統(tǒng)可為用戶提供基于數(shù)據(jù)工作流而關(guān)聯(lián)的各數(shù)據(jù)集中的數(shù)據(jù)。所顯示的數(shù)據(jù)可以幫助用戶對比一對歷史分析結(jié)果、展示代碼和/或參數(shù)上的不同。針對多種用戶的多種UI設(shè)計可以幫助每一個用戶得到最好的算法和參數(shù)。
[0111]綜上所述,本申請?zhí)峁┑臄?shù)據(jù)版本管理系統(tǒng)可以實現(xiàn)在一個整合的系統(tǒng)里管理數(shù)據(jù)的版本,并在系統(tǒng)中運行用戶代碼;同時可以保留用戶的代碼和數(shù)據(jù),并能對兩次版本進行比較,發(fā)現(xiàn)不同;另外,本發(fā)明的數(shù)據(jù)版本管理系統(tǒng)將數(shù)據(jù)和元數(shù)據(jù)分開存儲,使得可以更快捷的過濾數(shù)據(jù);再者,本發(fā)明通過為數(shù)據(jù)集和代碼提供各自的版本管理,并為各數(shù)據(jù)集和代碼提供有向無環(huán)的工作流及構(gòu)建二者的關(guān)聯(lián)關(guān)系,有效解決了數(shù)據(jù)和代碼的版本管理效率低或混亂等問題;另外,采用多種UI設(shè)計,能夠為用戶比對、分析各歷史數(shù)據(jù)集提供了便捷的途徑;另外,各單元分布在不同服務(wù)器上,能夠便于減輕各服務(wù)器上的運行壓力。
[0112]實施例三
[0113]請參閱圖3,顯示為本發(fā)明的代碼版本管理系統(tǒng)的結(jié)構(gòu)示意圖,如圖所示,本申請的第三方面在于提供一種代碼版本管理系統(tǒng),所述代碼版本管理系統(tǒng)可以配置在單臺服務(wù)器、服務(wù)器集群、基于云計算架構(gòu)的服務(wù)器、或分布式服務(wù)器中。其中,所述服務(wù)器集群指將很多服務(wù)器集中起來一起進行數(shù)據(jù)版本管理,所述服務(wù)器集群可以利用多個計算機進行并行計算,以提高運算速度。所述基于云計算架構(gòu)的服務(wù)器通過虛擬化技術(shù)將各服務(wù)器存儲池化,使得代碼版本管理系統(tǒng)中各模塊所在服務(wù)器共享計算資源。所述分布式服務(wù)器是將所述代碼版本管理系統(tǒng)中的數(shù)據(jù)和程序分散在多個服務(wù)器上進行協(xié)調(diào)運行。
[0114]所述代碼版本管理系統(tǒng)中的各模塊可根據(jù)實際設(shè)計需要,配置在上述任一種服務(wù)器中。具體地,所述代碼版本管理系統(tǒng)2包括:數(shù)據(jù)管理模塊21、代碼管理模塊22、執(zhí)行引擎模塊23和系統(tǒng)核心模塊24。
[0115]所述數(shù)據(jù)管理模塊21存儲有至少一個數(shù)據(jù)集。
[0116]其中,所述數(shù)據(jù)集為被版本管理的數(shù)據(jù)的集合。所述數(shù)據(jù)包括但不限于:文本數(shù)據(jù)、和/或多媒體數(shù)據(jù)等。在一具體的實施例中,所述文本數(shù)據(jù)舉例為代碼數(shù)據(jù)、系統(tǒng)日志等。所述多媒體數(shù)據(jù)舉例為圖片數(shù)據(jù)、視頻數(shù)據(jù)等。若所述數(shù)據(jù)管理模塊21保存多個數(shù)據(jù)集,則各數(shù)據(jù)集之間可以是無關(guān)聯(lián)的、或者有關(guān)聯(lián)的。例如,數(shù)據(jù)集A1、A2、和A3中,數(shù)據(jù)集A3是由數(shù)據(jù)集Al和A2衍生出的。數(shù)據(jù)集A3通過索引、或關(guān)聯(lián)字段與數(shù)據(jù)集Al和A2進行關(guān)聯(lián)。
[0117]所述數(shù)據(jù)集中還可以包含用于索引、或描述數(shù)據(jù)的元數(shù)據(jù)。其中,所述數(shù)據(jù)集中的各數(shù)據(jù)及對應(yīng)的元數(shù)據(jù)可藉由一數(shù)據(jù)ID相關(guān)聯(lián)。具體地,所述元數(shù)據(jù)(Metadata)又稱中介數(shù)據(jù)、中繼數(shù)據(jù),為描述數(shù)據(jù)的數(shù)據(jù)(data about data),主要是描述數(shù)據(jù)屬性(property)的信息,用來支持如指示存儲位置、歷史數(shù)據(jù)、資源查找、文件記錄等功能。所述的元數(shù)據(jù)算是一種電子式目錄,為了達到編制目錄的目的,必須在描述并收藏數(shù)據(jù)的內(nèi)容或特色,進而達成協(xié)助數(shù)據(jù)檢索的目的。
[0118]—種可選方案是,所述數(shù)據(jù)集的數(shù)據(jù)存儲于一第一存儲單元,所述數(shù)據(jù)集的元數(shù)據(jù)存儲于一第二存儲單元,且所述數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù)藉由一數(shù)據(jù)ID相關(guān)聯(lián)。在此,所述第一存儲單元和第二存儲單元可配置在同一數(shù)據(jù)庫服務(wù)器內(nèi)。也可以根據(jù)實際需要配置在不同的服務(wù)器內(nèi)。例如在一可選的實施例中,所述第一存儲單元配置于Hadoop分布式文件系統(tǒng)(大數(shù)據(jù)分布式文件系統(tǒng))中;第二存儲單元配置于NoSQL數(shù)據(jù)庫(非關(guān)系型的數(shù)據(jù)庫)中。
[ΟΙ19] 其中,所述分布式文件系統(tǒng)(Distributed File System)設(shè)計基于客戶機/服務(wù)器模式,具體是指文件系統(tǒng)管理的物理存儲資源不一定直接連接在本地節(jié)點上,而是通過計算機網(wǎng)絡(luò)與節(jié)點相連。所述NoSQL數(shù)據(jù)庫例如為鍵值(Key-Value)存儲數(shù)據(jù)庫,列存儲數(shù)據(jù)庫,文檔型數(shù)據(jù)庫,圖形(Graph)數(shù)據(jù)庫或MongoDB數(shù)據(jù)庫等。
[0120]在本申請中,利用分布式文件系統(tǒng)可以高效的掃描數(shù)據(jù)集,但是隨機訪問則低效的。為了解決這個問題,本申請?zhí)峁┑姆桨甘?,存儲每張圖片的標識和注解,例如文件名、大小、內(nèi)容描述,這些內(nèi)容被存儲在NoSQL數(shù)據(jù)庫中以加快查詢速度,也就是根據(jù)數(shù)據(jù)ID來連接原始數(shù)據(jù)和元數(shù)據(jù)。
[0121]本申請的代碼版本管理系統(tǒng)記錄了數(shù)據(jù)的每個域,比如,一個新數(shù)據(jù)為一個新名字和版本號的集合。在本申請具體采用的實施例中使用的是MongoDB數(shù)據(jù)庫來存儲元數(shù)據(jù),但并不局限與此,在其他的實施方式中,還可能將會迀移到列存儲數(shù)據(jù)庫,鍵值存儲數(shù)據(jù)庫,文檔型數(shù)據(jù)庫,或者圖形(Graph)數(shù)據(jù)庫中以提高效率。
[0122]所述代碼管理模塊22存儲有至少一個執(zhí)行代碼,所述執(zhí)行代碼用于對所述數(shù)據(jù)管理模塊21存儲的至少一個數(shù)據(jù)集進行操作。
[0123]其中,當所述執(zhí)行代碼被調(diào)用時,執(zhí)行對數(shù)據(jù)集、及數(shù)據(jù)集中的數(shù)據(jù)進行增刪改等操作。例如,所述執(zhí)行代碼包括但不限于:增加一新數(shù)據(jù)集的執(zhí)行代碼、刪除數(shù)據(jù)集的執(zhí)行代碼、在預設(shè)數(shù)據(jù)集中的數(shù)據(jù)中增加標簽/字符等的執(zhí)行代碼、在預設(shè)數(shù)據(jù)集中的數(shù)據(jù)中刪除標簽/字符等的執(zhí)行代碼、在預設(shè)數(shù)據(jù)集中的數(shù)據(jù)中替換標簽/字符等的執(zhí)行代碼。
[0124]在一個可選用是實施例中,所述的執(zhí)行代碼存儲在例如Gitlab中,并且使用GitLab的API與之交互。所述的Gitlab是利用Ruby on Rails一個開源的版本管理系統(tǒng),實現(xiàn)一個自托管的Git項目倉庫,可通過Web界面進行訪問公開的或者私人項目。所述的Gitlab擁有與Github類似的功能,能夠瀏覽源代碼,管理缺陷和注釋。可以管理團隊對倉庫的訪問,所述的Gitlab非常易于瀏覽提交過的版本并提供一個文件歷史庫。團隊成員可以利用內(nèi)置的簡單聊天程序(Wall)進行交流。所述的Gitlab還提供一個代碼片段收集功能可以輕松實現(xiàn)代碼復用,便于日后有需要的時候進行查找。
[0125]除此之外,所述代碼管理模塊22還用于接收用戶推送的代碼予以存儲或依據(jù)用戶推送的代碼發(fā)送一代碼處理請求。
[0126]在其中一種情形下,所述代碼管理模塊22用于接收用戶推送的代碼予以存儲。
[0127]具體地,用戶使用用戶終端向所述代碼管理模塊22上傳代碼,則所述代碼管理模塊22將所接收的代碼予以保存。其中,所述代碼是用戶根據(jù)所述代碼版本管理系統(tǒng)2所提供的API新建/改編的執(zhí)行代碼。例如,用戶改進了所述代碼管理模塊22中的一執(zhí)行代碼,并通過后續(xù)詳細描述的系統(tǒng)核心模塊24,將改進后的執(zhí)行代碼上傳至所述代碼管理模塊22,則所述代碼管理模塊22將所接收的代碼予以更新并保存。
[0128]在另一種情形下,所述代碼管理模塊22用于依據(jù)用戶推送的代碼發(fā)送一代碼處理請求。
[0129]在此,用戶推送的代碼無需預先在系統(tǒng)核心模塊24中進行與執(zhí)行引擎模塊23的配置,則當用戶選擇預先推送的執(zhí)行代碼來在管理數(shù)據(jù)集時,所述代碼管理模塊22向系統(tǒng)核心模塊24發(fā)送一代碼處理請求,以告知系統(tǒng)核心模塊24所對應(yīng)的執(zhí)行后端引擎。
[0130]所述執(zhí)行引擎模塊23,配置有至少一種執(zhí)行后端引擎,用于接收到執(zhí)行命令時,依據(jù)一執(zhí)行命令調(diào)用所述執(zhí)行后端引擎,運行一執(zhí)行代碼以對所述數(shù)據(jù)管理模塊21中的一數(shù)據(jù)集執(zhí)行操作。
[0131]在此,所述執(zhí)行后端引擎針對各執(zhí)行代碼的編程語言而設(shè)。所述執(zhí)行后端引擎包括單機引擎及分布式引擎。
[0132]所述單機引擎例如為單機上的Python,所述的Python是純粹的自由軟件,源代碼和解釋器CPython遵循GPL(GNU General Public License)協(xié)議,其在執(zhí)行時首先會將.py文件中的源代碼編譯成Python的byte code(字節(jié)碼),然后再由Python Virtual Machine(Python虛擬機)來執(zhí)行這些編譯好的byte code。
[0133]所述分布式引擎例如為集群上的Spark,所述Spark是一個快速且通用的計算集群框架,它的內(nèi)核使用Scala語言編寫,它提供了 Scala、Java和Python編程語言high-1 eve IAPI,使用這些API能夠非常容易地開發(fā)并行處理的應(yīng)用程序。
[0134]在具體的實施例中,配置所述的執(zhí)行后端引擎是必需,因為這樣不但方便為用戶搭建好分布式集群的環(huán)境;還可以能夠自動地將代碼和結(jié)果數(shù)據(jù)集連接起來。也就是說,在本申請的代碼版本管理系統(tǒng)中執(zhí)行代碼可以得到任意的中間結(jié)果,只要用戶保留了原始數(shù)據(jù)和代碼。
[0135]所述系統(tǒng)核心模塊24用于記錄用戶推送的代碼并形成代碼版本信息;以及接收到所述代碼管理模塊22的代碼處理請求時,發(fā)送一執(zhí)行命令給所述執(zhí)行引擎模塊23,令其運行所述代碼管理模塊22中的執(zhí)行代碼,并在所述執(zhí)行代碼以對所述數(shù)據(jù)管理模塊21中的一數(shù)據(jù)集執(zhí)行操作后記錄形成的代碼版本信息。
[0136]在此,對于所述系統(tǒng)核心模塊24的功能,予以分別描述。在其中一種方式中,當用戶推送代碼時,所述系統(tǒng)核心模塊24將所接收的代碼傳遞給代碼管理模塊22,以便保存,同時形成對應(yīng)所述代碼的代碼版本信息。其中,與上述各實施例中的數(shù)據(jù)版本信息類似,所述代碼版本信息包括但不限于以下至少一種:代碼名稱、代碼ID、形成時間、指定參數(shù)、及運行日志。所述系統(tǒng)核心模塊24可參考利用數(shù)據(jù)集工作流來管理數(shù)據(jù)集的方式,對所述代碼進行版本管理。例如,用戶改進了已存儲的一執(zhí)行代碼,則所述代碼版本管理系統(tǒng)2將所接收的代碼予以更新并保存。與此同時,所述代碼管理系統(tǒng)還記錄修改前后兩執(zhí)行代碼之間的對應(yīng)關(guān)系,以形成代碼工作流;并在修改前的執(zhí)行代碼版本信息的基礎(chǔ)上,確定并記錄修改后的代碼版本信息。在另一種方式中,當用戶選用推送的代碼來管理數(shù)據(jù)集時,所述系統(tǒng)核心模塊24基于所述代碼管理模塊22的代碼處理請求,發(fā)送一執(zhí)行命令給所述執(zhí)行引擎模塊23,令其運行所述代碼管理模塊22中的執(zhí)行代碼,并在所述執(zhí)行代碼以對所述數(shù)據(jù)管理模塊21中的一數(shù)據(jù)集執(zhí)行操作后記錄形成的代碼版本信息。例如,用戶通過輸入?yún)?shù)、代碼版本信息等來選擇預先推送的代碼管理數(shù)據(jù)集中的數(shù)據(jù)變更,則所述系統(tǒng)核心模塊24將所接收的參數(shù)、代碼版本信息等提供給代碼管理模塊22。所述代碼管理模塊22根據(jù)上述信息確定所要執(zhí)行的執(zhí)行代碼,并向所述系統(tǒng)核心模塊24發(fā)送相應(yīng)的代碼處理請求。所述系統(tǒng)核心模塊24根據(jù)所述代碼處理請求向執(zhí)行引擎模塊23發(fā)送執(zhí)行命令。則所述執(zhí)行引擎模塊23根據(jù)所述執(zhí)行命令選擇相應(yīng)的執(zhí)行后端引擎來執(zhí)行所指定的執(zhí)行代碼,并在所述執(zhí)行代碼以對所述數(shù)據(jù)管理模塊21中的一數(shù)據(jù)集執(zhí)行操作后,記錄形成的代碼版本信息。其中,所述代碼版本信息、數(shù)據(jù)工作流、和數(shù)據(jù)版本信息中的至少一種中還記錄所執(zhí)行的代碼與數(shù)據(jù)集之間的對應(yīng)關(guān)系。
[0137]在一具體的實施過程中,每當用戶向Gitlab服務(wù)器提交的執(zhí)行代碼,Gitlab服務(wù)器就會通過一個Web hook通知所述系統(tǒng)核心模塊24。所述系統(tǒng)核心模塊24會將用戶請求推入自己的隊列,同時從隊首選取請求來進行處理。所述系統(tǒng)核心模塊24會將該請求的執(zhí)行代碼拷貝到所述執(zhí)行引擎模塊23,并向所述執(zhí)行引擎模塊23發(fā)送代碼處理請求,以告知所選用的執(zhí)行后端引擎。然后所述執(zhí)行引擎模塊23會使用用戶提供的參數(shù)和輸入來運行執(zhí)行代碼。該任務(wù)結(jié)束之后,所述系統(tǒng)核心模塊24會記錄下這次請求的信息,包括這次Push在Gitlab服務(wù)器上的commit ID、執(zhí)行代碼版本信息、用戶指定的參數(shù)以及任何具體與實驗相關(guān)的信息。有些情況下,實驗會產(chǎn)生新的數(shù)據(jù)集。這樣所述系統(tǒng)核心模塊24也會記錄這些數(shù)據(jù)集之間的關(guān)系,即前述各實施例中所述的數(shù)據(jù)工作流。
[0138]需要說明的是,所述系統(tǒng)核心模塊24依據(jù)所述數(shù)據(jù)處理請求復制至所述執(zhí)行引擎模塊23的執(zhí)行代碼除了用戶提交的新執(zhí)行代碼之外,還可以是調(diào)用的所述代碼管理模塊22中存儲的執(zhí)行代碼。例如,用戶指定代碼管理模塊22中的執(zhí)行代碼來處理相應(yīng)的數(shù)據(jù)集,而非利用代碼管理模塊22中默認的執(zhí)行代碼。
[0139]在一種可選方案中,所述系統(tǒng)核心模塊24還用于依據(jù)用戶提交的數(shù)據(jù)處理請求將一執(zhí)行代碼復制至所述執(zhí)行引擎模塊23中,并發(fā)送一執(zhí)行命令給所述執(zhí)行引擎模塊23令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集,并形成一代碼ID將所述執(zhí)行代碼與所述新數(shù)據(jù)集相關(guān)聯(lián),并記錄形成的代碼版本信息。
[0140]其中,所述數(shù)據(jù)處理請求包括但不限于:提交一個新數(shù)據(jù)集、或修改所述數(shù)據(jù)管理模塊21中存儲的一個數(shù)據(jù)集。
[0141]具體地,在上述數(shù)據(jù)版本管理系統(tǒng)形成數(shù)據(jù)工作流和數(shù)據(jù)版本信息的基礎(chǔ)上,以及在本實施例中的系統(tǒng)核心模塊24在將一執(zhí)行代碼復制至所述執(zhí)行引擎模塊23中,并發(fā)送一執(zhí)行命令給所述執(zhí)行引擎模塊23令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集的基礎(chǔ)上,還對所執(zhí)行的執(zhí)行代碼ID與新數(shù)據(jù)集相關(guān)聯(lián),并記錄形成的代碼版本信息。如此,當用戶需要對多個關(guān)聯(lián)數(shù)據(jù)集的執(zhí)行歷史記錄進行分析時,可得到對應(yīng)各數(shù)據(jù)集的執(zhí)行代碼的相關(guān)信息。為用戶提供更多的用于數(shù)據(jù)集分析、統(tǒng)計的中間信息。
[0142]作為一種優(yōu)選方案,所述代碼版本管理系統(tǒng)2還包括用戶接口模塊,配置有多種用戶UI,用以分別接收不同用戶提交的請求或向不同用戶反饋請求信息。
[0143]具體地,用戶經(jīng)常需要分析一些數(shù)據(jù)集并且計算一些參數(shù),比如自然語言處理中的準確率或者股票市場回測中的每日投資回報。在創(chuàng)建了數(shù)據(jù)集的數(shù)據(jù)工作流及數(shù)據(jù)版本信息之后,所述用戶接口模塊可為用戶提供基于數(shù)據(jù)工作流而關(guān)聯(lián)的各數(shù)據(jù)集中的數(shù)據(jù)、執(zhí)行代碼等。所顯示的數(shù)據(jù)可以幫助用戶對比一對歷史分析結(jié)果、展示代碼和/或參數(shù)上的不同。針對多種用戶的多種UI設(shè)計可以幫助每一個用戶得到最好的算法和參數(shù)。
[0144]綜上所述,本申請?zhí)峁┑拇a版本管理系統(tǒng)可以實現(xiàn)在一個整合的系統(tǒng)里管理代碼的版本,并在系統(tǒng)中運行用戶代碼;同時可以保留用戶的代碼和數(shù)據(jù),并能對兩次版本進行比較,發(fā)現(xiàn)不同;另外,本發(fā)明的代碼版本管理系統(tǒng)將數(shù)據(jù)和元數(shù)據(jù)分開存儲,使得可以更快捷的過濾數(shù)據(jù);再者,本發(fā)明通過為數(shù)據(jù)集和代碼提供各自的版本管理,并為各數(shù)據(jù)集和代碼提供有向無環(huán)的工作流及構(gòu)建二者的關(guān)聯(lián)關(guān)系,有效解決了數(shù)據(jù)和代碼的版本管理效率低或混亂等問題;另外,采用多種UI設(shè)計,能夠為用戶比對、分析各歷史數(shù)據(jù)集提供了便捷的途徑;另外,各單元分布在不同服務(wù)器上,能夠便于減輕各服務(wù)器上的運行壓力。
[0145]實施例四
[0146]請參閱圖4,顯示為本發(fā)明的代碼版本管理方法的流程圖,如圖所示,本申請的第四方面在于提供一種代碼版本管理方法。所述代碼版本管理方法主要由代碼版本管理系統(tǒng)來執(zhí)行。其中,所述代碼版本管理系統(tǒng)可以配置在單臺服務(wù)器、服務(wù)器集群、基于云計算架構(gòu)的服務(wù)器、或分布式服務(wù)器中。其中,所述服務(wù)器集群指將很多服務(wù)器集中起來一起進行數(shù)據(jù)版本管理,所述服務(wù)器集群可以利用多個計算機進行并行計算,以提高運算速度。所述基于云計算架構(gòu)的服務(wù)器通過虛擬化技術(shù)將各服務(wù)器存儲池化,使得代碼版本管理系統(tǒng)中各模塊所在服務(wù)器共享計算資源。所述分布式服務(wù)器是將所述代碼版本管理系統(tǒng)中的數(shù)據(jù)和程序分散在多個服務(wù)器上進行協(xié)調(diào)運行。
[0147]所述代碼版本管理系統(tǒng)中的各模塊可根據(jù)實際設(shè)計需要,配置在上述任一種服務(wù)器中。具體地,所述代碼版本管理系統(tǒng)通過執(zhí)行如下步驟來執(zhí)行所述方法。
[0148]在步驟S21中,預存至少一個數(shù)據(jù)集以及用于對所述至少一個數(shù)據(jù)集進行操作的至少一個執(zhí)行代碼,并配置至少一種用于運行所述執(zhí)行代碼的執(zhí)行后端引擎。
[0149]其中,所述數(shù)據(jù)集為被版本管理的數(shù)據(jù)的集合。所述數(shù)據(jù)包括但不限于:文本數(shù)據(jù)、和/或多媒體數(shù)據(jù)等。在一具體的實施例中,所述文本數(shù)據(jù)舉例為代碼數(shù)據(jù)、系統(tǒng)日志等。所述多媒體數(shù)據(jù)舉例為圖片數(shù)據(jù)、視頻數(shù)據(jù)等。若所述數(shù)據(jù)管理模塊21保存多個數(shù)據(jù)集,則各數(shù)據(jù)集之間可以是無關(guān)聯(lián)的、或者有關(guān)聯(lián)的。例如,數(shù)據(jù)集A1、A2、和A3中,數(shù)據(jù)集A3是由數(shù)據(jù)集Al和A2衍生出的。數(shù)據(jù)集A3通過索引、或關(guān)聯(lián)字段與數(shù)據(jù)集Al和A2進行關(guān)聯(lián)。
[0150]所述數(shù)據(jù)集中還可以包含用于索引、或描述數(shù)據(jù)的元數(shù)據(jù)。其中,所述數(shù)據(jù)集中的各數(shù)據(jù)及對應(yīng)的元數(shù)據(jù)可藉由一數(shù)據(jù)ID相關(guān)聯(lián)。具體地,所述元數(shù)據(jù)(Metadata)又稱中介數(shù)據(jù)、中繼數(shù)據(jù),為描述數(shù)據(jù)的數(shù)據(jù)(data about data),主要是描述數(shù)據(jù)屬性(property)的信息,用來支持如指示存儲位置、歷史數(shù)據(jù)、資源查找、文件記錄等功能。所述的元數(shù)據(jù)算是一種電子式目錄,為了達到編制目錄的目的,必須在描述并收藏數(shù)據(jù)的內(nèi)容或特色,進而達成協(xié)助數(shù)據(jù)檢索的目的。
[0151]—種可選方案是,所述數(shù)據(jù)集的數(shù)據(jù)存儲于一第一存儲單元,所述數(shù)據(jù)集的元數(shù)據(jù)存儲于一第二存儲單元,且所述數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù)藉由一數(shù)據(jù)ID相關(guān)聯(lián)。在此,所述第一存儲單元和第二存儲單元可配置在同一數(shù)據(jù)庫服務(wù)器內(nèi)。也可以根據(jù)實際需要配置在不同的服務(wù)器內(nèi)。例如在一可選的實施例中,所述第一存儲單元配置于Hadoop分布式文件系統(tǒng)(大數(shù)據(jù)分布式文件系統(tǒng))中;第二存儲單元配置于NoSQL數(shù)據(jù)庫(非關(guān)系型的數(shù)據(jù)庫)中。
[Ο152] 其中,所述分布式文件系統(tǒng)(Distributed File System)設(shè)計基于客戶機/服務(wù)器模式,具體是指文件系統(tǒng)管理的物理存儲資源不一定直接連接在本地節(jié)點上,而是通過計算機網(wǎng)絡(luò)與節(jié)點相連。所述NoSQL數(shù)據(jù)庫例如為鍵值(Key-Value)存儲數(shù)據(jù)庫,列存儲數(shù)據(jù)庫,文檔型數(shù)據(jù)庫,圖形(Graph)數(shù)據(jù)庫或MongoDB數(shù)據(jù)庫等。
[0153]在本申請中,利用分布式文件系統(tǒng)可以高效的掃描數(shù)據(jù)集,但是隨機訪問則低效的。為了解決這個問題,本申請?zhí)峁┑姆桨甘?,存儲每張圖片的標識和注解,例如文件名、大小、內(nèi)容描述,這些內(nèi)容被存儲在NoSQL數(shù)據(jù)庫中以加快查詢速度,也就是根據(jù)數(shù)據(jù)ID來連接原始數(shù)據(jù)和元數(shù)據(jù)。
[0154]本申請的代碼版本管理系統(tǒng)記錄了數(shù)據(jù)的每個域,比如,一個新數(shù)據(jù)為一個新名字和版本號的集合。在本申請具體采用的實施例中使用的是MongoDB數(shù)據(jù)庫來存儲元數(shù)據(jù),但并不局限與此,在其他的實施方式中,還可能將會迀移到列存儲數(shù)據(jù)庫,鍵值存儲數(shù)據(jù)庫,文檔型數(shù)據(jù)庫,或者圖形(Graph)數(shù)據(jù)庫中以提高效率。
[0155]所述執(zhí)行代碼用于描述對數(shù)據(jù)集、及數(shù)據(jù)集中的數(shù)據(jù)進行增刪改等操作。例如,所述執(zhí)行代碼包括但不限于:增加一新數(shù)據(jù)集的執(zhí)行代碼、刪除數(shù)據(jù)集的執(zhí)行代碼、在預設(shè)數(shù)據(jù)集中的數(shù)據(jù)中增加標簽/字符等的執(zhí)行代碼、在預設(shè)數(shù)據(jù)集中的數(shù)據(jù)中刪除標簽/字符等的執(zhí)行代碼、在預設(shè)數(shù)據(jù)集中的數(shù)據(jù)中替換標簽/字符等的執(zhí)行代碼。
[0156]在一個可選用是實施例中,所述的執(zhí)行代碼存儲在例如Gitlab中,并且使用GitLab的API與之交互。所述的Gitlab是利用Ruby on Rails一個開源的版本管理系統(tǒng),實現(xiàn)一個自托管的Git項目倉庫,可通過Web界面進行訪問公開的或者私人項目。所述的Gitlab擁有與Github類似的功能,能夠瀏覽源代碼,管理缺陷和注釋??梢怨芾韴F隊對倉庫的訪問,所述的Gitlab非常易于瀏覽提交過的版本并提供一個文件歷史庫。團隊成員可以利用內(nèi)置的簡單聊天程序(Wall)進行交流。所述的Gitlab還提供一個代碼片段收集功能可以輕松實現(xiàn)代碼復用,便于日后有需要的時候進行查找。
[0157]在此,所述執(zhí)行后端引擎針對各執(zhí)行代碼的編程語言而設(shè)。所述執(zhí)行后端引擎包括單機引擎及分布式引擎。
[0158]所述單機引擎例如為單機上的Python,所述的Python是純粹的自由軟件,源代碼和解釋器CPython遵循GPL(GNU General Public License)協(xié)議,其在執(zhí)行時首先會將.py文件中的源代碼編譯成Python的byte code(字節(jié)碼),然后再由Python Virtual Machine(Python虛擬機)來執(zhí)行這些編譯好的byte code。
[0?59]所述分布式引擎例如為集群上的Spark,所述Spark是一個快速且通用的計算集群框架,它的內(nèi)核使用Scala語言編寫,它提供了 Scala、Java和Python編程語言high-1 eve IAPI,使用這些API能夠非常容易地開發(fā)并行處理的應(yīng)用程序。
[0160]在具體的實施例中,配置所述的執(zhí)行后端引擎是必需,因為這樣不但方便為用戶搭建好分布式集群的環(huán)境;還可以能夠自動地將代碼和結(jié)果數(shù)據(jù)集連接起來。也就是說,在本申請的代碼版本管理系統(tǒng)中執(zhí)行代碼可以得到任意的中間結(jié)果,只要用戶保留了原始數(shù)據(jù)和代碼。
[0161]在步驟S22中,接收用戶推送的代碼予以存儲,并記錄形成的代碼版本信息;或者依據(jù)用戶推送的代碼發(fā)送一代碼處理請求,發(fā)送一執(zhí)行命令給所述執(zhí)行后端引擎令其運行預存的執(zhí)行代碼,并在所述執(zhí)行代碼以對預存的所述一數(shù)據(jù)集執(zhí)行操作后記錄形成的代碼版本信息。
[0162]其中,所述代碼版本管理系統(tǒng)接收用戶推送的代碼予以存儲,并記錄形成的代碼版本信息的方式具體如下:
[0163]用戶使用用戶終端向所述代碼版本管理系統(tǒng)上傳代碼,則所述代碼管理模塊將所接收的代碼予以保存,同時形成對應(yīng)所述代碼的代碼版本信息。其中,所述代碼可以是用戶根據(jù)所述代碼版本管理系統(tǒng)所提供的API新建/改編的執(zhí)行代碼。另外,與前述各實施例中的數(shù)據(jù)版本信息類似,所述代碼版本信息包括但不限于以下至少一種:代碼名稱、代碼ID、形成時間、指定參數(shù)、及運行日志。所述代碼版本管理系統(tǒng)可參考利用數(shù)據(jù)集工作流來管理數(shù)據(jù)集的方式,對所述代碼進行版本管理。
[0164]例如,用戶改進了已存儲的一執(zhí)行代碼,則所述代碼版本管理系統(tǒng)將所接收的代碼予以更新并保存。與此同時,所述代碼管理系統(tǒng)還記錄修改前后兩執(zhí)行代碼之間的對應(yīng)關(guān)系,以形成代碼工作流;并在修改前的執(zhí)行代碼版本信息的基礎(chǔ)上,確定并記錄修改后的代碼版本信息。
[0165]或者,所述代碼版本管理系統(tǒng)依據(jù)用戶推送的代碼發(fā)送一代碼處理請求,發(fā)送一執(zhí)行命令給所述執(zhí)行后端引擎令其運行預存的執(zhí)行代碼,并在所述執(zhí)行代碼以對預存的所述一數(shù)據(jù)集執(zhí)行操作后記錄形成的代碼版本信息。
[0166]具體地,用戶推送的代碼無需預先與對應(yīng)的執(zhí)行后端引擎進行配置,而是當用戶選擇預先推送的執(zhí)行代碼來在管理數(shù)據(jù)集時,所述代碼版本管理系統(tǒng)生成一包含對應(yīng)執(zhí)行后端引擎的代碼處理請求,并啟動對應(yīng)的執(zhí)行后端引擎,令其運行所推送的執(zhí)行代碼,并在執(zhí)行所述執(zhí)行代碼以對一數(shù)據(jù)集執(zhí)行操作后,記錄形成的代碼版本信息。
[0167]例如,用戶通過輸入?yún)?shù)、代碼版本信息等來選擇預先推送的代碼,以管理數(shù)據(jù)集中的數(shù)據(jù)變更。所述代碼版本管理系統(tǒng)基于所接收的參數(shù)、代碼版本信息等確定所要執(zhí)行的執(zhí)行代碼,并生成對應(yīng)的代碼處理請求。所述系統(tǒng)核心模塊根據(jù)所述代碼處理請求向?qū)?yīng)的執(zhí)行后端引擎發(fā)送執(zhí)行命令。則所述執(zhí)行后端引擎根據(jù)所述執(zhí)行命令執(zhí)行所指定的執(zhí)行代碼,并在所述執(zhí)行代碼以對所述數(shù)據(jù)管理模塊中的一數(shù)據(jù)集執(zhí)行操作后,記錄形成的代碼版本信息。其中,所述代碼版本信息、數(shù)據(jù)工作流、和數(shù)據(jù)版本信息中的至少一種中還記錄所執(zhí)行的代碼與數(shù)據(jù)集之間的對應(yīng)關(guān)系。
[0168]在一具體的實施過程中,每當用戶向Gitlab服務(wù)器提交的執(zhí)行代碼,Gitlab服務(wù)器就會通過一個Web hook通知所述代碼版本管理系統(tǒng)。所述代碼版本管理系統(tǒng)會將用戶請求推入自己的隊列,同時從隊首選取請求來進行處理;并將該請求的執(zhí)行代碼拷貝到對應(yīng)的執(zhí)行后端引擎,以告知所選用的執(zhí)行后端引擎。然后所述執(zhí)行后端引擎會使用用戶提供的參數(shù)和輸入來運行執(zhí)行代碼。該任務(wù)結(jié)束之后,所述代碼版本管理系統(tǒng)會記錄下這次請求的信息,包括這次Push在GitIab服務(wù)器上的commit ID、執(zhí)行代碼版本信息、用戶指定的參數(shù)以及任何具體與實驗相關(guān)的信息。有些情況下,實驗會產(chǎn)生新的數(shù)據(jù)集。這樣所述代碼版本管理系統(tǒng)也會記錄這些數(shù)據(jù)集之間的關(guān)系,即前述各實施例中所述的數(shù)據(jù)工作流。
[0169]需要說明的是,所述代碼版本管理系統(tǒng)依據(jù)所述數(shù)據(jù)處理請求復制至相應(yīng)執(zhí)行后端引擎的執(zhí)行代碼除了用戶提交的新執(zhí)行代碼之外,還可以是調(diào)用的已存儲的執(zhí)行代碼。例如,用戶指定已存儲的執(zhí)行代碼來處理相應(yīng)的數(shù)據(jù)集,而非利用代碼管理模塊中默認的執(zhí)行代碼。
[0170]在一種可選方案中,所述代碼版本管理系統(tǒng)依據(jù)用戶提交的數(shù)據(jù)處理請求將一執(zhí)行代碼復制至所述執(zhí)行后端引擎中,并發(fā)送一執(zhí)行命令給所述執(zhí)行后端引擎令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集,并形成一代碼ID將所述執(zhí)行代碼與所述新數(shù)據(jù)集相關(guān)聯(lián),并記錄形成的代碼版本信息。
[0171]其中,所述數(shù)據(jù)處理請求包括但不限于:提交一個新數(shù)據(jù)集、或修改所述數(shù)據(jù)管理模塊中存儲的一個數(shù)據(jù)集。
[0172]具體地,在上述數(shù)據(jù)版本管理系統(tǒng)形成數(shù)據(jù)工作流和數(shù)據(jù)版本信息的基礎(chǔ)上,以及在所述代碼版本管理系統(tǒng)在將一執(zhí)行代碼復制至所述執(zhí)行后端引擎中,并發(fā)送一執(zhí)行命令給所述執(zhí)行后端引擎,令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集的基礎(chǔ)上,所述代碼版本管理系統(tǒng)還對所執(zhí)行的執(zhí)行代碼ID與新數(shù)據(jù)集相關(guān)聯(lián),并記錄形成的代碼版本信息。如此,當用戶需要對多個關(guān)聯(lián)數(shù)據(jù)集的執(zhí)行歷史記錄進行分析時,可得到對應(yīng)各數(shù)據(jù)集的執(zhí)行代碼的相關(guān)信息。為用戶提供更多的用于數(shù)據(jù)集分析、統(tǒng)計的中間信息。
[0173]作為一種優(yōu)選方案,所述代碼版本管理方法還包括:配置有多種用戶UI的步驟。在這一步驟中,配置有多種用戶UI,用以分別接收不同用戶提交的請求或向不同用戶反饋請求信息。
[0174]具體地,用戶經(jīng)常需要分析一些數(shù)據(jù)集并且計算一些參數(shù),比如自然語言處理中的準確率或者股票市場回測中的每日投資回報。在創(chuàng)建了數(shù)據(jù)集的數(shù)據(jù)工作流及數(shù)據(jù)版本信息之后,所述代碼版本管理系統(tǒng)可為用戶提供基于數(shù)據(jù)工作流而關(guān)聯(lián)的各數(shù)據(jù)集中的數(shù)據(jù)、執(zhí)行代碼等。所顯示的數(shù)據(jù)可以幫助用戶對比一對歷史分析結(jié)果、展示代碼和/或參數(shù)上的不同。針對多種用戶的多種UI設(shè)計可以幫助每一個用戶得到最好的算法和參數(shù)。
[0175]需要說明的是,本發(fā)明中各實施例所述的數(shù)據(jù)版本管理系統(tǒng)和代碼版本管理系統(tǒng)中的各模塊可根據(jù)命名協(xié)調(diào)共用,使得兩個版本管理系統(tǒng)能夠同時管理數(shù)據(jù)集和執(zhí)行代碼、各自的版本。
[0176]綜上所述,本申請?zhí)峁┑拇a版本管理系統(tǒng)可以實現(xiàn)在一個整合的系統(tǒng)里管理代碼的版本,并在系統(tǒng)中運行用戶代碼;同時可以保留用戶的代碼和數(shù)據(jù),并能對兩次版本進行比較,發(fā)現(xiàn)不同;另外,本發(fā)明通過為數(shù)據(jù)集和代碼提供各自的版本管理,并為各數(shù)據(jù)集和代碼提供有向無環(huán)的工作流及構(gòu)建二者的關(guān)聯(lián)關(guān)系,有效解決了數(shù)據(jù)和代碼的版本管理效率低或混亂等問題;另外,采用UI設(shè)計,能夠為用戶比對、分析各歷史數(shù)據(jù)集提供了便捷的途徑;另外,各單元分布在不同服務(wù)器上,能夠便于減輕各服務(wù)器上的運行壓力。所以,本發(fā)明有效克服了現(xiàn)有技術(shù)中的種種缺點而具高度產(chǎn)業(yè)利用價值。
[0177]上述實施例僅例示性說明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何熟悉此技術(shù)的人士皆可在不違背本發(fā)明的精神及范疇下,對上述實施例進行修飾或改變。因此,舉凡所屬技術(shù)領(lǐng)域中具有通常知識者在未脫離本發(fā)明所揭示的精神與技術(shù)思想下所完成的一切等效修飾或改變,仍應(yīng)由本發(fā)明的權(quán)利要求所涵蓋。
【主權(quán)項】
1.一種數(shù)據(jù)版本管理系統(tǒng),其特征在于,包括: 數(shù)據(jù)管理模塊,存儲有至少一個數(shù)據(jù)集; 代碼管理模塊,存儲有至少一個執(zhí)行代碼,所述執(zhí)行代碼用于對所述至少一個數(shù)據(jù)集進行操作; 執(zhí)行引擎模塊,配置有至少一種執(zhí)行后端引擎,依據(jù)接收的執(zhí)行命令調(diào)用一執(zhí)行后端引擎,運行一執(zhí)行代碼以對所述數(shù)據(jù)管理模塊中的至少一數(shù)據(jù)集執(zhí)行操作; 系統(tǒng)核心模塊,接收到用戶提交的數(shù)據(jù)處理請求時,處理所述數(shù)據(jù)管理模塊中的數(shù)據(jù)集,創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)版本管理系統(tǒng),其特征在于:所述數(shù)據(jù)集的數(shù)據(jù)存儲于一第一存儲單元,所述數(shù)據(jù)集的元數(shù)據(jù)存儲于一第二存儲單元,且所述數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù)藉由一數(shù)據(jù)ID相關(guān)聯(lián)。3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)版本管理系統(tǒng),其特征在于:所述系統(tǒng)核心模塊接收到用戶提交的數(shù)據(jù)處理請求為提交一個新數(shù)據(jù)集時,所述系統(tǒng)核心模塊提取所述新數(shù)據(jù)集的數(shù)據(jù)并存儲于所述第一存儲單元,提取所述新數(shù)據(jù)集的元數(shù)據(jù)并存儲于所述第二存儲單元,且形成一新數(shù)據(jù)ID關(guān)聯(lián)所述新數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù),創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。4.根據(jù)權(quán)利要求2所述的數(shù)據(jù)版本管理系統(tǒng),其特征在于:所述系統(tǒng)核心模塊接收到用戶提交的數(shù)據(jù)處理請求為修改所述數(shù)據(jù)管理模塊中存儲的一個數(shù)據(jù)集時,所述系統(tǒng)核心模塊依據(jù)所述數(shù)據(jù)處理請求將一執(zhí)行代碼復制至所述執(zhí)行引擎模塊中,并發(fā)送一執(zhí)行命令給所述執(zhí)行引擎模塊令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集,所述系統(tǒng)核心模塊提取所述新數(shù)據(jù)集的數(shù)據(jù)并存儲于所述第一存儲單元,提取所述新數(shù)據(jù)集的元數(shù)據(jù)并存儲于所述第二存儲單元,且形成一新數(shù)據(jù)ID關(guān)聯(lián)所述新數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù),以及形成一代碼ID將所述執(zhí)行代碼與所述新數(shù)據(jù)集相關(guān)聯(lián),創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。5.根據(jù)權(quán)利要求4所述的數(shù)據(jù)版本管理系統(tǒng),其特征在于:所述系統(tǒng)核心模塊依據(jù)所述數(shù)據(jù)處理請求復制至所述執(zhí)行引擎模塊的執(zhí)行代碼為用戶提交的新執(zhí)行代碼或者調(diào)用的所述代碼管理模塊中存儲的執(zhí)行代碼。6.根據(jù)權(quán)利要求2、3或4所述的數(shù)據(jù)版本管理系統(tǒng),其特征在于:所述第一存儲單元配置于Hadoop分布式文件系統(tǒng)中;第二存儲單元配置于NoSQL數(shù)據(jù)庫中。7.根據(jù)權(quán)利要求1、2、3或4所述的數(shù)據(jù)版本管理系統(tǒng),其特征在于:所述數(shù)據(jù)工作流為表示至少兩個數(shù)據(jù)集之間的衍生關(guān)系,所述衍生關(guān)系包括一數(shù)據(jù)集的執(zhí)行歷史記錄和版本。8.根據(jù)權(quán)利要求1、2、3或4所述的數(shù)據(jù)版本管理系統(tǒng),其特征在于:還包括用戶接口模塊,配置有多種用戶UI,用以分別接收不同用戶提交的請求或向不同用戶反饋請求信息。9.根據(jù)權(quán)利要求1、2、3或4所述的數(shù)據(jù)版本管理系統(tǒng),其特征在于:所述數(shù)據(jù)版本信息包括數(shù)據(jù)集名稱、數(shù)據(jù)ID、代碼ID、形成時間、及運行日志中的至少一種。10.根據(jù)權(quán)利要求1、2、3或4所述的數(shù)據(jù)版本管理系統(tǒng),其特征在于:所述執(zhí)行后端引擎包括單機引擎及分布式引擎。11.一種數(shù)據(jù)版本管理方法,其特征在于,所述方法包括以下步驟: 預存至少一個數(shù)據(jù)集以及用于對所述至少一個數(shù)據(jù)集進行操作的至少一個執(zhí)行代碼,并配置至少一種用于運行所述執(zhí)行代碼的執(zhí)行后端引擎;以及; 接收到用戶提交的數(shù)據(jù)處理請求時,調(diào)用一執(zhí)行后端引擎運行所述至少一執(zhí)行代碼以對所述至少一數(shù)據(jù)集執(zhí)行處理,創(chuàng)建所述數(shù)據(jù)集的數(shù)據(jù)工作流,并記錄形成的數(shù)據(jù)版本信息。12.根據(jù)權(quán)利要求11所述的數(shù)據(jù)版本管理方法,其特征在于:所述數(shù)據(jù)集的數(shù)據(jù)存儲于一第一存儲單元,所述數(shù)據(jù)集的元數(shù)據(jù)存儲于一第二存儲單元,且所述數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù)藉由一數(shù)據(jù)ID相關(guān)聯(lián)。13.根據(jù)權(quán)利要求12所述的數(shù)據(jù)版本管理方法,其特征在于:所述的接收到用戶提交的數(shù)據(jù)處理請求為提交一個新數(shù)據(jù)集時,提取所述新數(shù)據(jù)集的數(shù)據(jù)并存儲于所述第一存儲單元,提取所述新數(shù)據(jù)集的元數(shù)據(jù)并存儲于所述第二存儲單元,且形成一新數(shù)據(jù)ID關(guān)聯(lián)所述新數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù),并記錄形成的數(shù)據(jù)版本信息。14.根據(jù)權(quán)利要求12所述的數(shù)據(jù)版本管理方法,其特征在于:所述的接收到用戶提交的數(shù)據(jù)處理請求為修改已存儲的一個數(shù)據(jù)集時,依據(jù)所述數(shù)據(jù)處理請求將一執(zhí)行代碼復制至相應(yīng)的執(zhí)行后端引擎中,并發(fā)送一執(zhí)行命令給所述執(zhí)行后端引擎令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集,提取所述新數(shù)據(jù)集的數(shù)據(jù)并存儲于所述第一存儲單元,提取所述新數(shù)據(jù)集的元數(shù)據(jù)并存儲于所述第二存儲單元,且形成一新數(shù)據(jù)ID關(guān)聯(lián)所述新數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù),以及形成一代碼ID將所述執(zhí)行代碼與所述新數(shù)據(jù)集相關(guān)聯(lián),并記錄形成的數(shù)據(jù)版本?目息O15.根據(jù)權(quán)利要求14所述的數(shù)據(jù)版本管理方法,其特征在于:所述的依據(jù)所述數(shù)據(jù)處理請求復制至所述執(zhí)行后端引擎中的執(zhí)行代碼為用戶提交的新執(zhí)行代碼或者調(diào)用的預存的執(zhí)行代碼。16.根據(jù)權(quán)利要求12、13或14所述的數(shù)據(jù)版本管理方法,其特征在于:所述第一存儲單元配置于Hadoop分布式文件系統(tǒng)中;第二存儲單元配置于NoSQL數(shù)據(jù)庫中。17.根據(jù)權(quán)利要求10、11、12或13所述的數(shù)據(jù)版本管理方法,其特征在于:所述數(shù)據(jù)工作流為表示至少兩個數(shù)據(jù)集之間的衍生關(guān)系,所述衍生關(guān)系包括一數(shù)據(jù)集的執(zhí)行歷史記錄和版本。18.根據(jù)權(quán)利要求11、12、13或14所述的數(shù)據(jù)版本管理方法,其特征在于:還包括配置有多種用戶UI的步驟,用以分別接收不同用戶提交的請求或向不同用戶反饋請求信息。19.根據(jù)權(quán)利要求11、12、13或14所述的數(shù)據(jù)版本管理系統(tǒng),其特征在于:所述數(shù)據(jù)版本信息包括數(shù)據(jù)集名稱、數(shù)據(jù)ID、代碼ID、形成時間、及運行日志中的至少一種。20.根據(jù)權(quán)利要求11、12、13或14所述的數(shù)據(jù)版本管理系統(tǒng),其特征在于:所述執(zhí)行后端引擎包括單機引擎及分布式引擎。21.一種代碼版本管理系統(tǒng),其特征在于,包括: 數(shù)據(jù)管理模塊,存儲有至少一個數(shù)據(jù)集; 代碼管理模塊,存儲有至少一個執(zhí)行代碼,所述執(zhí)行代碼用于對所述數(shù)據(jù)管理模塊存儲的至少一個數(shù)據(jù)集進行操作;所述代碼管理模塊還用于接收用戶推送的代碼予以存儲或依據(jù)用戶推送的代碼發(fā)送一代碼處理請求; 執(zhí)行引擎模塊,配置有至少一種執(zhí)行后端引擎,用于接收到執(zhí)行命令時,依據(jù)一執(zhí)行命令調(diào)用所述執(zhí)行后端引擎,運行一執(zhí)行代碼以對所述數(shù)據(jù)管理模塊中的一數(shù)據(jù)集執(zhí)行操作; 系統(tǒng)核心模塊,用于記錄用戶推送的代碼并形成代碼版本信息,以及接收到所述代碼管理模塊的代碼處理請求時,發(fā)送一執(zhí)行命令給所述執(zhí)行引擎模塊,令其運行所述代碼管理模塊中的執(zhí)行代碼,并在所述執(zhí)行代碼以對所述數(shù)據(jù)管理模塊中的一數(shù)據(jù)集執(zhí)行操作后記錄形成的代碼版本信息。22.根據(jù)權(quán)利要求21所述的代碼版本管理系統(tǒng),其特征在于:所述數(shù)據(jù)集的數(shù)據(jù)存儲于一第一存儲單元,所述數(shù)據(jù)集的元數(shù)據(jù)存儲于一第二存儲單元,且所述數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù)藉由一數(shù)據(jù)ID相關(guān)聯(lián)。23.根據(jù)權(quán)利要求21所述的代碼版本管理系統(tǒng),其特征在于:所述系統(tǒng)核心模塊還用于依據(jù)用戶提交的數(shù)據(jù)處理請求將一執(zhí)行代碼復制至所述執(zhí)行引擎模塊中,并發(fā)送一執(zhí)行命令給所述執(zhí)行引擎模塊令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集,并形成一代碼ID將所述執(zhí)行代碼與所述新數(shù)據(jù)集相關(guān)聯(lián),并記錄形成的代碼版本信息。24.根據(jù)權(quán)利要求21所述的代碼版本管理系統(tǒng),其特征在于:所述系統(tǒng)核心模塊依據(jù)所述數(shù)據(jù)處理請求復制至所述執(zhí)行引擎模塊的執(zhí)行代碼為用戶提交的新執(zhí)行代碼或者調(diào)用的所述代碼管理模塊中存儲的執(zhí)行代碼。25.根據(jù)權(quán)利要求21、22、23、或24所述的代碼版本管理系統(tǒng),其特征在于:還包括用戶接口模塊,配置有多種用戶UI,用以分別接收不同用戶提交的請求或向不同用戶反饋請求?目息O26.根據(jù)權(quán)利要求21、22、23、或24所述的代碼版本管理系統(tǒng),其特征在于:所述代碼版本信息包括代碼名稱、代碼ID、形成時間、指定參數(shù)、及運行日志中的至少一種。27.根據(jù)權(quán)利要求21、22、23、或24所述的代碼版本管理系統(tǒng),其特征在于:所述執(zhí)行后端引擎包括單機引擎及分布式引擎。28.一種代碼版本管理方法,其特征在于,包括以下步驟: 預存至少一個數(shù)據(jù)集以及用于對所述至少一個數(shù)據(jù)集進行操作的至少一個執(zhí)行代碼,并配置至少一種用于運行所述執(zhí)行代碼的執(zhí)行后端引擎;以及; 接收用戶推送的代碼予以存儲,并記錄形成的代碼版本信息;或者依據(jù)用戶推送的代碼發(fā)送一代碼處理請求,發(fā)送一執(zhí)行命令給所述執(zhí)行后端引擎令其運行預存的執(zhí)行代碼,并在所述執(zhí)行代碼以對預存的所述一數(shù)據(jù)集執(zhí)行操作后記錄形成的代碼版本信息。29.根據(jù)權(quán)利要求28所述的代碼版本管理方法,其特征在于:所述數(shù)據(jù)集的數(shù)據(jù)存儲于一第一存儲單元,所述數(shù)據(jù)集的元數(shù)據(jù)存儲于一第二存儲單元,且所述數(shù)據(jù)集的數(shù)據(jù)及元數(shù)據(jù)藉由一數(shù)據(jù)ID相關(guān)聯(lián)。30.根據(jù)權(quán)利要求28所述的代碼版本管理方法,其特征在于:還包括步驟,依據(jù)用戶提交的數(shù)據(jù)處理請求將一執(zhí)行代碼復制至所述執(zhí)行后端引擎中,并發(fā)送一執(zhí)行命令令其運行所述執(zhí)行代碼以形成一新數(shù)據(jù)集,并形成一代碼ID將所述執(zhí)行代碼與所述新數(shù)據(jù)集相關(guān)聯(lián),并記錄形成的代碼版本信息。31.根據(jù)權(quán)利要求28所述的代碼版本管理方法,其特征在于:所述的依據(jù)所述數(shù)據(jù)處理請求復制至所述執(zhí)行后端引擎中的執(zhí)行代碼為用戶提交的新執(zhí)行代碼或者調(diào)用的所述代碼管理模塊中存儲的執(zhí)行代碼。32.根據(jù)權(quán)利要求28、29、30、或31所述的代碼版本管理方法,其特征在于:還包括配置有多種用戶UI的步驟,用以分別接收不同用戶提交的請求或向不同用戶反饋請求信息。33.根據(jù)權(quán)利要求28、29、30、或31所述的代碼版本管理方法,其特征在于:所述代碼版本信息包括代碼名稱、代碼ID、形成時間、指定參數(shù)、及運行日志中的至少一種。34.根據(jù)權(quán)利要求28、29、30、或31所述的代碼版本管理方法,其特征在于:所述執(zhí)行后端引擎包括單機引擎及分布式引擎。
【文檔編號】G06F17/30GK105956087SQ201610282533
【公開日】2016年9月21日
【申請日】2016年4月29日
【發(fā)明人】徐葳, 徐方舟, 張煬
【申請人】清華大學