據備份性能。而且,采用多線程池進行數據備份,加大了并發備份數據分布的范圍,降低了同時備份小文件集的可能性,有效減少數據文件分布不均導致備份性能的不穩定性,從而增強了數據備份的穩定性。
[0075]可選的,線程池具體可以用于,將所接收到的待備份數據按數據文件分配給不同的線程進行數據備份。
[0076]也就是說,在線程池中,一個線程對一個數據文件中的數據進行備份,即一個線程池負責一個數據文件,不同的線程池負責不同的數據文件。
[0077]由于待備份的數據結構是按照一定的規則來存儲的,邏輯結構上為一個數據存儲目錄代表著一類數據,將一個目錄分配給一個線程池,每個線程池負責一個目錄,每個線程池中的線程來負責目錄中每個數據文件的備份,這樣可以防止目錄中數據文件分布不均造成備份速度的不穩定。
[0078]另外,這樣做可以保證在按照邏輯存儲數據備份的基礎上,實現更高層次的并發,既能滿足順序備份的要求,也可以在數據備份過程遭受意外中斷(如宕機或程序崩潰退出)后進行續傳。具體的,本發明實施例提供的數據備份方法還可以包括,若出現宕機或程序崩潰退出等異常情況使得備份過程中斷,只需重啟備份程序即可,備份程序對需要備份的數據文件是否已經進行備份進行逐個判斷,若數據文件已經備份在目的地址,且數據大小與源地址的該數據文件的數據大小相同,則不再對該數據文件進行備份,否則,對該數據文件進行備份。保證程序意外中斷后,從中斷處進行續傳。
[0079]可選的,線程池在對數據文件進行備份的過程中,還可以對數據文件進行監控,若該數據文件傳輸失敗,則自動對該數據文件重傳,若執行成功,則將傳輸該數據文件的線程釋放回線程池,等待傳輸新的數據文件。
[0080]可選的,本發明實施例提供的數據備份系統還可以包括:
[0081]隊列管理模塊,用于當第一線程池中的所有線程都處于繁忙狀態時,若還有未備份的待備份數據,則將待備份數據加入到與第一線程池對應的隊列中;
[0082]線程處于繁忙狀態即線程正在進行數據傳輸。對于每個線程池而言,若該線程池中的所有線程均處于繁忙狀態,但是還有待備份數據需要啟用該線程池中的線程進行備份,則將該待備份數據加入到與該線程池對應的隊列中。
[0083]讀取模塊,用于當第一線程池中有空閑線程時,從與第一線程池對應的隊列中讀取一數據文件并分配給該空閑線程進行數據備份。
[0084]當有線程備份完成后釋放回線程池(即由繁忙狀態轉為空閑狀態)時,再從該線程池對應的隊列中讀取屬于同一數據文件的數據,由線程池中的空閑線程對讀取的數據進行備份。
[0085]可選的,獲取模塊32基于腳本語言實現;備份模塊34基于java語言實現。
[0086]本發明實施例中,通過腳本語言實現線程池的分配和管理,通過java語言實現線程池中線程分配和管理。用腳本語言來實現控制數據目錄的分配和過濾條件的設置,而不需要關注線程池中數據文件的細節。用java語言實現線程池中數據文件的傳輸,傳輸的單位是文件,一個文件分配一個線程,一個文件傳輸完畢后就將該線程釋放回線程池,下一個文件等到空閑的線程在進行數據備份,而不必關心數據的邏輯存儲結構,只需要逐個備份分配下來的數據文件即可。
[0087]可見,本發明實施例提供的數據備份方法,有效的劃分了數據備份的層次,從而降低了程序的耦合度,簡化了程序的管理,可以使程序具有更高的可擴展性和可維護性。
[0088]可選的,上述腳本語言可以為shell腳本語言,或者,Python腳本語言,或者,ruby腳本語言。
[0089]對所公開的實施例的上述說明,使本領域專業技術人員能夠實現或使用本發明。對這些實施例的多種修改對本領域的專業技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發明的精神或范圍的情況下,在其它實施例中實現。因此,本發明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。
【主權項】
1.一種數據備份方法,其特征在于,包括: 建立若干個線程池; 按數據存儲目錄獲取待備份數據; 將從同一數據存儲目錄獲取的待備份數據傳輸給所述若干個線程池中的同一個線程池; 線程池中的若干個線程用于對接收到數據進行備份。2.根據權利要求1所述的方法,其特征在于,線程池對所接收到的數據進行數據備份的過程包括: 將所接收到的待備份數據按數據文件分配給不同的線程進行數據備份。3.根據權利要求2所述的方法,其特征在于,還包括: 當第一線程池中的所有線程都處于繁忙狀態時,若還有未備份的待備份數據,則將所述待備份數據加入到與所述第一線程池對應的隊列中;所述第一線程池為所述若干個線程池中的任意一個線程池; 當所述第一線程池中有空閑線程時,從與所述第一線程池對應的隊列中讀取一數據文件并分配給該空閑線程進行數據備份。4.根據權利要求1所述的方法,其特征在于,所述按數據存儲目錄獲取待備份數據基于腳本語言實現;線程池進行數據備份的過程基于java語言實現。5.根據權利要求4所述的方法,其特征在于,所述腳本語言為:shell腳本語言,或者,Python腳本語言,或者,ruby腳本語言。6.一種數據備份系統,其特征在于,包括: 建立模塊,用于建立若干個線程池; 獲取模塊,用于按數據存儲目錄獲取待備份數據; 傳輸模塊,用于將從同一數據存儲目錄獲取的待備份數據傳輸給所述若干個線程池中的同一個線程池; 備份模塊,用于維護所述若干個線程池,線程池中的若干個線程用于對接收到數據進行備份。7.根據權利要求6所述的系統,其特征在于,所述線程池具體用于,將所接收到的待備份數據按數據文件分配給不同的線程進行數據備份。8.根據權利要求7所述的系統,其特征在于,還包括: 隊列管理模塊,用于當第一線程池中的所有線程都處于繁忙狀態時,若還有未備份的待備份數據,則將所述待備份數據加入到與所述第一線程池對應的隊列中;所述第一線程池為所述若干個線程池中的任意一個線程池; 讀取模塊,用于當所述第一線程池中有空閑線程時,從與所述第一線程池對應的隊列中讀取一數據文件并分配給該空閑線程進行數據備份。9.根據權利要求6所述的系統,其特征在于,所述獲取模塊基于腳本語言實現;所述備份模塊基于java語言實現。10.根據權利要求9所述的系統,其特征在于,所述腳本語言為:shell腳本語言,或者,Python腳本語言,或者,ruby腳本語言。
【專利摘要】本發明實施例公開了一種數據備份方法及系統,建立若干個線程池,將屬于同一個數據存儲目錄的數據分配給同一個線程池,即每個線程池負責一個目錄的數據的備份,每個線程池中的線程負責目錄中不同數據的備份,從而不需要頻繁創建和回收線程,降低CPU資源的消耗,提高了數據備份性能。而且,采用多線程池進行數據備份,加大了并發備份數據分布的范圍,降低了同時備份小文件集的可能性,從而增強了數據備份的穩定性。
【IPC分類】G06F11/14
【公開號】CN105373453
【申請號】CN201510938469
【發明人】劉志丹, 杜瑞嶺, 劉龍, 曹震, 于雪龍
【申請人】中國農業銀行股份有限公司
【公開日】2016年3月2日
【申請日】2015年12月15日