一種基于管道的多組進程間數(shù)據(jù)傳遞方法
【專利摘要】本發(fā)明涉及一種基于管道的多組進程間數(shù)據(jù)傳遞方法,包括:1)控制臺發(fā)起任務,客戶端進程調用調度管理模塊,對初始化連接記錄文件中與該客戶端進程相應的初始三元組進行更新;2)客戶端進程根據(jù)控制臺的任務調用相應的第三方應用進程發(fā)起連接;3)第三方應用進程調用調度管理模塊,獲取發(fā)起連接的客戶端進程設置的管道,實現(xiàn)連接,并將此次連接記錄保存至已配對連接記錄文件中;4)第三方應用進程通過管道與客戶端進程進行數(shù)據(jù)傳輸;5)數(shù)據(jù)傳輸完畢后,釋放相應的管道資源,客戶端進程調用調度管理模塊,清除已配對連接記錄文件中相應的連接記錄。與現(xiàn)有技術相比,本發(fā)明具有實現(xiàn)了數(shù)據(jù)發(fā)送的高效性和占用資源的低消耗性等優(yōu)點。
【專利說明】
一種基于管道的多組進程間數(shù)據(jù)傳遞方法
【技術領域】
[0001]本發(fā)明涉及計算機數(shù)據(jù)傳輸【技術領域】,尤其是涉及一種基于管道的多組進程間數(shù)據(jù)傳遞方法。
【背景技術】
[0002]根據(jù)進程通信時信息量大小的不同,可以將進程通信劃分為兩大類型:控制信息的通信和大批數(shù)據(jù)信息的通信.前者稱為低級通信,后者稱為高級通信。
[0003]低級通信主要用于進程之間的同步、互斥、終止、掛起等等控制信息的傳遞。
[0004]高級通信主要用于進程間數(shù)據(jù)塊的交換和共享,常見的高級通信有管道(PIPE)、消息隊列(MESSAGE)、共享內存(SHARED MEMORY)等。
[0005]隨著信息時代數(shù)據(jù)容量和速度的指數(shù)式增長,災備系統(tǒng)中所存儲的數(shù)據(jù)規(guī)模越來越大。那么大量的數(shù)據(jù)傳遞不可避免,并且災備系統(tǒng)中傳輸?shù)臄?shù)據(jù)來源一般都是第三方的應用。那么必然存在以下的問題:
[0006]1、采用何種數(shù)據(jù)傳輸方式,才能最大限度的提高數(shù)據(jù)的傳輸效率,并且最大限度的減少對原有環(huán)境的影響(減少資源的占用)。
[0007]2、如何有效地開啟多個傳輸通道,協(xié)調好多個第三方進程同時進行數(shù)據(jù)的傳遞。
[0008]3、如何有效地預防數(shù)據(jù)傳遞過程中有可能產(chǎn)生的數(shù)據(jù)壞塊問題。
【發(fā)明內容】
[0009]本發(fā)明的目的就是為了克服上述現(xiàn)有技術存在的缺陷而提供一種基于管道的多組進程間數(shù)據(jù)傳遞方法,實現(xiàn)數(shù)據(jù)發(fā)送的高效性和占用資源的低消耗性,適用于各種應用之間的高效安全的大數(shù)據(jù)傳遞。
[0010]本發(fā)明的目的可以通過以下技術方案來實現(xiàn):
[0011]一種基于管道的多組進程間數(shù)據(jù)傳遞方法,通過調度管理模塊實現(xiàn)多組進程間的數(shù)據(jù)傳遞,所述調度管理模塊內設有用于保存初始三元組的初始化連接記錄文件和用于保存連接三元組的已配對連接記錄文件,所述數(shù)據(jù)傳遞方法包括:
[0012]I)控制臺發(fā)起任務,客戶端進程調用調度管理模塊,對初始化連接記錄文件中與該客戶端進程相應的初始三元組進行更新;
[0013]2)客戶端進程根據(jù)控制臺的任務調用相應的第三方應用進程發(fā)起連接;
[0014]3)第三方應用進程調用調度管理模塊,獲取發(fā)起連接的客戶端進程設置的管道,實現(xiàn)連接,并將此次連接記錄保存至已配對連接記錄文件中;
[0015]4)第三方應用進程通過管道與客戶端進程進行數(shù)據(jù)傳輸;
[0016]5)數(shù)據(jù)傳輸完畢后,釋放相應的管道資源,客戶端進程調用調度管理模塊,清除已配對連接記錄文件中相應的連接記錄。
[0017]所述步驟I)中,對初始化連接記錄文件中的初始三元組進行更新具體為:
[0018]101)判斷初始化連接記錄文件中是否存在與客戶端進程的PID相應的初始三元組,若是,則該取該初始三元組,執(zhí)行步驟103),若否,則執(zhí)行步驟102);
[0019]102)創(chuàng)建與客戶端進程相應的管道,將客戶端進程的PID、管道名稱和創(chuàng)建時間作為一個初始三元組保存到初始化連接記錄文件中,更新完畢,根據(jù)設定的等待時間進入等待狀態(tài);
[0020]103)讀取初始三元組中的創(chuàng)建時間,根據(jù)設定的超時時間判斷該三元組是否超時,若是,則清除該初始三元組,執(zhí)行步驟102),若否,則更新完畢,進入等待狀態(tài)。
[0021]所述等待時間大于或等于超時時間。
[0022]所述步驟3)中,獲取發(fā)起連接的客戶端進程設置的管道具體為:
[0023]301)第三方應用讀取調度管理模塊的已配對連接記錄文件,查找是否存在與自己的PID相應的連接三元組,若是,則獲取該連接三元組中的管道名稱,若否,則執(zhí)行步驟302);
[0024]302)讀取初始化連接記錄文件,提取與發(fā)起連接的進程相對應的初始三元組的創(chuàng)建時間,判斷是否超時,若是,則連接失敗,若否,則獲取該初始三元組中的管道名稱,并執(zhí)行步驟303);
[0025]303)將第三方應用的PID替換創(chuàng)建時間,形成連接三元組,并保存至已配對連接記錄文件,同時清除初始化連接記錄文件的初始三元組。
[0026]所述步驟4)中,第三方應用進程通過管道與客戶端進程進行數(shù)據(jù)傳輸時,管道至少設有一個,各管道并行傳輸數(shù)據(jù),通過不同的消息ID,完成不同數(shù)據(jù)的傳輸。
[0027]所述數(shù)據(jù)傳輸?shù)倪^程中,第三方應用進程實時檢測連接是否斷開,若是,則進行重新連接,所述重新連接具體為:
[0028]第三方應用進程調用調度管理模塊,讀取已配對連接記錄文件,查找到與自己的PID相應的連接三元組,獲取該連接三元組的管道名稱,重新進行連接。
[0029]與現(xiàn)有技術相比,本發(fā)明可以適用于不同數(shù)據(jù)對象的并行發(fā)送,或者數(shù)據(jù)分段并行發(fā)送,具有以下有益效果:
[0030]1、本發(fā)明采用命名管道技術,實現(xiàn)了數(shù)據(jù)發(fā)送的高效性、數(shù)據(jù)發(fā)送和消息發(fā)送的準確性、占用資源的低消耗性和異常處理恢復的容錯性等特點;
[0031]2、本發(fā)明通過管道可實現(xiàn)多任務并發(fā)備份恢復,在數(shù)據(jù)膨脹的今天,簡單高效的解決了數(shù)據(jù)傳遞的問題。
【專利附圖】
【附圖說明】
[0032]圖1為本發(fā)明的原理示意圖;
[0033]圖2為本發(fā)明的流程示意圖。
【具體實施方式】
[0034]下面結合附圖和具體實施例對本發(fā)明進行詳細說明。本實施例以本發(fā)明技術方案為前提進行實施,給出了詳細的實施方式和具體的操作過程,但本發(fā)明的保護范圍不限于下述的實施例。
[0035]如圖1所示,本發(fā)明實施例提供一種基于管道的多組進程間數(shù)據(jù)傳遞方法,通過調度管理模塊實現(xiàn)多組進程間的數(shù)據(jù)傳遞,所述調度管理模塊內設有用于保存初始三元組的初始化連接記錄文件(等待連接記錄)和用于保存連接三元組的已配對連接記錄文件(已連接記錄),所述初始三元組由發(fā)起連接的進程的PID、管道名稱和創(chuàng)建時間組成,所述連接三元組由發(fā)起連接的進程的PID、管道名稱和完成連接的第三方應用的PID組成。客戶端和第三方應用均包括連接管理模塊和數(shù)據(jù)處理模塊。
[0036]本實施例將上述方法用于解決同一客戶端下多個oracle實例同時發(fā)起備份(存在先后順序,相差在秒級別上),以節(jié)約備份時間的問題。如圖2所示,該方法具體步驟如下:
[0037]在步驟S1中,控制臺發(fā)起任務,客戶端進程通過調用管理API調用調度管理模塊,對初始化連接記錄文件中與該客戶端進程相應的初始三元組進行更新,具體為:
[0038]101)判斷初始化連接記錄文件中是否存在與客戶端進程的PID相應的初始三元組,若是,則讀取該初始三元組,執(zhí)行步驟103),若否,則執(zhí)行步驟102);
[0039]102)創(chuàng)建與客戶端進程相應的管道,將客戶端進程的PID、管道名稱和創(chuàng)建時間作為一個初始三元組保存到初始化連接記錄文件中,更新完畢,根據(jù)設定的等待時間進入等待狀態(tài);
[0040]103)讀取初始三元組中的創(chuàng)建時間,根據(jù)設定的超時時間判斷該三元組是否超時,若是,則清除該初始三元組,執(zhí)行步驟102),若否,則更新完畢,進入等待狀態(tài)。
[0041]優(yōu)選地,所述等待時間大于或等于超時時間,
[0042]在步驟S2中,客戶端進程根據(jù)控制臺的任務調用相應的第三方應用進程發(fā)起連接。本實施例中,客戶端使用腳本調用oracle的rman發(fā)送對應的實例的數(shù)據(jù)。
[0043]在步驟S3中,第三方應用進程通過調用管理API調用調度管理模塊,獲取發(fā)起連接的客戶端進程設置的管道,實現(xiàn)連接,并將此次連接記錄保存至已配對連接記錄文件中。
[0044]獲取發(fā)起連接的客戶端進程設置的管道具體為:
[0045]301)第三方應用讀取調度管理模塊的已配對連接記錄文件,查找是否存在與自己的PID相應的連接三元組,若是,則獲取該連接三元組中的管道名稱,若否,則執(zhí)行步驟302):
[0046]302)讀取初始化連接記錄文件,提取與發(fā)起連接的進程相對應的初始三元組的創(chuàng)建時間,判斷是否超時,若是,則連接失敗,若否,則獲取該初始三元組中的管道名稱,并執(zhí)行步驟303);
[0047]303)將第三方應用的PID替換創(chuàng)建時間,形成連接三元組,并保存至已配對連接記錄文件,同時清除初始化連接記錄文件的初始三元組,等待下一個連接的發(fā)起。
[0048]在步驟S4中,第三方應用進程通過管道與客戶端進程進行數(shù)據(jù)傳輸,管道至少設有一個,采用多通道傳輸?shù)暮锰幘褪强梢圆⑿械膫鬏敂?shù)據(jù),那么不同的連接有可能傳輸?shù)臄?shù)據(jù)對象不同。Oracle發(fā)送數(shù)據(jù)到客戶端時,通過不同的消息ID,完成不同數(shù)據(jù)的發(fā)送,不同的消息ID標明不同的狀態(tài),用于協(xié)調數(shù)據(jù)的傳遞。
[0049]例如首先發(fā)送數(shù)據(jù)文件,將數(shù)據(jù)文件記錄到對應的備份片中,數(shù)據(jù)文件單獨形成一個備份集。然后消息通知數(shù)據(jù)文件發(fā)送完成,將開始下一個數(shù)據(jù)源的發(fā)送,如此循環(huán)。下面是一個例子:
[0050]首先,(1)發(fā)送數(shù)據(jù)對象的類型,(2)發(fā)送每個數(shù)據(jù)對象的大小,(3)發(fā)送數(shù)據(jù)塊,
(4)發(fā)送完畢后,發(fā)送一個新的消息ID,用于通知數(shù)據(jù)的接收端是否還有數(shù)據(jù)需要接收,如果還有那么重復(2)、(3)兩個步驟,如果沒有那么發(fā)送一個數(shù)據(jù)傳送結束的消息,如果后續(xù)還需要傳遞數(shù)據(jù),那么只是斷開連接,否則再發(fā)送一個釋放管道的消息通知接收端數(shù)據(jù)發(fā)送完畢,請求釋放管道資源。
[0051]數(shù)據(jù)傳輸?shù)倪^程中,第三方應用進程實時檢測連接是否斷開,包括異常斷開連接或者正常的暫時斷開連接,若是,則進行重新連接,所述重新連接具體為:
[0052]第三方應用進程調用調度管理模塊,讀取已配對連接記錄文件,查找到與自己的PID相應的連接三元組,獲取該連接三元組的管道名稱,重新進行連接。
[0053]在步驟S5中,數(shù)據(jù)傳輸完畢后,發(fā)送消息通知客戶端數(shù)據(jù)發(fā)送結束,釋放相應的管道資源,客戶端進程調用調度管理模塊,清除已配對連接記錄文件中相應的連接記錄。
[0054]控制臺同時發(fā)起其他oracle實例的備份,執(zhí)行如流程如SI?S3,連接記錄到已配對連接記錄文件后就與新發(fā)起的連接脫離聯(lián)系,簡化了連接流程。所有的實例的數(shù)據(jù)都發(fā)送完畢,任務結束。
[0055]圖2所述流程圖只描述了一個連接的具體實現(xiàn)過程和其中的規(guī)則,對應多個連接過程,那么可以考慮為多次重復此過程,只是其中彼此會有一些影響。
[0056]對上述方法進行性能測試如下。
[0057]測試環(huán)境:
[0058]控制臺(存儲):1nforworks虛擬機,4G內存,2核CPU,千兆網(wǎng)卡。
[0059]客戶端:windows 764位,4G內存,2核CPU,百兆網(wǎng)卡。
[0060]客戶端上部署了兩個實例,分別為orcl,test。
[0061]單獨備份orcl時,22.36M/S,備份5G,用時3分49秒。
[0062]單獨備份test時,24.73M/s,備份3.24G,用時2分14秒。
[0063]同時備份時:
[0064]orcl 19.06M/s,備份 5G,用時 4 分 28 秒。
[0065]Test 15.5M/s,備份 3.24G,用時 3 分 34 秒。
[0066]單從速度上說:orcl速度同比下降14.6% ;test同比下降38.5%。
[0067]但是從總的時間上說:總時間減少I分13秒,同比減少26.2%。
[0068]這個還只是虛擬機的測試結果,如果是實體機,那么并發(fā)的任務之間的影響由于硬件的原因會大大降低,那么速度會逐步回升,最終備份的時間將大大的縮短。
【權利要求】
1.一種基于管道的多組進程間數(shù)據(jù)傳遞方法,其特征在于,通過調度管理模塊實現(xiàn)多組進程間的數(shù)據(jù)傳遞,所述調度管理模塊內設有用于保存初始三元組的初始化連接記錄文件和用于保存連接三元組的已配對連接記錄文件,所述數(shù)據(jù)傳遞方法包括: 1)控制臺發(fā)起任務,客戶端進程調用調度管理模塊,對初始化連接記錄文件中與該客戶端進程相應的初始三元組進行更新; 2)客戶端進程根據(jù)控制臺的任務調用相應的第三方應用進程發(fā)起連接; 3)第三方應用進程調用調度管理模塊,獲取發(fā)起連接的客戶端進程設置的管道,實現(xiàn)連接,并將此次連接記錄保存至已配對連接記錄文件中; 4)第三方應用進程通過管道與客戶端進程進行數(shù)據(jù)傳輸; 5)數(shù)據(jù)傳輸完畢后,釋放相應的管道資源,客戶端進程調用調度管理模塊,清除已配對連接記錄文件中相應的連接記錄。
2.根據(jù)權利要求1所述的基于管道的多組進程間數(shù)據(jù)傳遞方法,其特征在于,所述步驟I)中,對初始化連接記錄文件中的初始三元組進行更新具體為: 101)判斷初始化連接記錄文件中是否存在與客戶端進程的PID相應的初始三元組,若是,則讀取該初始三元組,執(zhí)行步驟103),若否,則執(zhí)行步驟102); 102)創(chuàng)建與客戶端進程相應的管道,將客戶端進程的PID、管道名稱和創(chuàng)建時間作為一個初始三元組保存到初始化連接記錄文件中,更新完畢,根據(jù)設定的等待時間進入等待狀態(tài); 103)讀取初始三元組中的創(chuàng)建時間,根據(jù)設定的超時時間判斷該三元組是否超時,若是,則清除該初始三元組,執(zhí)行步驟102),若否,則更新完畢,進入等待狀態(tài)。
3.根據(jù)權利要求2所述的基于管道的多組進程間數(shù)據(jù)傳遞方法,其特征在于,所述等待時間大于或等于超時時間。
4.根據(jù)權利要求2所述的基于管道的多組進程間數(shù)據(jù)傳遞方法,其特征在于,所述步驟3)中,獲取發(fā)起連接的客戶端進程設置的管道具體為: 301)第三方應用讀取調度管理模塊的已配對連接記錄文件,查找是否存在與自己的PID相應的連接三元組,若是,則獲取該連接三元組中的管道名稱,若否,則執(zhí)行步驟302); 302)讀取初始化連接記錄文件,提取與發(fā)起連接的進程相對應的初始三元組的創(chuàng)建時間,判斷是否超時,若是,則連接失敗,若否,則獲取該初始三元組中的管道名稱,并執(zhí)行步驟 303); 303)將第三方應用的PID替換創(chuàng)建時間,形成連接三元組,并保存至已配對連接記錄文件,同時清除初始化連接記錄文件的初始三元組。
5.根據(jù)權利要求1所述的基于管道的多組進程間數(shù)據(jù)傳遞方法,其特征在于,所述步驟4)中,第三方應用進程通過管道與客戶端進程進行數(shù)據(jù)傳輸時,管道至少設有一個,各管道并行傳輸數(shù)據(jù),通過不同的消息ID,完成不同數(shù)據(jù)的傳輸。
6.根據(jù)權利要求1或5所述的基于管道的多組進程間數(shù)據(jù)傳遞方法,其特征在于,所述數(shù)據(jù)傳輸?shù)倪^程中,第三方應用進程實時檢測連接是否斷開,若是,則進行重新連接,所述重新連接具體為: 第三方應用進程調用調度管理模塊,讀取已配對連接記錄文件,查找到與自己的PID相應的連接三元組,獲取該連接三元組的管道名稱,重新進行連接。
【文檔編號】H04L29/08GK104410687SQ201410693465
【公開日】2015年3月11日 申請日期:2014年11月26日 優(yōu)先權日:2014年11月26日
【發(fā)明者】黃開德 申請人:上海愛數(shù)軟件有限公司