王靜
摘 要:針對(duì)目前《全國(guó)報(bào)刊索引》底層異構(gòu)數(shù)據(jù)庫(kù)之間數(shù)據(jù)交換存在的問(wèn)題,提出了異構(gòu)數(shù)據(jù)庫(kù)SQLServer到Oracle之間數(shù)據(jù)交換的設(shè)計(jì)模型,并基于設(shè)計(jì)模型開(kāi)發(fā)實(shí)現(xiàn)了這兩個(gè)數(shù)據(jù)庫(kù)之間的數(shù)據(jù)轉(zhuǎn)換工具,設(shè)計(jì)了Groovy動(dòng)態(tài)語(yǔ)言腳本引擎,支持?jǐn)?shù)據(jù)遷移轉(zhuǎn)換和數(shù)據(jù)合并轉(zhuǎn)換;建立了版本控制模式,便于描述數(shù)據(jù)交換的狀態(tài)和管理數(shù)據(jù)的安全。該工具滿(mǎn)足了《全國(guó)報(bào)刊索引》平臺(tái)數(shù)據(jù)的日益增長(zhǎng)的數(shù)據(jù)交換需求。
關(guān)鍵詞:異構(gòu)數(shù)據(jù)庫(kù) 數(shù)據(jù)轉(zhuǎn)換工具 動(dòng)態(tài)語(yǔ)言腳本引擎
中圖分類(lèi)號(hào):TP31 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2018)02(b)-0014-03
《全國(guó)報(bào)刊索引》數(shù)據(jù)庫(kù)始建于1993年,涵蓋了多種類(lèi)型的報(bào)紙期刊數(shù)據(jù)庫(kù)產(chǎn)品。如晚清全文數(shù)據(jù)庫(kù)、民國(guó)時(shí)期期刊全文數(shù)據(jù)庫(kù)、各類(lèi)報(bào)紙數(shù)據(jù)庫(kù)、現(xiàn)刊索引數(shù)據(jù)庫(kù)和專(zhuān)題數(shù)據(jù)庫(kù)等?!度珖?guó)報(bào)刊索引》收錄的數(shù)據(jù)最早可回溯至1833年,至今已累計(jì)收錄報(bào)刊20000余種、文獻(xiàn)3000多萬(wàn)篇,年更新數(shù)據(jù)量超過(guò)350萬(wàn)條。
從最早的光盤(pán)版到現(xiàn)今的SQL Server、Access、Oracle等多種的數(shù)據(jù)庫(kù)管理系統(tǒng)被應(yīng)用。這些數(shù)據(jù)庫(kù)管理系統(tǒng)相互之間存在許多物理和邏輯上的差異,盡管其本身都具有數(shù)據(jù)導(dǎo)入和導(dǎo)出功能,但這些功能還不能夠滿(mǎn)足平臺(tái)日益增長(zhǎng)的數(shù)據(jù)交換需求。為了滿(mǎn)足期刊全文檢索上線(xiàn)的需求,提升檢索速度和效率,數(shù)據(jù)庫(kù)管理系統(tǒng)從SQL Server升級(jí)到Oracle。SQL Server到Oracle數(shù)據(jù)轉(zhuǎn)換,不是簡(jiǎn)單字段對(duì)應(yīng)的遷移轉(zhuǎn)換,需要進(jìn)行字段計(jì)算、內(nèi)容合并、日期處理、簡(jiǎn)繁轉(zhuǎn)換等多種轉(zhuǎn)換,這就需要設(shè)計(jì)專(zhuān)門(mén)的工具來(lái)進(jìn)行復(fù)雜的數(shù)據(jù)轉(zhuǎn)換。
1 數(shù)據(jù)轉(zhuǎn)換設(shè)計(jì)
根據(jù)異構(gòu)數(shù)據(jù)庫(kù)數(shù)據(jù)轉(zhuǎn)換工具的設(shè)計(jì)總體目標(biāo),將該工具分為如下的幾個(gè)部分:數(shù)據(jù)讀取、轉(zhuǎn)換規(guī)則、數(shù)據(jù)寫(xiě)入、操作界面、版本管理。
數(shù)據(jù)讀取負(fù)責(zé)分析源數(shù)據(jù)庫(kù)中鏈接信息,源數(shù)據(jù)表Excel的數(shù)據(jù)框架結(jié)構(gòu)和數(shù)據(jù)的讀取。
(1)轉(zhuǎn)換規(guī)則控制源數(shù)據(jù)和目的數(shù)據(jù)之間的轉(zhuǎn)換,根據(jù)制定的轉(zhuǎn)換規(guī)則得出需要某些源數(shù)據(jù)字段進(jìn)行日期、簡(jiǎn)繁或格式的轉(zhuǎn)換。
(2)數(shù)據(jù)寫(xiě)入負(fù)責(zé)將進(jìn)行轉(zhuǎn)換后的源數(shù)據(jù)寫(xiě)入目的數(shù)據(jù)庫(kù)。
(3)操作界面為用戶(hù)提供一個(gè)可交互的界面進(jìn)行操作。
(4)版本管理負(fù)責(zé)對(duì)任務(wù)版本進(jìn)行管理。
工具的總體流程圖如圖1所示。
1.1 數(shù)據(jù)讀取
數(shù)據(jù)讀取,先讀取源數(shù)據(jù)庫(kù)的信息:源數(shù)據(jù)庫(kù)的類(lèi)型、數(shù)據(jù)庫(kù)連接的方式、連接的配置、源數(shù)據(jù)庫(kù)地址、源數(shù)據(jù)庫(kù)用戶(hù)名及源數(shù)據(jù)庫(kù)密碼。
通過(guò)數(shù)據(jù)庫(kù)驅(qū)動(dòng)讀取數(shù)據(jù)到內(nèi)存中,與源數(shù)據(jù)庫(kù)取得連接。
1.2 轉(zhuǎn)換規(guī)則
轉(zhuǎn)換規(guī)則,轉(zhuǎn)換規(guī)則保存在Excel數(shù)據(jù)框架中。將源SQL SERVER數(shù)據(jù)庫(kù)中的數(shù)據(jù)轉(zhuǎn)換成符合要求及目的ORACLE數(shù)據(jù)庫(kù)要求的數(shù)據(jù)格式,有以下的幾種轉(zhuǎn)換。
1.2.1 數(shù)據(jù)類(lèi)型的轉(zhuǎn)換
在不同的數(shù)據(jù)庫(kù)中由于數(shù)據(jù)類(lèi)型的不一樣,需要進(jìn)行轉(zhuǎn)換,如SQL SERVER數(shù)據(jù)庫(kù)中有布爾類(lèi)型,而ORACLE數(shù)據(jù)庫(kù)中沒(méi)有布爾類(lèi)型,這就需要在設(shè)置的時(shí)候進(jìn)行定義,在轉(zhuǎn)換的時(shí)候按定義進(jìn)行轉(zhuǎn)換。
1.2.2 日期格式轉(zhuǎn)換
由于兩個(gè)數(shù)據(jù)庫(kù)的日期定義格式不同,在一個(gè)數(shù)據(jù)庫(kù)中定義的日期數(shù)據(jù)格式在另一個(gè)數(shù)據(jù)庫(kù)中需要重新定義。所以,在轉(zhuǎn)換過(guò)程中對(duì)日期字段需要進(jìn)行特殊轉(zhuǎn)換處理。
1.2.3 簡(jiǎn)繁轉(zhuǎn)換
由于《全國(guó)報(bào)刊索引》平臺(tái)包含大量的民國(guó)期刊和報(bào)紙數(shù)據(jù),這些數(shù)據(jù)有一定的特殊性:題名、作者、出版地等字段檢索既需要提供簡(jiǎn)體檢索又需要提供繁體檢索。需對(duì)字段進(jìn)行簡(jiǎn)繁轉(zhuǎn)換處理。
1.3 數(shù)據(jù)寫(xiě)入
數(shù)據(jù)寫(xiě)入是將轉(zhuǎn)換過(guò)的數(shù)據(jù)寫(xiě)入目的數(shù)據(jù)庫(kù),首先讀取目的數(shù)據(jù)庫(kù)的信息,如目的數(shù)據(jù)的類(lèi)型、數(shù)據(jù)連接的方式、數(shù)據(jù)庫(kù)連接的配置、目的數(shù)據(jù)庫(kù)地址、目的數(shù)據(jù)庫(kù)用戶(hù)名及目的數(shù)據(jù)庫(kù)密碼、數(shù)據(jù)來(lái)源類(lèi)型、數(shù)據(jù)字段信息。
根據(jù)數(shù)據(jù)庫(kù)的連接信息連接目的數(shù)據(jù)庫(kù),通過(guò)數(shù)據(jù)庫(kù)驅(qū)動(dòng)寫(xiě)入數(shù)據(jù)到目的數(shù)據(jù)庫(kù)中。寫(xiě)入方式設(shè)計(jì)為兩種選擇:一種是只插入數(shù)據(jù);另一種是跳過(guò)錯(cuò)誤,最終呈現(xiàn)錯(cuò)誤清單。
1.4 操作界面
操作界面為用戶(hù)提供一個(gè)可交互的界面來(lái)進(jìn)行數(shù)據(jù)轉(zhuǎn)換的操作。
1.4.1 源數(shù)據(jù)庫(kù)信息主要是記錄源數(shù)據(jù)庫(kù)的一些配置參數(shù)及數(shù)據(jù)來(lái)源
源數(shù)據(jù)的類(lèi)型、數(shù)據(jù)連接的方式、數(shù)據(jù)庫(kù)連接的配置、源數(shù)據(jù)庫(kù)地址、源數(shù)據(jù)庫(kù)用戶(hù)名及密碼和源數(shù)據(jù)字段信息。
1.4.2 目的數(shù)據(jù)庫(kù)信息主要是記錄目的數(shù)據(jù)庫(kù)的配置參數(shù)
目的數(shù)據(jù)的類(lèi)型、數(shù)據(jù)連接的方式、數(shù)據(jù)庫(kù)連接的配置、目的數(shù)據(jù)庫(kù)地址、目的數(shù)據(jù)庫(kù)用戶(hù)名及密碼、目的數(shù)據(jù)字段信息和寫(xiě)入方式。
1.4.3 數(shù)據(jù)規(guī)則
數(shù)據(jù)規(guī)則是源數(shù)據(jù)和目的數(shù)據(jù)之間的對(duì)應(yīng)關(guān)系和轉(zhuǎn)換規(guī)則。轉(zhuǎn)換設(shè)計(jì)任務(wù)在提取的基礎(chǔ)上讀取Excel數(shù)據(jù)框架,即源數(shù)據(jù)庫(kù)和目的數(shù)據(jù)庫(kù)建立的映射表得到源數(shù)據(jù)字段和目的數(shù)據(jù)字段的轉(zhuǎn)換對(duì)應(yīng)類(lèi)型。
1.5 轉(zhuǎn)換任務(wù)管理
版本管理負(fù)責(zé)轉(zhuǎn)換任務(wù)的管理和保存,轉(zhuǎn)換任務(wù)時(shí),建立版本控制機(jī)制,版本控制機(jī)制包含版本類(lèi)型、版本號(hào)、描述、啟用狀態(tài)、創(chuàng)建時(shí)間、創(chuàng)建人、修改時(shí)間和修改人。兩種版本類(lèi)型,即新版本和修改版本。新版本建立時(shí)要新創(chuàng)建一個(gè)版本號(hào),命名,描述數(shù)據(jù)處理的任務(wù)。修改版本建立時(shí)要選擇你要修改的版本號(hào),在原有命名的基礎(chǔ)上,附加命名,描述數(shù)據(jù)修改的任務(wù)。
2 轉(zhuǎn)換工具的實(shí)現(xiàn)
2.1 數(shù)據(jù)讀取實(shí)現(xiàn)
源數(shù)據(jù)庫(kù)的類(lèi)型是SQL SERVER數(shù)據(jù)庫(kù)。通過(guò)JDBC鏈接SQL SERVER和ORACLE。JDBC數(shù)據(jù)庫(kù)連接參數(shù)使用字符串的形式,其中包含著數(shù)據(jù)庫(kù)地址、用戶(hù)名、密碼、源數(shù)據(jù)的表名等需要的信息,數(shù)據(jù)框架中的SQL查詢(xún)語(yǔ)句。
2.2 轉(zhuǎn)換規(guī)則實(shí)現(xiàn)
源數(shù)據(jù)和目的數(shù)據(jù)的轉(zhuǎn)換對(duì)應(yīng)關(guān)系保存在Excel數(shù)據(jù)框架中,分別是元數(shù)據(jù)表和規(guī)則表Rule。
(1)元數(shù)據(jù)表中記錄源數(shù)據(jù)的字段信息主要有表名、字段名、簡(jiǎn)繁中文名稱(chēng)、字段分類(lèi)、數(shù)據(jù)類(lèi)型和數(shù)據(jù)長(zhǎng)度。
(2)規(guī)則表中記錄源數(shù)據(jù)和目的數(shù)據(jù)的字段對(duì)應(yīng)關(guān)系及表達(dá)式。
2.3 數(shù)據(jù)寫(xiě)入實(shí)現(xiàn)
轉(zhuǎn)換任務(wù)中的源數(shù)據(jù)信息相關(guān)字段定義如下:數(shù)據(jù)庫(kù)的連接類(lèi)型,JDBC連接支持SQL Server和Oracle數(shù)據(jù)庫(kù)之間的連接。目的數(shù)據(jù)庫(kù)的連接字符串,JDBC的數(shù)據(jù)庫(kù)連接參數(shù)使用字符串的形式,其中包含著數(shù)據(jù)庫(kù)地址、用戶(hù)名、密碼、目的數(shù)據(jù)庫(kù)表名等需要的信息。
2.4 操作界面
數(shù)據(jù)操作界面,提供一個(gè)可交互的界面方便用戶(hù)進(jìn)行數(shù)據(jù)轉(zhuǎn)換處理。
(1)填寫(xiě)平臺(tái)URL路徑。
(2)填寫(xiě)用戶(hù)名和密碼。
(3)填寫(xiě)版本說(shuō)明,新版本或者版本修訂。新導(dǎo)入數(shù)據(jù)選擇“新版本”,修改數(shù)據(jù)選擇“版本修訂”。
(4)選取數(shù)據(jù)規(guī)則和建立數(shù)據(jù)任務(wù)。
選擇數(shù)據(jù)源的JDBC鏈接,填寫(xiě)用戶(hù)名和密碼,選擇“連通測(cè)試”。若JDBC鏈接測(cè)試通過(guò),則選取數(shù)據(jù)規(guī)則和轉(zhuǎn)換任務(wù),進(jìn)行數(shù)據(jù)轉(zhuǎn)換。
3 結(jié)語(yǔ)
本研究針對(duì)《全國(guó)報(bào)刊索引》平臺(tái)底層的SQL Server數(shù)據(jù)庫(kù)和Oracle數(shù)據(jù)庫(kù)之間的數(shù)據(jù)轉(zhuǎn)換進(jìn)行探討,設(shè)計(jì)了數(shù)據(jù)轉(zhuǎn)換工具,按照數(shù)據(jù)轉(zhuǎn)換的需求制定了數(shù)據(jù)規(guī)則,數(shù)據(jù)處理人員只需根據(jù)每次要處理數(shù)據(jù)集不同來(lái)設(shè)計(jì)數(shù)據(jù)任務(wù),通過(guò)工具實(shí)現(xiàn)了數(shù)據(jù)導(dǎo)入和轉(zhuǎn)換功能,解決異構(gòu)數(shù)據(jù)庫(kù)間數(shù)據(jù)交換問(wèn)題。
該工具已投入《全國(guó)報(bào)刊索引》平臺(tái)的底層異構(gòu)數(shù)據(jù)庫(kù)數(shù)據(jù)處理中使用,運(yùn)行情況良好,達(dá)到了預(yù)期的效果。運(yùn)行結(jié)果表明,該工具能實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫(kù)的數(shù)據(jù)轉(zhuǎn)換功能,界面友好,數(shù)據(jù)轉(zhuǎn)換準(zhǔn)確高效。
參考文獻(xiàn)
[1] 王曉雯,孫承愛(ài),周春露.基于元數(shù)據(jù)映射機(jī)制的異構(gòu)數(shù)據(jù)操作[J].軟件導(dǎo)刊,2015(1):146-148.
[2] 余偉,李石君.Web大數(shù)據(jù)環(huán)境下的不一致跨源數(shù)據(jù)發(fā)現(xiàn)[J].計(jì)算機(jī)研究與發(fā)展,2015,52(2):295-308.
[3] 王洪榮,吳寶國(guó).異構(gòu)數(shù)據(jù)庫(kù)中數(shù)據(jù)交換工具的設(shè)計(jì)與實(shí)現(xiàn)[J].北京林業(yè)大學(xué)學(xué)報(bào),2009(11):102-104.