本發(fā)明涉及數(shù)據(jù)處理領域,特別是涉及一種數(shù)據(jù)處理方法和裝置。
背景技術:
::傳統(tǒng)的關系型數(shù)據(jù)庫例如甲骨文(oracle)的使用廣泛,功能強大,可以存儲大量的數(shù)據(jù),不過關系型數(shù)據(jù)庫的運營成本高。為了提高存儲效率,在關系型數(shù)據(jù)庫中一般至存儲重要的或核心的數(shù)據(jù)。將關系型數(shù)據(jù)庫中的存儲的全部或部分數(shù)據(jù)轉移到其他非關系型數(shù)據(jù)庫中的情況經(jīng)常發(fā)生。數(shù)據(jù)庫中一般以表(table)的形式存儲數(shù)據(jù),關系型數(shù)據(jù)庫向其他非關系型數(shù)據(jù)庫轉移數(shù)據(jù)可以理解為對表進行轉移。在轉移的過程中,可能會導致轉移到其他非關系型數(shù)據(jù)庫后其中一些表在轉移的過程中出現(xiàn)數(shù)據(jù)錯誤而不可用。例如從關系型數(shù)據(jù)庫中將多張表導入到非關系型數(shù)據(jù)庫如Hadoop數(shù)據(jù)庫(Hadoopdatabase,HBase)中一張表的情況下,很容易在轉移過程中出現(xiàn)數(shù)據(jù)錯誤,導致轉移到HBase中的那一張表不可用,甚至還會影響到其他表的可用性??梢娺@種出錯的情況為數(shù)據(jù)轉移的穩(wěn)定性帶來很大影響。目前只能在數(shù)據(jù)轉移完成后發(fā)現(xiàn)轉移后的表不可用,無法有效解決轉移過程中出錯為數(shù)據(jù)轉移帶來的影響。技術實現(xiàn)要素:為了解決上述技術問題,本發(fā)明提供了一種數(shù)據(jù)處理方法和裝置,根據(jù)所述待轉移任務生成HDFS臨時文件用于校驗所述待轉移任務中數(shù)據(jù)的正確性,在校驗成功后導入所述非關系型數(shù)據(jù)庫,使得在數(shù)據(jù)轉移過程可以有效避免轉移出現(xiàn)錯誤的待轉移任務,提高了數(shù)據(jù)轉移的穩(wěn)定性。本發(fā)明實施例公開了如下技術方案:一種數(shù)據(jù)處理方法,應用于從關系型數(shù)據(jù)庫向非關系型數(shù)據(jù)庫進行數(shù)據(jù)轉移的過程中,所述方法包括:從所述關系型數(shù)據(jù)庫獲取待轉移任務,所述待轉移任務包括所述關系型 數(shù)據(jù)庫中待轉移表的數(shù)據(jù)或待轉移表被切分后的子表的數(shù)據(jù);將所述待轉移任務保存在元數(shù)據(jù)庫中;在將所述待轉移任務導入到所述非關系型數(shù)據(jù)庫之前,從所述元數(shù)據(jù)庫中獲取所述待轉移任務,并根據(jù)所述待轉移任務生成HDFS臨時文件;校驗所述HDFS臨時文件,以判斷所述HDFS臨時文件對應的所述待轉移任務中數(shù)據(jù)的正確性,若校驗成功,將所述HDFS臨時文件對應的所述待轉移任務導入到所述非關系型數(shù)據(jù)庫;若校驗失敗,重新從所述關系型數(shù)據(jù)庫生成所述HDFS臨時文件對應的所述待轉移任務??蛇x的,在所述從所述關系型數(shù)據(jù)庫獲取待轉移任務之前,還包括:判斷所述關系型數(shù)據(jù)庫中所述待轉移表是否具有主鍵,若所述待轉移表不具有主鍵,獲取所述待轉移表的邏輯地址;若獲取用于切分的預設份數(shù),以所述最大邏輯地址和最小邏輯地址作為切分邊界值,將所述待轉移表切分為預設份數(shù)個子表,并針對子表生成所述待轉移任務;若未獲取用于切分的所述預設份數(shù),生成針對所述待轉移表的所述待轉移任務??蛇x的,所述獲取所述待轉移表的邏輯地址具體包括:獲取所述待轉移表的邏輯的地址中除最大邏輯地址外的其余邏輯地址;獲取所述最大邏輯地址所在數(shù)據(jù)塊;從所述文件塊中獲取所述最大邏輯地址??蛇x的,所述校驗包括數(shù)量校驗、全量校驗或抽樣校驗。可選的,所述關系型數(shù)據(jù)庫具體為甲骨文數(shù)據(jù)庫;所述非關系型數(shù)據(jù)庫具體為HBase。一種數(shù)據(jù)處理裝置,應用于從關系型數(shù)據(jù)庫向非關系型數(shù)據(jù)庫進行數(shù)據(jù)轉移的過程中,包括:第一獲取單元,用于從所述關系型數(shù)據(jù)庫獲取待轉移任務,所述待轉移任務包括所述關系型數(shù)據(jù)庫中待轉移表的數(shù)據(jù)或待轉移表被切分后的子表的數(shù)據(jù);保存單元,用于將所述待轉移任務保存在元數(shù)據(jù)庫中;第一生成單元,用于在將所述待轉移任務導入到所述非關系型數(shù)據(jù)庫之前,從所述元數(shù)據(jù)庫中獲取所述待轉移任務,并根據(jù)所述待轉移任務生成HDFS臨時文件;校驗單元,用于校驗所述HDFS臨時文件,以判斷所述HDFS臨時文件對應的所述待轉移任務中數(shù)據(jù)的正確性,若校驗成功,觸發(fā)導入單元,若校驗失敗,觸發(fā)第二生成單元,所述導入單元,用于將所述HDFS臨時文件對應的所述待轉移任務導入到所述非關系型數(shù)據(jù)庫;所述第二生成單元,用于重新從所述關系型數(shù)據(jù)庫生成所述HDFS臨時文件對應的所述待轉移任務??蛇x的,還包括:判斷單元,用于在觸發(fā)所述第一獲取單元之前,判斷所述關系型數(shù)據(jù)庫中所述待轉移表是否具有主鍵,第二獲取單元,用于若所述判斷單元的判斷結果為所述待轉移表不具有主鍵,獲取所述待轉移表的邏輯地址;切分單元,用于若所述第二獲取單元還獲取用于切分的預設份數(shù),以所述最大邏輯地址和最小邏輯地址作為切分邊界值,將所述待轉移表切分為預設份數(shù)個子表,并針對子表生成所述待轉移任務;所述第二生成單元還用于若所述第二獲取單元未獲取用于切分的所述預設份數(shù),生成針對所述待轉移表的所述待轉移任務??蛇x的,所述第二獲取單元具體包括:第一獲取子單元,用于獲取所述待轉移表的邏輯的地址中除最大邏輯地址外的其余邏輯地址;第二獲取子單元,用于獲取所述最大邏輯地址所在數(shù)據(jù)塊;第三獲取子單元,用于從所述文件塊中獲取所述最大邏輯地址??蛇x的,所述校驗包括數(shù)量校驗、全量校驗或抽樣校驗??蛇x的,所述關系型數(shù)據(jù)庫具體為甲骨文數(shù)據(jù)庫;所述非關系型數(shù)據(jù)庫具體為HBase。由上述技術方案可以看出,在將待轉移任務從關系型數(shù)據(jù)庫導入非關系型數(shù)據(jù)庫前,先保存在元數(shù)據(jù)庫中,并在需要向所述非關系型數(shù)據(jù)庫導入所述待轉移任務前,根據(jù)所述待轉移任務生成HDFS臨時文件,通過校驗所述HDFS臨時文件來判斷所述待轉移任務中數(shù)據(jù)的正確性,且在校驗成功時向所述非關系型數(shù)據(jù)庫導入,在校驗不成功時不向所述非關系型數(shù)據(jù)庫導入,并從所述關系型數(shù)據(jù)庫重新獲取所述待轉移任務,使得在數(shù)據(jù)轉移過程可以有效避免向被轉移的所述非關系型數(shù)據(jù)庫導入出現(xiàn)錯誤的待轉移任務,提高了數(shù)據(jù)轉移的穩(wěn)定性,有效解決轉移過程中數(shù)據(jù)出錯為數(shù)據(jù)轉移帶來的影響。附圖說明為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實施例提供的一種數(shù)據(jù)處理方法的方法流程圖;圖2為本發(fā)明實施例提供的一種應用于無主鍵表轉移方法的方法流程圖;圖3為本發(fā)明實施例提供的一種獲取邏輯地址方法的方法流程圖;圖4為本發(fā)明實施例提供的一種數(shù)據(jù)處理裝置的裝置結構圖;圖5為本發(fā)明實施例提供的一種數(shù)據(jù)處理裝置的裝置結構圖。具體實施方式為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所 有其他實施例,都屬于本發(fā)明保護的范圍。傳統(tǒng)的從關系型數(shù)據(jù)庫向非關系型數(shù)據(jù)庫轉移數(shù)據(jù),在轉移的過程中沒有有效的手段獲知待轉移數(shù)據(jù)是否會出現(xiàn)錯誤。然而數(shù)據(jù)轉移過程中數(shù)據(jù)出錯的情況并不罕見。例如從關系型數(shù)據(jù)庫中將多張表導入到非關系型數(shù)據(jù)庫HBase中一張表的情況下,就很容易在轉移過程中出現(xiàn)數(shù)據(jù)錯誤,一旦出錯,會導致轉移到HBase中的那一張表不可用,甚至還會影響到其他表的可用性。可見這種出錯的情況為數(shù)據(jù)轉移的穩(wěn)定性帶來很大影響。而且對于轉移后的不可用的表,還需要通過排查才能確定是否是轉移過程中的數(shù)據(jù)出錯造成的,浪費人力物力,效率很低。由于目前只能在數(shù)據(jù)轉移完成后發(fā)現(xiàn)轉移后的表不可用,無法有效解決轉移過程中出錯為數(shù)據(jù)轉移帶來的影響。為此,本發(fā)明實施例提供了一種數(shù)據(jù)處理方法和裝置,在將待轉移任務從關系型數(shù)據(jù)庫導入非關系型數(shù)據(jù)庫前,先保存在元數(shù)據(jù)庫中,并在需要向所述非關系型數(shù)據(jù)庫導入所述待轉移任務前,根據(jù)所述待轉移任務生成分布式文件系統(tǒng)(HadoopDistributedFileSystem,HDFS)臨時文件,通過校驗所述HDFS臨時文件來判斷所述待轉移任務中數(shù)據(jù)的正確性,且在校驗成功時向所述非關系型數(shù)據(jù)庫導入,在校驗不成功時不向所述非關系型數(shù)據(jù)庫導入,并從所述關系型數(shù)據(jù)庫重新獲取所述待轉移任務,使得在數(shù)據(jù)轉移過程可以有效避免向被轉移的所述非關系型數(shù)據(jù)庫導入出現(xiàn)錯誤的待轉移任務,提高了數(shù)據(jù)轉移的穩(wěn)定性,有效解決轉移過程中數(shù)據(jù)出錯為數(shù)據(jù)轉移帶來的影響。在關系型數(shù)據(jù)庫向非關系型數(shù)據(jù)庫轉移數(shù)據(jù)的過程中,有別于具有主鍵的表,對于不具有主鍵(primarykey)的表,傳統(tǒng)的做法無法對其進行切分,只能通過單線程轉移,速度很慢,如果該無主鍵表的容量很大,會嚴重影響數(shù)據(jù)轉移的速度。為此,本發(fā)明實施例提供了一種應用于無主鍵表轉移的方法,通過獲取所述無主鍵表的邏輯地址,并根據(jù)最大邏輯地址和最小邏輯地址為切分邊界值,將所述無主鍵表切分為預設份數(shù)。在本發(fā)明實施例中,大容量的無主鍵表可以被切分為多份,以多線程進行轉移,大大提高了數(shù)據(jù)轉移的速度。本發(fā)明實施例還提供了多種校驗方式,主要包括數(shù)量校驗、全量校驗和抽樣校驗。針對不同的應用場景選擇合適的校驗方式實施,以達到場景所需 的校驗效果。實施例一圖1為本發(fā)明實施例提供的一種數(shù)據(jù)處理方法的方法流程圖,應用于從關系型數(shù)據(jù)庫向非關系型數(shù)據(jù)庫進行數(shù)據(jù)轉移的過程中,所述方法包括:S101:從所述關系型數(shù)據(jù)庫獲取待轉移任務,所述待轉移任務包括所述關系型數(shù)據(jù)庫中待轉移表的數(shù)據(jù)或待轉移表被切分后的子表的數(shù)據(jù)。舉例說明,所述待轉移任務可以包含待轉移表中所需轉移的所有數(shù)據(jù),或者當待轉移表容量較大被切分為多個子表時,所述待轉移任務可以包含一個子表中所需轉移的所有數(shù)據(jù)。可選的,在本發(fā)明實施例中,所述關系型數(shù)據(jù)庫具體可以為甲骨文數(shù)據(jù)庫;所述非關系型數(shù)據(jù)庫具體可以為HBase。S102:將所述待轉移任務保存在元數(shù)據(jù)庫中。舉例說明,所述元數(shù)據(jù)庫在本發(fā)明實施例中主要用于提供存儲空間,可以將所述待轉移任務存儲在非緩存類型的所述關系型元數(shù)據(jù)庫中,所述存儲空間可以理解為一種數(shù)據(jù)庫(database)。由于存儲在非緩存類型的存儲空間中,所述待轉移任務不會因為機器重啟或其他情況而丟失,而且可以將所述待轉移任務預先生成好,并存儲在所述元數(shù)據(jù)庫中,而不需要立刻就進行數(shù)據(jù)轉移操作,可以等到何時的時間再通過從所述元數(shù)據(jù)庫中調取所述待轉移任務進行數(shù)據(jù)轉移操作,提高了本發(fā)明實施例的可操作性,更加適于實施。本發(fā)明實施例中,所述元數(shù)據(jù)庫可以為MySQL。S103:在將所述待轉移任務導入到所述非關系型數(shù)據(jù)庫之前,從所述元數(shù)據(jù)庫中獲取所述待轉移任務,并根據(jù)所述待轉移任務生成HDFS臨時文件。舉例說明,本發(fā)明不限定S103必須在執(zhí)行S102后立刻執(zhí)行,如S102的說明,S103可以在需要開始向所述非關系型數(shù)據(jù)庫導入所述待轉移任務時執(zhí)行。所述待轉移任務由于難以被直接進行數(shù)據(jù)檢測,故需要進行格式轉換,將所述待轉移任務轉換為較容易進行校驗的HDFS臨時文件。S104:校驗所述HDFS臨時文件,以判斷所述HDFS臨時文件對應的所述待轉移任務中數(shù)據(jù)的正確性。若校驗成功,執(zhí)行S105;若校驗失敗,執(zhí)行S106。S105:將所述HDFS臨時文件對應的所述待轉移任務導入到所述非關系型數(shù)據(jù)庫。S106:重新從所述關系型數(shù)據(jù)庫生成所述HDFS臨時文件對應的所述待轉移任務。舉例說明,由于所述HDFS臨時文件為通過所述待轉移任務生成,若校驗成功,可以理解為所述HDFS臨時文件對應的所述待轉移任務所包含的數(shù)據(jù)的正確性達到數(shù)據(jù)轉移的標準,將所述待轉移任務導入所述非關系型數(shù)據(jù)庫中的目標表中后,所述目標表不會因為所述待轉移任務中的數(shù)據(jù)導致不可用。若校驗失敗,可以理解為所述HDFS臨時文件對應的所述待轉移任務所包含的數(shù)據(jù)的正確性沒有達到數(shù)據(jù)轉移的標準,其中的錯誤數(shù)據(jù)可能會導致數(shù)據(jù)轉移操作后,導入所述待轉移任務的目標表不可用。在校驗失敗的情況下,不會將所述待轉移任務導入到所述非關系型數(shù)據(jù)庫,而是從所述關系型數(shù)據(jù)庫中重新獲取所述待轉移任務,并繼續(xù)執(zhí)行S102至S104的步驟,繼續(xù)對所述待轉移任務進行校驗。通過校驗在數(shù)據(jù)轉移之前就可以有效的發(fā)現(xiàn)待轉移任務的數(shù)據(jù)錯誤,降低了數(shù)據(jù)轉移的出錯概率。舉例說明,本發(fā)明實施例提供了至少三種校驗的方式,數(shù)量校驗、全量校驗或抽樣校驗。其中數(shù)量校驗是通過比較源端的關系型數(shù)據(jù)庫和即將導入目標端的非關系型數(shù)據(jù)庫中的臨時文件中數(shù)據(jù)的行數(shù),關系型數(shù)據(jù)庫通過count(*)來獲取總的行數(shù),非關系型數(shù)據(jù)庫在生成的HDFS文件頭部可以直接獲取到總的行數(shù)。全量校驗是通過一種稱為MapReduce的方法分布式的進行所有生成的臨時HDFS文件的數(shù)據(jù)進行校驗,這種校驗最可靠,也最耗時。抽樣校驗是指在全量校驗的基礎上加入一些過濾條件,只對一部分數(shù)據(jù)進行校驗,效率更高??梢?,針對不同的應用場景選擇合適的校驗方式實施,以達到場景所需的校驗效果。由上述實施例可以看出,在將待轉移任務從關系型數(shù)據(jù)庫導入非關系型數(shù)據(jù)庫前,先保存在元數(shù)據(jù)庫中,并在需要向所述非關系型數(shù)據(jù)庫導入所述待轉移任務前,根據(jù)所述待轉移任務生成HDFS臨時文件,通過校驗所述HDFS臨時文件來判斷所述待轉移任務中數(shù)據(jù)的正確性,且在校驗成功時向所述非關系型數(shù)據(jù)庫導入,在校驗不成功時不向所述非關系型數(shù)據(jù)庫導入,并 從所述關系型數(shù)據(jù)庫重新獲取所述待轉移任務,使得在數(shù)據(jù)轉移過程可以有效避免向被轉移的所述非關系型數(shù)據(jù)庫導入出現(xiàn)錯誤的待轉移任務,提高了數(shù)據(jù)轉移的穩(wěn)定性,有效解決轉移過程中數(shù)據(jù)出錯為數(shù)據(jù)轉移帶來的影響。實施例二在本發(fā)明實施例中所述的主鍵(primarykey)標識了表中每一行數(shù)據(jù)的唯一性,和提供了快速查找數(shù)據(jù)的功能,若沒有主鍵,數(shù)據(jù)只能被順序掃描,無法做到并發(fā)查找。在關系型數(shù)據(jù)庫向非關系型數(shù)據(jù)庫轉移數(shù)據(jù)的過程中,有別于具有主鍵的表,對于不具有主鍵的表,傳統(tǒng)的做法無法對其進行切分,只能通過單線程轉移,速度很慢,如果該無主鍵表的容量很大,會嚴重影響數(shù)據(jù)轉移的速度。為此,本發(fā)明實施例提供了一種應用于無主鍵表轉移的方法,在圖1所對應實施例的基礎上,圖2為本發(fā)明實施例提供的一種應用于無主鍵表轉移方法的方法流程圖,在所述從所述關系型數(shù)據(jù)庫獲取待轉移任務之前,所述方法包括:S201:判斷所述關系型數(shù)據(jù)庫中所述待轉移表是否具有主鍵,若所述待轉移表不具有主鍵,執(zhí)行S202。舉例說明,對于有主鍵表,在數(shù)據(jù)轉移過程中,將關系型數(shù)據(jù)庫中表的主鍵作為需要轉入的非關系型數(shù)據(jù)庫中表的鍵(rowkey)。對于大容量的有主鍵表可以根據(jù)該表的主鍵進行切分。本發(fā)明實施例主要關注對無主鍵表的處理,當需要從關系型數(shù)據(jù)庫轉移個無主鍵表到非關系型數(shù)據(jù)庫,目前只能使用單線程進行數(shù)據(jù)轉移操作,且即使一個無主鍵表的容量過大需要切分也會因為沒有主鍵無法對其進行切分。在本發(fā)明實施例中使用了代替主鍵功能的另一種參數(shù):邏輯地址(rowid),并使用邏輯地址來作為切分關系型數(shù)據(jù)庫中無主鍵表的切分依據(jù)。S202:獲取所述待轉移表的邏輯地址;若獲取用于切分的預設份數(shù),執(zhí)行S203,若未獲取用于切分的所述預設份數(shù),執(zhí)行S204。舉例說明,由于本發(fā)明實施例希望進一步解決的是對無主鍵表的切分,故在獲取了所述待轉移表的邏輯地址后,還需要確定是否需要切分。所述預設份數(shù)可以理解為用戶希望對所述待轉移表切分的份數(shù),或者也可以理解為 根據(jù)所述待轉移表的容量或預期的數(shù)據(jù)轉移速度所預先設定的切分份數(shù)。所述預設份數(shù)可以為至少兩份。針對獲取邏輯地址,可選的,本發(fā)明實施例還提供了一種獲取邏輯地址的方法,尤其適用于oracle類型的關系型數(shù)據(jù)庫中,根據(jù)oracle類型的關系型數(shù)據(jù)庫所提供的相關數(shù)據(jù)接口,可以通過本方法快速有效的獲取無主鍵表的邏輯地址。圖3為本發(fā)明實施例提供的一種獲取邏輯地址方法的方法流程圖,所述方法包括:S301:獲取所述待轉移表的邏輯的地址中除最大邏輯地址外的其余邏輯地址。S302:獲取所述最大邏輯地址所在數(shù)據(jù)塊(block)。S303:從所述文件塊中獲取所述最大邏輯地址。舉例說明,在本發(fā)明實施例中,尤其是針對oracle類型的關系型數(shù)據(jù)庫??梢酝ㄟ^Oracle提供的系統(tǒng)表DBA_EXTEMTS、DBA_OBJECTS和DATA_OBJECT_ID來獲取待遷移表用于切分的邊界rowid,由于系統(tǒng)表的限制無法一次獲得所有的邊界rowid,故通過上述S301到S303三個步驟來獲取所需要的邊界rowid值??梢酝ㄟ^結構化查詢語句(StructuredQueryLanguage,SQL)實現(xiàn)步驟S301到S303所示的功能。S203:以所述最大邏輯地址和最小邏輯地址作為切分邊界值,將所述待轉移表切分為預設份數(shù)個子表,并針對子表生成所述待轉移任務。舉例說明,現(xiàn)有技術中無法對無主鍵表進行切分是因為沒有主鍵,缺少切分的依據(jù)。以S202獲取的所述邏輯地址的最大值和最小值作為切分邊界值也就是是切分的依據(jù),將所述待轉移表切分成預設份數(shù)。假設所述預設份數(shù)為兩份,則將所述最大邏輯地址和最小邏輯地址所劃定的邏輯地址區(qū)間分為兩份,得到兩個子表。若所述預設份數(shù)為三份,則將所述邏輯地址區(qū)間分為三份,得到三個子表,依次類推。通過切分無主鍵的所述待轉移表,可以多個子表,每個子表可以得到一個待轉移任務,多個待轉移任務可以并行完成,由此達到并行轉移一個無主鍵表的效果。S204:生成針對所述待轉移表的所述待轉移任務。舉例說明,若為獲取所述預設份數(shù),可以理解為所述待轉移表雖然沒有主鍵,但是其容量不需要進行切分也可以滿足數(shù)據(jù)轉移的時間要求??梢?,通過獲取所述無主鍵表的邏輯地址,并根據(jù)最大邏輯地址和最小邏輯地址為切分邊界值,將所述無主鍵表切分為預設份數(shù)。大容量的無主鍵表可以被切分為多份,以多線程進行轉移,大大提高了數(shù)據(jù)轉移的速度。實施例三圖4為本發(fā)明實施例提供的一種數(shù)據(jù)處理裝置的裝置圖,應用于從關系型數(shù)據(jù)庫向非關系型數(shù)據(jù)庫進行數(shù)據(jù)轉移的過程中,包括:第一獲取單元401,用于從所述關系型數(shù)據(jù)庫獲取待轉移任務,所述待轉移任務包括所述關系型數(shù)據(jù)庫中待轉移表的數(shù)據(jù)或待轉移表被切分后的子表的數(shù)據(jù)。舉例說明,所述待轉移任務可以包含待轉移表中所需轉移的所有數(shù)據(jù),或者當待轉移表容量較大被切分為多個子表時,所述待轉移任務可以包含一個子表中所需轉移的所有數(shù)據(jù)??蛇x的,在本發(fā)明實施例中,所述關系型數(shù)據(jù)庫具體可以為甲骨文數(shù)據(jù)庫;所述非關系型數(shù)據(jù)庫具體可以為HBase。保存單元402,用于將所述待轉移任務保存在元數(shù)據(jù)庫中。舉例說明,所述元數(shù)據(jù)庫在本發(fā)明實施例中主要用于提供存儲空間,可以將所述待轉移任務存儲在非緩存類型的所述關系型元數(shù)據(jù)庫中,所述存儲空間可以理解為一種數(shù)據(jù)庫(database)。由于存儲在非緩存類型的存儲空間中,所述待轉移任務不會因為機器重啟或其他情況而丟失,而且可以將所述待轉移任務預先生成好,并存儲在所述元數(shù)據(jù)庫中,而不需要立刻就進行數(shù)據(jù)轉移操作,可以等到何時的時間再通過從所述元數(shù)據(jù)庫中調取所述待轉移任務進行數(shù)據(jù)轉移操作,提高了本發(fā)明實施例的可操作性,更加適于實施。本發(fā)明實施例中,所述元數(shù)據(jù)庫可以為MySQL。第一生成單元403,用于在將所述待轉移任務導入到所述非關系型數(shù)據(jù)庫之前,從所述元數(shù)據(jù)庫中獲取所述待轉移任務,并根據(jù)所述待轉移任務生成 HDFS臨時文件。舉例說明,本發(fā)明不限定所述第一生成單元403的觸發(fā)必須在觸發(fā)所述保存單元402后立刻執(zhí)行,如所述保存單元402的說明,所述第一生成單元403可以在需要開始向所述非關系型數(shù)據(jù)庫導入所述待轉移任務時觸發(fā)。所述待轉移任務由于難以被直接進行數(shù)據(jù)檢測,故需要進行格式轉換,將所述待轉移任務轉換為較容易進行校驗的HDFS臨時文件。校驗單元404,用于校驗所述HDFS臨時文件,以判斷所述HDFS臨時文件對應的所述待轉移任務中數(shù)據(jù)的正確性,若校驗成功,觸發(fā)導入單元405,若校驗失敗,觸發(fā)第二生成單元406。所述導入單元405,用于將所述HDFS臨時文件對應的所述待轉移任務導入到所述非關系型數(shù)據(jù)庫。所述第二生成單元406,用于重新從所述關系型數(shù)據(jù)庫生成所述HDFS臨時文件對應的所述待轉移任務。舉例說明,由于所述HDFS臨時文件為通過所述待轉移任務生成,若校驗成功,可以理解為所述HDFS臨時文件對應的所述待轉移任務所包含的數(shù)據(jù)的正確性達到數(shù)據(jù)轉移的標準,所述導入單元405將所述待轉移任務導入所述非關系型數(shù)據(jù)庫中的目標表中后,所述目標表不會因為所述待轉移任務中的數(shù)據(jù)導致不可用。若校驗失敗,可以理解為所述HDFS臨時文件對應的所述待轉移任務所包含的數(shù)據(jù)的正確性沒有達到數(shù)據(jù)轉移的標準,其中的錯誤數(shù)據(jù)可能會導致數(shù)據(jù)轉移操作后,導入所述待轉移任務的目標表不可用。在校驗失敗的情況下,不會將所述待轉移任務導入到所述非關系型數(shù)據(jù)庫,而是觸發(fā)所述第二生成單元406從所述關系型數(shù)據(jù)庫中重新獲取所述待轉移任務,并重新出發(fā)所述第一獲取單元401,繼續(xù)對所述待轉移任務進行校驗。通過校驗在數(shù)據(jù)轉移之前就可以有效的發(fā)現(xiàn)待轉移任務的數(shù)據(jù)錯誤,降低了數(shù)據(jù)轉移的出錯概率。舉例說明,本發(fā)明實施例提供了至少三種校驗的方式,數(shù)量校驗、全量校驗或抽樣校驗。其中數(shù)量校驗是通過比較源端的關系型數(shù)據(jù)庫和即將導入目標端的非關系型數(shù)據(jù)庫中的臨時文件中數(shù)據(jù)的行數(shù),關系型數(shù)據(jù)庫通過count(*)來獲取總的行數(shù),非關系型數(shù)據(jù)庫在生成的HDFS文件頭部可以直接 獲取到總的行數(shù)。全量校驗是通過一種稱為MapReduce的方法分布式的進行所有生成的臨時HDFS文件的數(shù)據(jù)進行校驗,這種校驗最可靠,也最耗時。抽樣校驗是指在全量校驗的基礎上加入一些過濾條件,只對一部分數(shù)據(jù)進行校驗,效率更高??梢姡槍Σ煌膽脠鼍斑x擇合適的校驗方式實施,以達到場景所需的校驗效果。由上述實施例可以看出,在將待轉移任務從關系型數(shù)據(jù)庫導入非關系型數(shù)據(jù)庫前,先保存在元數(shù)據(jù)庫中,并在需要向所述非關系型數(shù)據(jù)庫導入所述待轉移任務前,根據(jù)所述待轉移任務生成HDFS臨時文件,通過校驗所述HDFS臨時文件來判斷所述待轉移任務中數(shù)據(jù)的正確性,且在校驗成功時向所述非關系型數(shù)據(jù)庫導入,在校驗不成功時不向所述非關系型數(shù)據(jù)庫導入,并從所述關系型數(shù)據(jù)庫重新獲取所述待轉移任務,使得在數(shù)據(jù)轉移過程可以有效避免向被轉移的所述非關系型數(shù)據(jù)庫導入出現(xiàn)錯誤的待轉移任務,提高了數(shù)據(jù)轉移的穩(wěn)定性,有效解決轉移過程中數(shù)據(jù)出錯為數(shù)據(jù)轉移帶來的影響。實施例四在本發(fā)明實施例中所述的主鍵(primarykey)標識了表中每一行數(shù)據(jù)的唯一性,和提供了快速查找數(shù)據(jù)的功能,若沒有主鍵,數(shù)據(jù)只能被順序掃描,無法做到并發(fā)查找。在關系型數(shù)據(jù)庫向非關系型數(shù)據(jù)庫轉移數(shù)據(jù)的過程中,有別于具有主鍵的表,對于不具有主鍵的表,傳統(tǒng)的做法無法對其進行切分,只能通過單線程轉移,速度很慢,如果該無主鍵表的容量很大,會嚴重影響數(shù)據(jù)轉移的速度。在圖4所對應實施例的基礎上,圖5為本發(fā)明實施例提供的一種數(shù)據(jù)處理裝置的裝置結構圖。還包括:判斷單元501,用于在觸發(fā)所述第一獲取單元401之前,判斷所述關系型數(shù)據(jù)庫中所述待轉移表是否具有主鍵。舉例說明,對于有主鍵表,在數(shù)據(jù)轉移過程中,將關系型數(shù)據(jù)庫中表的主鍵作為需要轉入的非關系型數(shù)據(jù)庫中表的鍵(rowkey)。對于大容量的有主鍵表可以根據(jù)該表的主鍵進行切分。本發(fā)明實施例主要關注對無主鍵表的處理,當需要從關系型數(shù)據(jù)庫轉移個無主鍵表到非關系型數(shù)據(jù)庫,目前只能使用單線程進行數(shù)據(jù)轉移操作,且即使一個無主鍵表的容量過大需要切分也會 因為沒有主鍵無法對其進行切分。在本發(fā)明實施例中使用了代替主鍵功能的另一種參數(shù):邏輯地址(rowid),并使用邏輯地址來作為切分關系型數(shù)據(jù)庫中無主鍵表的切分依據(jù)。第二獲取單元502,用于若所述判斷單元501的判斷結果為所述待轉移表不具有主鍵,獲取所述待轉移表的邏輯地址。舉例說明,由于本發(fā)明實施例希望進一步解決的是對無主鍵表的切分,故在獲取了所述待轉移表的邏輯地址后,還需要確定是否需要切分。所述預設份數(shù)可以理解為用戶希望對所述待轉移表切分的份數(shù),或者也可以理解為根據(jù)所述待轉移表的容量或預期的數(shù)據(jù)轉移速度所預先設定的切分份數(shù)。所述預設份數(shù)可以為至少兩份。針對獲取邏輯地址,可選的,本發(fā)明實施例還提供了一種獲取邏輯地址的方法,尤其適用于oracle類型的關系型數(shù)據(jù)庫中,根據(jù)oracle類型的關系型數(shù)據(jù)庫所提供的相關數(shù)據(jù)接口,可以快速有效的獲取無主鍵表的邏輯地址。如圖5所示,所述第二獲取單元502具體包括:第一獲取子單元5021,用于獲取所述待轉移表的邏輯的地址中除最大邏輯地址外的其余邏輯地址。第二獲取子單元5022,用于獲取所述最大邏輯地址所在數(shù)據(jù)塊。第三獲取子單元5023,用于從所述文件塊中獲取所述最大邏輯地址。舉例說明,在本發(fā)明實施例中,尤其是針對oracle類型的關系型數(shù)據(jù)庫??梢酝ㄟ^Oracle提供的系統(tǒng)表DBA_EXTEMTS、DBA_OBJECTS和DATA_OBJECT_ID來獲取待遷移表用于切分的邊界rowid,由于系統(tǒng)表的限制無法一次獲得所有的邊界rowid,故通過上述S301到S303三個步驟來獲取所需要的邊界rowid值??梢酝ㄟ^SQL實現(xiàn)第一獲取子單元5021至第三獲取子單元5023的功能。切分單元503,用于若所述第二獲取單元502還獲取用于切分的預設份數(shù),以所述最大邏輯地址和最小邏輯地址作為切分邊界值,將所述待轉移表切分為預設份數(shù)個子表,并針對子表生成所述待轉移任務。舉例說明,現(xiàn)有技術中無法對無主鍵表進行切分是因為沒有主鍵,缺少切分的依據(jù)。以所述第二獲取單元502獲取的所述邏輯地址的最大值和最小 值作為切分邊界值也就是是切分的依據(jù),將所述待轉移表切分成預設份數(shù)。假設所述預設份數(shù)為兩份,則將所述最大邏輯地址和最小邏輯地址所劃定的邏輯地址區(qū)間分為兩份,得到兩個子表。若所述預設份數(shù)為三份,則將所述邏輯地址區(qū)間分為三份,得到三個子表,依次類推。通過切分無主鍵的所述待轉移表,可以多個子表,每個子表可以得到一個待轉移任務,多個待轉移任務可以并行完成,由此達到并行轉移一個無主鍵表的效果。所述第二生成單元504還用于若所述第二獲取單元502未獲取用于切分的所述預設份數(shù),生成針對所述待轉移表的所述待轉移任務。舉例說明,若為獲取所述預設份數(shù),可以理解為所述待轉移表雖然沒有主鍵,但是其容量不需要進行切分也可以滿足數(shù)據(jù)轉移的時間要求。可見,通過獲取所述無主鍵表的邏輯地址,并根據(jù)最大邏輯地址和最小邏輯地址為切分邊界值,將所述無主鍵表切分為預設份數(shù)。大容量的無主鍵表可以被切分為多份,以多線程進行轉移,大大提高了數(shù)據(jù)轉移的速度。通過以上的實施方式的描述可知,本領域的技術人員可以清楚地了解到上述實施例方法中的全部或部分步驟可借助軟件加通用硬件平臺的方式來實現(xiàn)?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在存儲介質中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者諸如媒體網(wǎng)關等網(wǎng)絡通信設備)執(zhí)行本發(fā)明各個實施例或者實施例的某些部分所述的方法。需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于設備及系統(tǒng)實施例而言,由于其基本相似于方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。以上所描述的設備及系統(tǒng)實施例僅僅是示意性的,其中作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個 網(wǎng)絡單元上。可以根據(jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。以上所述僅是本發(fā)明的優(yōu)選實施方式,并非用于限定本發(fā)明的保護范圍。應當指出,對于本
技術領域:
:的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。當前第1頁1 2 3 當前第1頁1 2 3