0] 步驟S3.根據(jù)用戶選擇的類(lèi)型,執(zhí)行相應(yīng)類(lèi)型的數(shù)據(jù)庫(kù)的建表腳本文件、外鍵腳 本文件、存儲(chǔ)過(guò)程腳本文件和靜態(tài)數(shù)據(jù)腳本文件,生成相應(yīng)類(lèi)型的數(shù)據(jù)庫(kù)。
[0031] 步驟S4.判斷用戶輸入的指令類(lèi)型,若為維護(hù)指令,則跳轉(zhuǎn)至步驟S5,若為數(shù)據(jù)庫(kù) 訪問(wèn)指令,則跳轉(zhuǎn)至步驟S6。
[0032] 步驟S5.讀取表定義文件并生成備份還原腳本文件,執(zhí)行該備份還原腳本文件, 對(duì)數(shù)據(jù)庫(kù)進(jìn)行維護(hù),結(jié)束。
[0033] 步驟S6.將各類(lèi)型的數(shù)據(jù)庫(kù)接口封裝為統(tǒng)一的數(shù)據(jù)庫(kù)統(tǒng)一接口,通過(guò)數(shù)據(jù)庫(kù)統(tǒng)一 接口調(diào)用相應(yīng)類(lèi)型的接口實(shí)現(xiàn)函數(shù),對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)并返回執(zhí)行結(jié)果,結(jié)束。
[0034] 上述表定義文件包括表集合定義項(xiàng)(tables)、表外鍵集合定義項(xiàng)(relationship) 和數(shù)據(jù)庫(kù)類(lèi)型附加項(xiàng)(maintainoption);表集合定義項(xiàng)包括多個(gè)表項(xiàng)(table),用于表示 表的定義,每個(gè)表項(xiàng)包含表名稱(chēng)項(xiàng)(name)、表列集合定義項(xiàng)(columns)、表索引集合定義項(xiàng) (keys)和表附加項(xiàng)(phyoptions);優(yōu)選的,需要分表的表項(xiàng)還包含有分表項(xiàng)(splitinfo), 用于記錄分表的規(guī)則信息。其中,表列集合定義項(xiàng)包括多個(gè)列項(xiàng)(col),用于表示表的列 定義,每個(gè)列項(xiàng)包含列名稱(chēng)項(xiàng)(name)、列類(lèi)型項(xiàng)(type)和列默認(rèn)值項(xiàng)(notnull);表索 引集合定義項(xiàng)包括多個(gè)表索引定義項(xiàng)(key),用于表示表的索引定義,每個(gè)表索引定義項(xiàng) 包含索引鍵名稱(chēng)項(xiàng)(name)、索引列名稱(chēng)項(xiàng)(colname)、索引類(lèi)型項(xiàng)(type)和默認(rèn)排序項(xiàng) (order);表附加項(xiàng)用于記錄不同類(lèi)型表的物理屬性;表外鍵集合定義項(xiàng)包括多個(gè)表外鍵 定義項(xiàng)(relationship),用于表示各表之間的外鍵關(guān)聯(lián)信息,每個(gè)表外鍵定義項(xiàng)包含表 外鍵名稱(chēng)項(xiàng)(name)、父表項(xiàng)(parent table)、子表項(xiàng)(child table)和外鍵刪除規(guī)則項(xiàng) (delcascade);數(shù)據(jù)庫(kù)類(lèi)型附加項(xiàng)用于表示待維護(hù)的表,包括表名稱(chēng)列表項(xiàng)(tablelist) 和維護(hù)版本項(xiàng)(version)。具體的,表定義文件的格式如下:
[0035]
[0036]
[0037] 參見(jiàn)圖2所示,步驟S2中,生成建表腳本文件的具體流程為:
[0038] S211.讀取表定義文件,獲取表集合定義項(xiàng)中相應(yīng)的表項(xiàng)。
[0039] S212.解析表名稱(chēng)項(xiàng),獲取表名稱(chēng)。若該表項(xiàng)存在分表,則讀取分表項(xiàng),獲取分表信 息。
[0040] S213.解析表列集合定義項(xiàng),讀取各列項(xiàng)的列名稱(chēng)、列類(lèi)型和列默認(rèn)值,直至所有 列項(xiàng)的信息讀取完畢。
[0041] S214.解析表索引集合定義項(xiàng),讀取各表索引定義項(xiàng)的索引鍵名稱(chēng)、索引列名稱(chēng)、 索引類(lèi)型和默認(rèn)排序(默認(rèn)升序排序),直至所有表索引定義項(xiàng)的信息讀取完畢。
[0042] S215.解析表附加項(xiàng),讀取相應(yīng)類(lèi)型表的物理屬性。
[0043] S216.根據(jù)上述讀取的信息,生成建表腳本文件。
[0044] S217.判斷是否存在未讀取的表項(xiàng),若是,跳轉(zhuǎn)至步驟211 ;否則,結(jié)束流程。
[0045] 對(duì)于行式數(shù)據(jù)庫(kù),可以采用SQL語(yǔ)句進(jìn)行表的創(chuàng)建;列式數(shù)據(jù)庫(kù)可以采用DBISQL 的語(yǔ)言進(jìn)行建表;而分布式數(shù)據(jù)庫(kù)不支持SQL標(biāo)準(zhǔn),需要使用建表語(yǔ)法。
[0046] 參見(jiàn)圖3所示,步驟S2中,生成外鍵腳本文件的具體流程為:
[0047] S221.讀取表定義文件,獲取表集合定義項(xiàng)中相應(yīng)的表項(xiàng)。
[0048] S222.解析表外鍵集合定義項(xiàng),讀取各表外鍵定義項(xiàng)的外鍵名稱(chēng)、父表、子表和外 鍵刪除規(guī)則。
[0049] S223.根據(jù)上述讀取的信息,生成外鍵腳本文件。
[0050] 參見(jiàn)圖4所示,步驟S5的具體流程為:
[0051] 步驟S51.讀取表定義文件并生成備份還原腳本文件。
[0052] 步驟S52.判斷維護(hù)指令的類(lèi)型,若為還原指令,則跳轉(zhuǎn)至步驟S53 ;若為備份指 令,則跳轉(zhuǎn)至步驟S56。
[0053] 步驟S53.定位網(wǎng)管配置目錄并選擇相應(yīng)的配置備份文件;跳轉(zhuǎn)至步驟S54。
[0054] 步驟S54.將配置備份文件使用解壓UNZIP腳本解壓到本地目錄;跳轉(zhuǎn)至步驟 S55〇
[0055] 步驟S55.執(zhí)行備份還原腳本文件,對(duì)配置備份文件進(jìn)行數(shù)據(jù)還原,結(jié)束。
[0056] 步驟S56.執(zhí)行備份還原腳本文件,生成數(shù)據(jù)文件;跳轉(zhuǎn)至步驟S57。
[0057] 步驟S57.導(dǎo)出數(shù)據(jù)文件到指定的目錄,并使用壓縮ZIP腳本壓縮成備份文件;跳 轉(zhuǎn)至步驟S58。
[0058] 步驟S58.將備份文件輸出到本地備份目錄或者上傳到FTP服務(wù)器,結(jié)束。
[0059] 行式數(shù)據(jù)庫(kù)可以采用傳統(tǒng)的導(dǎo)入導(dǎo)出方法,例如MySQL的Load方法。
[0060] 列式數(shù)據(jù)庫(kù)采用DBISQL的導(dǎo)入導(dǎo)出方式,從外部文件中按照特定的列分隔符與 行分隔符將靜態(tài)數(shù)據(jù)導(dǎo)入表中,其命令如下:
[0061] LOAD TABLE t_test
[0062] (ctestl'l,,
[0063] ctest2, I,,
[0064] ctest3' xOa'
[0065] )
[0066] FROM'D:/t_test. uni'
[0067] ESCAPES OFF
[0068] QUOTES Off
[0069] WITH CHECKPOINT ON ;
[0070] COMMIT ;
[0071] 而分布式數(shù)據(jù)庫(kù)不支持SQL標(biāo)準(zhǔn),需要使用特有的導(dǎo)入導(dǎo)出語(yǔ)法,將外部文件列 表的數(shù)據(jù)按照特定的列分隔符與行分隔符導(dǎo)入對(duì)應(yīng)的表中,其命令如下:
[0072] Hadoopjar /usr/lib/hbase/hbase. jar importtsv-Dimporttsv. bulk, output = /t_test/output -Dimporttsv. separator = -Dimporttsv. columns =HBASE_R0ff_KEY, f:ctest2, f:ctest3t_test/t_test
[0073] hadoop jar/usr/lib/hbase/hbase. jar completebulkload/t_test/output t_ test
[0074] 參見(jiàn)圖5所示,步驟S51的具體流程為:
[0075] 步驟S511.解析表定義文件,讀取數(shù)據(jù)庫(kù)類(lèi)型附加項(xiàng)的表名稱(chēng)列表和維護(hù)版本。
[0076] 步驟S512.根據(jù)上述讀取的信息,生成備份還原腳本文件。
[0077] 參見(jiàn)圖6所示,步驟S6的具體流程為:
[0078] 步驟S61.將各類(lèi)型的數(shù)據(jù)庫(kù)接口封裝為統(tǒng)一的數(shù)據(jù)庫(kù)統(tǒng)一接口。
[0079] 步驟S62.上層應(yīng)用調(diào)用封裝的數(shù)據(jù)庫(kù)統(tǒng)一接口;上層應(yīng)用是指應(yīng)用數(shù)據(jù)庫(kù)進(jìn)行 存儲(chǔ)并調(diào)用數(shù)據(jù)庫(kù)接口獲取數(shù)據(jù)的應(yīng)用系統(tǒng),例如網(wǎng)絡(luò)管理系統(tǒng)、金融管理系統(tǒng)等。對(duì)于行 式數(shù)據(jù)庫(kù)來(lái)說(shuō),標(biāo)準(zhǔn)的SQL語(yǔ)法可以滿足,如插入數(shù)據(jù),通常使用INSERT INTO TABLE語(yǔ)法 實(shí)現(xiàn),列式數(shù)據(jù)庫(kù)一般也支持SQL標(biāo)準(zhǔn),因此也可以通過(guò)INSERT語(yǔ)法實(shí)現(xiàn)數(shù)據(jù)插入,但是對(duì) 于分布式數(shù)據(jù)庫(kù)(HBase)而言,本身并不支持標(biāo)準(zhǔn)SQL語(yǔ)法,插入數(shù)據(jù)需要使用自身特殊語(yǔ) 法實(shí)現(xiàn),HBase需要依賴(lài)第三方的接口來(lái)實(shí)現(xiàn)數(shù)據(jù)插入。
[0080] 步驟S63.數(shù)據(jù)庫(kù)統(tǒng)一接口根據(jù)不同類(lèi)型的數(shù)據(jù)庫(kù),調(diào)用相應(yīng)的接口實(shí)現(xiàn)函數(shù);行 式數(shù)據(jù)庫(kù)可以采用基于SQLAPI的編程實(shí)現(xiàn)接口的統(tǒng)一;列式數(shù)據(jù)庫(kù)需要使用自身的API實(shí) 現(xiàn)接口的統(tǒng)一;而分布式數(shù)據(jù)庫(kù)由于不支持C++,需要采用Thrift C++編程實(shí)現(xiàn)接口或者 基于HIVE的ODBC封裝,以實(shí)現(xiàn)接口的統(tǒng)一。例如,行式數(shù)據(jù)庫(kù)(MySQL)可以使用中間件庫(kù) SQLAPI++來(lái)實(shí)現(xiàn)使用C++語(yǔ)言訪問(wèn)數(shù)據(jù)庫(kù),列式數(shù)據(jù)庫(kù)(SybaseIQ),由各數(shù)據(jù)庫(kù)廠商提供 的C++API來(lái)訪問(wèn)數(shù)據(jù)庫(kù),考慮到編碼的成本并鑒于當(dāng)前的SQLAPI++最新版本已經(jīng)支持了 SybaseIQ的客戶端,因此從編碼的一致性上考慮,可以統(tǒng)一使用SQLAPI++庫(kù)進(jìn)行數(shù)據(jù)庫(kù)訪 問(wèn),分布式數(shù)據(jù)庫(kù)(HBase)本身不支持C++語(yǔ)言的直接訪問(wèn),但是提供了 Thrift Server ( - 種可伸縮的跨語(yǔ)言服務(wù)的發(fā)展軟件框架)方式來(lái)運(yùn)行使用其它語(yǔ)言進(jìn)行數(shù)據(jù)