一種將關(guān)系型數(shù)據(jù)遷移至HBase的方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種將關(guān)系型數(shù)據(jù)遷移至HBase的方法及系統(tǒng),包括關(guān)系數(shù)據(jù)庫、HBase數(shù)據(jù)庫、SQL解析模塊、查詢轉(zhuǎn)換模塊和數(shù)據(jù)模式管理模塊;通過在HBase數(shù)據(jù)庫中設(shè)計(jì)映射關(guān)系表,存儲(chǔ)原關(guān)系數(shù)據(jù)庫中模式信息與HBase數(shù)據(jù)庫中模式信息的映射關(guān)系,完整保留了原關(guān)系數(shù)據(jù)庫中數(shù)據(jù)表格的模式信息,且可靈活配置映射方式,為用戶提供了更多的選擇,且HBase的高效數(shù)據(jù)組織方式,大大提高了訪問性能,節(jié)省了存儲(chǔ)空間,同時(shí)提供數(shù)據(jù)導(dǎo)出功能,實(shí)現(xiàn)與其他子系統(tǒng)的數(shù)據(jù)交互,另外,數(shù)據(jù)查詢功能支持SQL查詢,將SQL查詢語句轉(zhuǎn)換成HBase數(shù)據(jù)庫的查詢語句,使用戶更平滑地過渡到HBase數(shù)據(jù)庫。
【專利說明】—種將關(guān)系型數(shù)據(jù)遷移至HBase的方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲(chǔ)與管理領(lǐng)域,尤其涉及一種將傳統(tǒng)關(guān)系型數(shù)據(jù)庫中的關(guān)系型數(shù)據(jù)遷移至HBase數(shù)據(jù)庫的方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著數(shù)據(jù)生成方式的多元化與數(shù)據(jù)接入方式的多樣化及便捷化,各種業(yè)務(wù)系統(tǒng)中的數(shù)據(jù)都急劇膨脹。相應(yīng)地,傳統(tǒng)方式下,使用關(guān)系型數(shù)據(jù)庫管理的數(shù)據(jù),在存儲(chǔ)容量與訪問量上不斷發(fā)生量級(jí)上的增加。傳統(tǒng)關(guān)系庫面臨嚴(yán)峻的挑戰(zhàn)。
[0003]近年來,NoSQL數(shù)據(jù)庫在工業(yè)界和研究領(lǐng)域蓬勃發(fā)展。NoSQL數(shù)據(jù)庫天然的分布式架構(gòu),自動(dòng)完成數(shù)據(jù)的水平劃分與訪問的并發(fā),在數(shù)據(jù)存儲(chǔ)量及讀寫性能較傳統(tǒng)關(guān)系型數(shù)據(jù)庫有了極大的提升。工業(yè)界與研究機(jī)構(gòu)都紛紛推出相關(guān)軟件,HBase即為其中的一員。HBase是一個(gè)分布式的、面向列存儲(chǔ)的數(shù)據(jù)庫,具有高可靠性、高可擴(kuò)展性,能在普通硬件環(huán)境基礎(chǔ)上支撐十億量級(jí)行,百萬量級(jí)列的“大表”,并支持在這樣規(guī)模數(shù)據(jù)上的隨機(jī)、實(shí)時(shí)讀寫操作。HBase提供類似于表格的存儲(chǔ)視圖,與普通二維表格不同的是,表的屬性列可以按需動(dòng)態(tài)調(diào)整,表的記錄按照列方向而非行方向進(jìn)行組織。一行數(shù)據(jù)有行鍵與若干列簇組成,行鍵與列簇組成該表的schema,在表格創(chuàng)建后保持不變。而列簇則由若干列組成,可以在數(shù)據(jù)更新時(shí)動(dòng)態(tài)增減列簇中的列。
[0004]參照Google的BigTable實(shí)現(xiàn)的HBase,目前是Apache的頂級(jí)項(xiàng)目,該開源社區(qū)蓬勃發(fā)展的同時(shí),HBase的應(yīng)用也越來越廣泛,已經(jīng)在Yahoo!, Facebook等多家公司成功應(yīng)用。應(yīng)用過程中,不可避免地涉及到數(shù)據(jù)遷移,即從從原有數(shù)據(jù)平臺(tái)遷移至HBasejn:從Mysql、Oracle等關(guān)系型數(shù)據(jù)庫移出。
[0005]Apache出品的Sqoop系統(tǒng)即提供從關(guān)系數(shù)據(jù)庫讀取整庫的數(shù)據(jù),并指定列為行鍵,將數(shù)據(jù)記錄作為值存入HBase某一行的列簇中。這種遷移存在以下問題:1)丟失數(shù)據(jù)模式信息與數(shù)據(jù)唯一性保證,如數(shù)據(jù)類型、是否允許非空。2)列過多,對(duì)讀寫性能造成一定的影響。3)不恰當(dāng)?shù)男墟I的設(shè)計(jì),可能會(huì)造成空間的浪費(fèi)。
【發(fā)明內(nèi)容】
[0006]本發(fā)明所要解決的技術(shù)問題是針對(duì)現(xiàn)有技術(shù)的不足,提供一種將關(guān)系型數(shù)據(jù)遷移至HBase的方法及系統(tǒng),完整保留了原關(guān)系數(shù)據(jù)庫中數(shù)據(jù)表格的模式信息,可靈活配置映射方式,提高了訪問性能,節(jié)省了存儲(chǔ)空間。
[0007]本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種將關(guān)系型數(shù)據(jù)遷移至HBase的方法,包括如下步驟:
[0008]步驟1:建立HBase數(shù)據(jù)庫,并建立用于存儲(chǔ)關(guān)系數(shù)據(jù)庫中數(shù)據(jù)表與HBase中相應(yīng)的數(shù)據(jù)存儲(chǔ)表間映射關(guān)系的映射關(guān)系表;
[0009]步驟2:選定一個(gè)或一個(gè)以上的關(guān)系型數(shù)據(jù)表,并為選定的每個(gè)關(guān)系型數(shù)據(jù)表定義映射方式,記錄在映射關(guān)系表中;[0010]步驟3:導(dǎo)入數(shù)據(jù)時(shí),查詢映射關(guān)系表中的映射方式,并根據(jù)映射方式建立相應(yīng)的數(shù)據(jù)存儲(chǔ)表;
[0011]步驟4:將步驟2中所述一個(gè)或一個(gè)以上的關(guān)系型數(shù)據(jù)表中的數(shù)據(jù)按照步驟3中所述的映射關(guān)系遷移至建立的數(shù)據(jù)存儲(chǔ)表中;
[0012]步驟5:判斷是否還有關(guān)系型數(shù)據(jù)要遷移到HBase數(shù)據(jù)庫中,如果有返回步驟2,否則結(jié)束。
[0013]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
[0014]進(jìn)一步,上述技術(shù)方案還包括當(dāng)要從HBase數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)時(shí),具體實(shí)現(xiàn)如下:首先,根據(jù)用戶提供的導(dǎo)出配置文件獲取待導(dǎo)出數(shù)據(jù)在原關(guān)系型數(shù)據(jù)表中的位置信息;其次,根據(jù)待導(dǎo)出數(shù)據(jù)在原關(guān)系型數(shù)據(jù)表中的位置信息,在映射關(guān)系表中查找出待導(dǎo)出數(shù)據(jù)在HBase數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)表中相應(yīng)的位置信息;最后,按照關(guān)系映射表中定義的數(shù)據(jù)類型將待導(dǎo)出數(shù)據(jù)導(dǎo)出。
[0015]進(jìn)一步,上述技術(shù)方案還包括當(dāng)要從HBase數(shù)據(jù)庫中查詢數(shù)據(jù)時(shí),具體實(shí)現(xiàn)如下:首先,解析所述查詢語句,提取出查詢信息,并轉(zhuǎn)換成HBase數(shù)據(jù)庫的查詢語句;其次,根據(jù)已轉(zhuǎn)換的查詢語句在映射關(guān)系表中查找待查詢數(shù)據(jù)在數(shù)據(jù)存儲(chǔ)表中的位置信息;最后,根據(jù)查詢到的位置信息,查詢數(shù)據(jù)存儲(chǔ)表中的相應(yīng)數(shù)據(jù)。
[0016]進(jìn)一步,步驟2中所述映射方式為包括表映射方式和列映射方式,
[0017]所述表映射方式包括一對(duì)一映射和多對(duì)一映射,具體體現(xiàn)在表名的映射,所述表名的映射為根據(jù)表名轉(zhuǎn)換運(yùn)算進(jìn)行映射,表名轉(zhuǎn)換運(yùn)算包括一對(duì)一哈希運(yùn)算和多對(duì)一哈希運(yùn)算;
[0018]所述列映射方式包 括默認(rèn)方式、時(shí)序方式和用戶自定義方式,所述默認(rèn)方式即關(guān)
系數(shù)據(jù)庫中表格內(nèi)所有列與ffiase的數(shù)據(jù)存儲(chǔ)表格的一個(gè)列簇內(nèi)的所有列--對(duì)應(yīng);所述
時(shí)序方式即將關(guān)系數(shù)據(jù)庫中表格內(nèi)所有時(shí)間值屬性列在HBase的數(shù)據(jù)存儲(chǔ)表中單獨(dú)定義一個(gè)列簇,該列簇包含一個(gè)列,將遷移的數(shù)據(jù)按照不同時(shí)間點(diǎn)對(duì)應(yīng)于該列不同的時(shí)間戳上;所述用戶自定義映射即根據(jù)用戶的需要進(jìn)行自定義。
[0019]進(jìn)一步,步驟3中根據(jù)映射方式建立相應(yīng)的數(shù)據(jù)存儲(chǔ)表,所述數(shù)據(jù)存儲(chǔ)表中包括一個(gè)特殊的列即為行鍵列,所述行鍵列的映射方式包括單關(guān)鍵字型和多關(guān)鍵字型,所述單關(guān)鍵字型是以原關(guān)系數(shù)據(jù)庫中表格的一個(gè)列屬性直接作為行鍵,多關(guān)鍵字型是將原關(guān)系數(shù)據(jù)庫中表格的多個(gè)列屬性拼接為一個(gè)行鍵,所選列屬性、用于拼接各列屬性的連接字符或字符串,以及行鍵的排列順序由用戶自定義。
[0020]進(jìn)一步,步驟4的具體實(shí)現(xiàn)包括數(shù)據(jù)讀取和數(shù)據(jù)寫入,其中數(shù)據(jù)讀取包括兩種方式,一是通過JDBC從關(guān)系數(shù)據(jù)庫中讀取數(shù)據(jù),二是通過中間文件從關(guān)系數(shù)據(jù)庫中讀取數(shù)據(jù);導(dǎo)入數(shù)據(jù)時(shí),首先在映射關(guān)系表中查找相關(guān)的映射關(guān)系,將讀取的數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制串,根據(jù)映射關(guān)系將與入到相應(yīng)的數(shù)據(jù)存儲(chǔ)表中。
[0021]本發(fā)明解決上述技術(shù)問題的另一技術(shù)方案如下:一種將關(guān)系型數(shù)據(jù)遷移至HBase的系統(tǒng),包括一個(gè)或一個(gè)以上的關(guān)系數(shù)據(jù)庫、HBase數(shù)據(jù)庫、SQL解析模塊、查詢轉(zhuǎn)換模塊和數(shù)據(jù)模式管理模塊;
[0022]所述每個(gè)關(guān)系數(shù)據(jù)庫,其用于存儲(chǔ)關(guān)系型數(shù)據(jù),作為數(shù)據(jù)遷移的源端;
[0023]所述HBase數(shù)據(jù)庫,其用于建立映射關(guān)系表來存儲(chǔ)關(guān)系數(shù)據(jù)庫中數(shù)據(jù)表與HBase中相應(yīng)的數(shù)據(jù)存儲(chǔ)表間的映射關(guān)系,并將從關(guān)系型數(shù)據(jù)庫中遷移來的數(shù)據(jù)按照預(yù)定的映射關(guān)系存儲(chǔ)在相應(yīng)的數(shù)據(jù)存儲(chǔ)表中;
[0024]所述SQL解析模塊,其用于提供SQL查詢功能,對(duì)SQL查詢語句進(jìn)行解析,并將解析出的查詢信息傳送給查詢轉(zhuǎn)換模塊;
[0025]所述查詢轉(zhuǎn)換模塊,其用于將接收的查詢信息轉(zhuǎn)換成HBase數(shù)據(jù)庫的查詢語句,并傳送給數(shù)據(jù)模式管理模塊;
[0026]所述數(shù)據(jù)模式管理模塊,其用于在向HBase導(dǎo)入、導(dǎo)出和查詢數(shù)據(jù)時(shí),調(diào)取相應(yīng)接口,在HBase的映射關(guān)系表中查詢映射關(guān)系,為數(shù)據(jù)導(dǎo)入、導(dǎo)出和查詢提供查詢依據(jù)。
[0027]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
[0028]進(jìn)一步,所述預(yù)定的映射關(guān)系包括表映射方式和列映射方式,
[0029]所述表映射方式包括一對(duì)一映射和多對(duì)一映射,具體體現(xiàn)在表名的映射,所述表名的映射為根據(jù)表名轉(zhuǎn)換運(yùn)算進(jìn)行映射,表名轉(zhuǎn)換運(yùn)算包括一對(duì)一哈希運(yùn)算和多對(duì)一哈希運(yùn)算;
[0030]所述列映射方式包括默認(rèn)方式、時(shí)序方式和用戶自定義方式,所述默認(rèn)方式即關(guān)
系數(shù)據(jù)庫中表格內(nèi)所有列與ffiase的數(shù)據(jù)存儲(chǔ)表格的一個(gè)列簇內(nèi)的所有列--對(duì)應(yīng);所述
時(shí)序方式即將關(guān)系數(shù)據(jù)庫中 表格內(nèi)所有時(shí)間值屬性列在HBase的數(shù)據(jù)存儲(chǔ)表中單獨(dú)定義一個(gè)列簇,該列簇包含一個(gè)列,將遷移的數(shù)據(jù)按照不同時(shí)間點(diǎn)對(duì)應(yīng)于該列不同的時(shí)間戳上;所述用戶自定義映射即根據(jù)用戶的需要進(jìn)行自定義。
[0031]進(jìn)一步,所述關(guān)系數(shù)據(jù)庫提供JDBC接口以實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫中表格模式的獲取及待遷移數(shù)據(jù)的讀?。凰鯤Base數(shù)據(jù)庫提供接口以實(shí)現(xiàn)數(shù)據(jù)的讀寫。
[0032]進(jìn)一步,所述SQL解析模塊包括語法解析單元和語義解析單元;
[0033]所述語法解析單元,其用于通過正則表達(dá)式判斷SQL查詢語句的合法性;
[0034]所述語義查詢單元,其用于提取具體的查詢信息。
[0035]進(jìn)一步,所述映射關(guān)系表包括行鍵和一個(gè)列簇,所述列簇中包括若干列,分別為tOc、TN、aNULL、DT、DL、isK、CFN、CN、TS ;其中,tOc標(biāo)識(shí)所填內(nèi)容為表信息還是列信息,TN中所填內(nèi)容為表名,aNULL標(biāo)識(shí)能否允許為空,DT標(biāo)識(shí)數(shù)據(jù)類型,DL標(biāo)識(shí)數(shù)據(jù)長(zhǎng)度,isK標(biāo)識(shí)是否主鍵,CFN標(biāo)識(shí)是否為時(shí)序映射、CN為主鍵名,TS為時(shí)間戳方式。
[0036]本發(fā)明的有益效果是:本發(fā)明通過在HBase數(shù)據(jù)庫中設(shè)計(jì)映射關(guān)系表,存儲(chǔ)原關(guān)系數(shù)據(jù)庫中模式信息與HBase數(shù)據(jù)庫中模式信息的映射關(guān)系,完整保留了原關(guān)系數(shù)據(jù)庫中數(shù)據(jù)表格的模式信息,且可靈活配置映射方式,為用戶提供了更多的選擇,且HBase的高效數(shù)據(jù)組織方式,大大提高了訪問性能,節(jié)省了存儲(chǔ)空間,同時(shí)提供數(shù)據(jù)導(dǎo)出功能,實(shí)現(xiàn)與其他子系統(tǒng)的數(shù)據(jù)交互,另外,數(shù)據(jù)查詢功能支持SQL查詢,將SQL查詢語句轉(zhuǎn)換成HBase數(shù)據(jù)庫的查詢語句,使用戶更平滑地過渡到HBase數(shù)據(jù)庫。
【專利附圖】
【附圖說明】
[0037]圖1為本發(fā)明所述一種將關(guān)系型數(shù)據(jù)遷移至HBase的方法流程圖;
[0038]圖2為本發(fā)明所述一種將關(guān)系型數(shù)據(jù)遷移至HBase的系統(tǒng)框圖;
[0039]圖3為按關(guān)鍵字查詢關(guān)系數(shù)據(jù)庫與HBase數(shù)據(jù)庫時(shí)的查詢性能對(duì)比圖;
[0040]圖4為按條件查詢關(guān)系數(shù)據(jù)庫與HBase數(shù)據(jù)庫時(shí)的查詢性能對(duì)比圖。[0041]附圖中,各標(biāo)號(hào)所代表的部件列表如下:
[0042]1、關(guān)系數(shù)據(jù)庫,2、HBase數(shù)據(jù)庫,3、SQL解析模塊,4、查詢轉(zhuǎn)換模塊,5、數(shù)據(jù)模式管理模塊。
【具體實(shí)施方式】
[0043]以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
[0044]如圖1所示,一種將關(guān)系型數(shù)據(jù)遷移至HBase的方法,包括如下步驟:
[0045]步驟1:建立HBase數(shù)據(jù)庫,并建立用于存儲(chǔ)關(guān)系數(shù)據(jù)庫中數(shù)據(jù)表與HBase中相應(yīng)的數(shù)據(jù)存儲(chǔ)表間映射關(guān)系的映射關(guān)系表;
[0046]步驟2:選定一個(gè)或一個(gè)以上的關(guān)系型數(shù)據(jù)表,并為選定的每個(gè)關(guān)系型數(shù)據(jù)表定義映射方式,記錄在映射關(guān)系表中;
[0047]步驟3:導(dǎo)入數(shù)據(jù)時(shí),查詢映射關(guān)系表中的映射方式,并根據(jù)映射方式建立相應(yīng)的數(shù)據(jù)存儲(chǔ)表;
[0048]步驟4:將步驟2中所述一個(gè)或一個(gè)以上的關(guān)系型數(shù)據(jù)表中的數(shù)據(jù)按照步驟3中所述的映射關(guān)系遷移至建立的數(shù)據(jù)存儲(chǔ)表中;
[0049]步驟5:判斷是否還有關(guān)系型數(shù)據(jù)要遷移到HBase數(shù)據(jù)庫中,如果有返回步驟2,否則結(jié)束。
[0050]其中,上述技術(shù)方案還包括當(dāng)要從HBase數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)時(shí),具體實(shí)現(xiàn)如下:首先,根據(jù)用戶提供的導(dǎo)出配置文件獲取待導(dǎo)出數(shù)據(jù)在原關(guān)系型數(shù)據(jù)表中的位置信息;其次,根據(jù)待導(dǎo)出數(shù)據(jù)在原關(guān)系型數(shù)據(jù)表中的位置信息,在映射關(guān)系表中查找出待導(dǎo)出數(shù)據(jù)在HBase數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)表中相應(yīng)的位置信息;最后,按照關(guān)系映射表中定義的數(shù)據(jù)類型將待導(dǎo)出數(shù)據(jù)導(dǎo)出。
[0051]其中,上述技術(shù)方案還包括當(dāng)要從HBase數(shù)據(jù)庫中查詢數(shù)據(jù)時(shí),具體實(shí)現(xiàn)如下:首先,解析所述查詢語句,提取出查詢信息,并轉(zhuǎn)換成HBase數(shù)據(jù)庫的查詢語句;其次,根據(jù)已轉(zhuǎn)換的查詢語句在映射關(guān)系表中查找待查詢數(shù)據(jù)在數(shù)據(jù)存儲(chǔ)表中的位置信息;最后,根據(jù)查詢到的位置信息,查詢數(shù)據(jù)存儲(chǔ)表中的相應(yīng)數(shù)據(jù)。
[0052]映射關(guān)系表邏輯上包括表名映射和列映射表。關(guān)系數(shù)據(jù)庫中通常包含庫、模式、表格或類似的三層視圖;而HBase數(shù)據(jù)庫中的表格是平坦化組織的,表格之上沒有模式、庫之類的概念。因此需要將關(guān)系數(shù)據(jù)庫的樹狀名字空間映射為平坦的名字空間,表名映射表中存儲(chǔ)的即是以上映射關(guān)系。關(guān)系數(shù)據(jù)庫與HBase更大的不同在于,關(guān)系數(shù)據(jù)庫的表格屬性是行、列二維的,而HBase是多維的,行方向?yàn)樾墟I維,列方向有列簇和列。為了提高訪問性能,Hbase中的數(shù)據(jù)存儲(chǔ)表的模式設(shè)計(jì)應(yīng)充分利用其特性進(jìn)行數(shù)據(jù)組織和存儲(chǔ)。
[0053]所述原關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)表與HBase中數(shù)據(jù)存儲(chǔ)表的映射關(guān)系包括表映射方式和列映射方式,
[0054]所述表映射方式包括一對(duì)一映射和多對(duì)一映射,具體體現(xiàn)在表名的映射,所述表名的映射為根據(jù)表名轉(zhuǎn)換運(yùn)算進(jìn)行映射,表名轉(zhuǎn)換運(yùn)算包括一對(duì)一哈希運(yùn)算和多對(duì)一哈希運(yùn)算。
[0055]其中,一對(duì)一映射;將關(guān)系型數(shù)據(jù)庫中一個(gè)數(shù)據(jù)表映射到HBase數(shù)據(jù)庫中的一個(gè)數(shù)據(jù)存儲(chǔ)表中,原關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)表的表名經(jīng)過一致的hash計(jì)算得到映射后的表名,即為HBase中對(duì)應(yīng)的表名,此種一對(duì)一映射為本系統(tǒng)提供的默認(rèn)的表映射方式。
[0056]而表的多對(duì)一的表映射方式,即對(duì)于表達(dá)相同業(yè)務(wù)且表格模式一致的多張表(來自同一關(guān)系型數(shù)據(jù)庫或多個(gè)關(guān)系型數(shù)據(jù)庫),允許用戶將其映射到HBase的一個(gè)數(shù)據(jù)存儲(chǔ)表中,原關(guān)系型數(shù)據(jù)庫中的多個(gè)數(shù)據(jù)表的表名經(jīng)過一致的hash計(jì)算得到映射后的表名,即為HBase中對(duì)應(yīng)的表名,此種多對(duì)一映射為本系統(tǒng)提供的多對(duì)一表映射方式。
[0057]所述列映射方式包括默認(rèn)方式、時(shí)序方式和用戶自定義方式,所述默認(rèn)方式即關(guān)
系數(shù)據(jù)庫中表格內(nèi)所有列與ffiase的數(shù)據(jù)存儲(chǔ)表格的一個(gè)列簇內(nèi)的所有列--對(duì)應(yīng);所述
時(shí)序方式即將關(guān)系數(shù)據(jù)庫中表格內(nèi)所有時(shí)間值屬性列在HBase的數(shù)據(jù)存儲(chǔ)表中單獨(dú)定義一個(gè)列簇,該列簇包含一個(gè)列,將遷移的數(shù)據(jù)按照不同時(shí)間點(diǎn)對(duì)應(yīng)于該列不同的時(shí)間戳上;所述用戶自定義映射即根據(jù)用戶的需要進(jìn)行自定義。
[0058]所述數(shù)據(jù)存儲(chǔ)表中包括一個(gè)特殊的列即為行鍵列,所述行鍵列的映射方式包括單關(guān)鍵字型和多關(guān)鍵字型,所述單關(guān)鍵字型是以原關(guān)系數(shù)據(jù)庫中表格的一個(gè)列屬性直接作為行鍵,多關(guān)鍵字型是將原關(guān)系數(shù)據(jù)庫中表格的多個(gè)列屬性拼接為一個(gè)行鍵,所選列屬性、用于拼接各列屬性的連接字符或字符串,以及行鍵的排列順序由用戶自定義。
[0059]實(shí)施例1中,表映射采用一對(duì)一映射,列映射采用默認(rèn)方式,行鍵為多關(guān)鍵字型。如表1為關(guān)系數(shù)據(jù)庫中表名為tl的模式定義,表2、表3分別為映射到HBase中相應(yīng)的表名為hash(tl)的模式定義及數(shù)據(jù)存儲(chǔ)表格模式。
[0060]表1
【權(quán)利要求】
1.一種將關(guān)系型數(shù)據(jù)遷移至HBase的方法,其特征在于,包括如下步驟: 步驟1:建立HBase數(shù)據(jù)庫,并建立用于存儲(chǔ)關(guān)系數(shù)據(jù)庫中數(shù)據(jù)表與HBase中相應(yīng)的數(shù)據(jù)存儲(chǔ)表間映射關(guān)系的映射關(guān)系表; 步驟2:選定一個(gè)或一個(gè)以上的關(guān)系型數(shù)據(jù)表,并為選定的每個(gè)關(guān)系型數(shù)據(jù)表定義映射方式,記錄在映射關(guān)系表中; 步驟3:導(dǎo)入數(shù)據(jù)時(shí),查詢映射關(guān)系表中的映射方式,并根據(jù)映射方式建立相應(yīng)的數(shù)據(jù)存儲(chǔ)表; 步驟4:將步驟2中所述一個(gè)或一個(gè)以上的關(guān)系型數(shù)據(jù)表中的數(shù)據(jù)按照步驟3中所述的映射關(guān)系遷移至建立的數(shù)據(jù)存儲(chǔ)表中; 步驟5:判斷是否還有關(guān)系型數(shù)據(jù)要遷移到HBase數(shù)據(jù)庫中,如果有返回步驟2,否則結(jié)束。
2.根據(jù)權(quán)利要求1所述一種將關(guān)系型數(shù)據(jù)遷移至HBase的方法,其特征在于,還包括當(dāng)要從HBase數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)時(shí),具體實(shí)現(xiàn)如下:首先,根據(jù)用戶提供的導(dǎo)出配置文件獲取待導(dǎo)出數(shù)據(jù)在原關(guān)系型數(shù)據(jù)表中的位置信息;其次,根據(jù)待導(dǎo)出數(shù)據(jù)在原關(guān)系型數(shù)據(jù)表中的位置信息,在映射關(guān)系表中查找出待導(dǎo)出數(shù)據(jù)在HBase數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)表中相應(yīng)的位置信息;最后,按照關(guān)系映射表中定義的數(shù)據(jù)類型將待導(dǎo)出數(shù)據(jù)導(dǎo)出。
3.根據(jù)權(quán)利要求1所述一種將關(guān)系型數(shù)據(jù)遷移至HBase的方法,其特征在于,還包括當(dāng)要從HBase數(shù)據(jù)庫中查詢數(shù)據(jù)時(shí),具體實(shí)現(xiàn)如下:首先,解析所述查詢語句,提取出查詢信息,并轉(zhuǎn)換成HBase數(shù)據(jù)庫的查詢語句;其次,根據(jù)已轉(zhuǎn)換的查詢語句在映射關(guān)系表中查找待查詢數(shù)據(jù)在數(shù)據(jù)存儲(chǔ)表中的位置信息;最后,根據(jù)查詢到的位置信息,查詢數(shù)據(jù)存儲(chǔ)表中的相應(yīng)數(shù)據(jù)。
4.根據(jù)權(quán)利要求1所述一種將關(guān)系型數(shù)據(jù)遷移至HBase的方法,其特征在于,步驟2中所述映射方式為包括表映射方式和列映射方式, 所述表映射方式包括一對(duì)一 映射和多對(duì)一映射,具體體現(xiàn)在表名的映射,所述表名的映射為根據(jù)表名轉(zhuǎn)換運(yùn)算進(jìn)行映射,表名轉(zhuǎn)換運(yùn)算包括一對(duì)一哈希運(yùn)算和多對(duì)一哈希運(yùn)算; 所述列映射方式包括默認(rèn)方式、時(shí)序方式和用戶自定義方式,所述默認(rèn)方式即關(guān)系數(shù)據(jù)庫中表格內(nèi)所有列與JlBase的數(shù)據(jù)存儲(chǔ)表格的一個(gè)列簇內(nèi)的所有列對(duì)應(yīng);所述時(shí)序方式即將關(guān)系數(shù)據(jù)庫中表格內(nèi)所有時(shí)間值屬性列在HBase的數(shù)據(jù)存儲(chǔ)表中單獨(dú)定義一個(gè)列簇,該列簇包含一個(gè)列,將遷移的數(shù)據(jù)按照不同時(shí)間點(diǎn)對(duì)應(yīng)于該列不同的時(shí)間戳上;所述用戶自定義映射即根據(jù)用戶的需要進(jìn)行自定義。
5.根據(jù)權(quán)利要求4所述一種將關(guān)系型數(shù)據(jù)遷移至HBase的方法,其特征在于,步驟3中根據(jù)映射方式建立相應(yīng)的數(shù)據(jù)存儲(chǔ)表,所述數(shù)據(jù)存儲(chǔ)表中包括一個(gè)特殊的列即為行鍵列,所述行鍵列的映射方式包括單關(guān)鍵字型和多關(guān)鍵字型,所述單關(guān)鍵字型是以原關(guān)系數(shù)據(jù)庫中表格的一個(gè)列屬性直接作為行鍵,多關(guān)鍵字型是將原關(guān)系數(shù)據(jù)庫中表格的多個(gè)列屬性拼接為一個(gè)行鍵,所選列屬性、用于拼接各列屬性的連接字符或字符串,以及行鍵的排列順序由用戶自定義。
6.根據(jù)權(quán)利要求1所述一種將關(guān)系型數(shù)據(jù)遷移至HBase的方法,其特征在于,步驟4的具體實(shí)現(xiàn)包括數(shù)據(jù)讀取和數(shù)據(jù)寫入,其中數(shù)據(jù)讀取包括兩種方式,一是通過JDBC從關(guān)系數(shù)據(jù)庫中讀取數(shù)據(jù),二是通過中間文件從關(guān)系數(shù)據(jù)庫中讀取數(shù)據(jù);導(dǎo)入數(shù)據(jù)時(shí),首先在映射關(guān)系表中查找相關(guān)的映射關(guān)系,將讀取的數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制串,根據(jù)映射關(guān)系將其寫入到相應(yīng)的數(shù)據(jù)存儲(chǔ)表中。
7.一種將關(guān)系型數(shù)據(jù)遷移至HBase的系統(tǒng),其特征在于,包括一個(gè)或一個(gè)以上的關(guān)系數(shù)據(jù)庫、HBase數(shù)據(jù)庫、SQL解析模塊、查詢轉(zhuǎn)換模塊和數(shù)據(jù)模式管理模塊; 所述每個(gè)關(guān)系數(shù)據(jù)庫,其用于存儲(chǔ)關(guān)系型數(shù)據(jù),作為數(shù)據(jù)遷移的源端; 所述HBase數(shù)據(jù)庫,其用于建立映射關(guān)系表來存儲(chǔ)關(guān)系數(shù)據(jù)庫中數(shù)據(jù)表與HBase中相應(yīng)的數(shù)據(jù)存儲(chǔ)表間的映射關(guān)系,并將從關(guān)系型數(shù)據(jù)庫中遷移來的數(shù)據(jù)按照預(yù)定的映射關(guān)系存儲(chǔ)在相應(yīng)的數(shù)據(jù)存儲(chǔ)表中; 所述SQL解析模塊,其用于提供SQL查詢功能,對(duì)SQL查詢語句進(jìn)行解析,并將解析出的查詢信息傳送給查詢轉(zhuǎn)換模塊; 所述查詢轉(zhuǎn)換模塊,其用于將接收的查詢信息轉(zhuǎn)換成HBase數(shù)據(jù)庫的查詢語句,并傳送給數(shù)據(jù)模式管理模塊; 所述數(shù)據(jù)模式管理模塊,其用于在向HBase導(dǎo)入、導(dǎo)出和查詢數(shù)據(jù)時(shí),調(diào)取相應(yīng)接口,在HBase的映射關(guān)系表中查詢映射關(guān)系,為數(shù)據(jù)導(dǎo)入、導(dǎo)出和查詢提供查詢依據(jù)。
8.根據(jù)權(quán)利要求7所述一種將關(guān)系型數(shù)據(jù)遷移至HBase的系統(tǒng),其特征在于,所述預(yù)定的映射關(guān)系包括表映射方式和列映射方式, 所述表映射方式包括一對(duì)一映射和多對(duì)一映射,具體體現(xiàn)在表名的映射,所述表名的映射為根據(jù)表名轉(zhuǎn)換運(yùn)算進(jìn)行映射,表名轉(zhuǎn)換運(yùn)算包括一對(duì)一哈希運(yùn)算和多對(duì)一哈希運(yùn)算; 所述列映射方式包括默認(rèn)方式、時(shí)序方式和用戶自定義方式,所述默認(rèn)方式即關(guān)系數(shù)據(jù)庫中表格內(nèi)所有列與JlBase的數(shù)據(jù)存儲(chǔ)表格的一個(gè)列簇內(nèi)的所有列對(duì)應(yīng);所述時(shí)序方式即將關(guān)系數(shù)據(jù)庫中表格內(nèi)所有時(shí)間值屬性列在HBase的數(shù)據(jù)存儲(chǔ)表中單獨(dú)定義一個(gè)列簇,該列簇包含一個(gè)列,將遷移的數(shù)據(jù)按照不同時(shí)間點(diǎn)對(duì)應(yīng)于該列不同的時(shí)間戳上;用戶自定義映射即根據(jù)用戶的需要進(jìn)行自定義。
9.根據(jù)權(quán)利要求7所述一種將關(guān)系型數(shù)據(jù)遷移至HBase的系統(tǒng),其特征在于,所述關(guān)系數(shù)據(jù)庫提供JDBC接口以實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫中表格模式的獲取及待遷移數(shù)據(jù)的讀??;所述HBase數(shù)據(jù)庫提供接口以實(shí)現(xiàn)數(shù)據(jù)的讀寫。
10.根據(jù)權(quán)利要求7所述一種數(shù)據(jù)遷移的方法,其特征在于,所述SQL解析模塊包括語法解析單元和語義解析單元; 所述語法解析單元,其用于通過正則表達(dá)式判斷SQL查詢語句的合法性; 所述語義查詢單元,其用于提取具體的查詢信息。
11.根據(jù)權(quán)利要求7所述一種將關(guān)系型數(shù)據(jù)遷移至HBase的系統(tǒng),其特征在于,所述映射關(guān)系表包括行鍵和一個(gè)列簇,所述列簇中包括若干列,分別為tOc、TN、aNULL、DT、DL、isK、CFN, CN,TS ;其中,tOc標(biāo)識(shí)所填內(nèi)容為表信息還是列信息,TN中所填內(nèi)容為表名,aNULL標(biāo)識(shí)能否允許為空,DT標(biāo)識(shí)數(shù)據(jù)類型,DL標(biāo)識(shí)數(shù)據(jù)長(zhǎng)度,isK標(biāo)識(shí)是否主鍵,CFN標(biāo)識(shí)是否為時(shí)序映射、CN為主鍵名,TS為 時(shí)間戳方式。
【文檔編號(hào)】G06F17/30GK103631907SQ201310612192
【公開日】2014年3月12日 申請(qǐng)日期:2013年11月26日 優(yōu)先權(quán)日:2013年11月26日
【發(fā)明者】戴嬌, 文杰, 韓冀中, 周薇 申請(qǐng)人:中國科學(xué)院信息工程研究所