摘 要: 針對實際工作環境中數據文件格式繁多,結構與標準不統一,與既定數據庫之間互轉化難的問題,提出了一種通用的、新型的結構化數據與關系數據庫互轉化的思路,并從理論和結構上對該思路進行了構思與設計,形成了一套新的能夠支持多種文件格式的結構化數據文件到指定關系數據庫的全自動互轉化軟件系統,并利用軟件復用等思想和技術在當前已有的可靠工程組件基礎上,以Java Web開發技術對模塊進行了初步實現,取得了較好的預期效果,為今后解決類似異樣數據互轉化問題提供了思路和途徑,在工程實現上也具有一定參考與借鑒價值。
關鍵詞: 結構化數據;數據轉化;關系數據庫;軟件設計
實際工作中記錄數據的數據格式及文件多種多樣,這些多樣性在給用戶提供了較多的選擇自由時,也潛在的帶來了差異與統一的問題。在現實的生活與工作中,最典型的便是多種結構化數據文件統一化的困難。
大多數與數據庫相關的數據遷移及轉化研究都關注于數據庫系統或信息系統后臺控制方面,比如參考文獻[1][2][3][4]討論的是企業數據庫后臺遷移方面的問題;也有文獻討論了諸如XML之類更結構化數據向數據庫轉化和遷移的問題,比如參考文獻[5][6][7];也有一些關注于通用或專用數據庫遷移或轉化中間件研究,比如參考文獻[8][9][10]。但他們的目標基本都在實現數據庫后臺管理和減輕DBA的負擔,而不是把目標指向一線的數據錄入業務人員。
然而在實際工作中,一線人員面臨著很大的異種數據錄入困難問題。由于地區差異、個人差異、單位差異和信息化軟件更迭差異等導致本來應該是同一數據結構和格式的數據經過諸多差異影響后,出現了統一難或難統一的問題,給工作人員帶來了新的矛盾和工作難度。比如,在參與某地區的審計系統信息化培訓時發現,這些數據操作員平時用的軟件可能是微軟的Excel2003、Excel2007、Excel2010,也可能是Access2003、Access2007、Access2010,也有些選擇Sqlserver系列,也有的選擇Orical系列,甚至有些農村、偏遠地區和少數民族地區計算機操作能力較低的人員使用word或TXT格式的純文本文件來記錄數據。而他們處理的本是同一格式審計數據,卻出現了不同格式和版本的數據文件,導致最終的匯總難度很大。
另外,在諸如學校、機關單位、企業或商業系統的網站或管理信息系統中,也面臨類似問題。系統要求用戶按照規定的格式輸入大量的業務數據。而這些數據此前可能因個人喜好問題以不同的格式和文件類型存在于用戶本地機器上。當要輸入時,用戶首先會期盼系統能夠批量處理;其次期望系統能夠處理的文件格式是當前的數據文件格式。這種依賴于個人需求的期望和系統單一或有限支持功能形成了明顯矛盾,而矛盾的根源就是數據文件的多樣性和不統一。
在百度搜索中以“數據庫數據轉換”,“數據文件轉化為數據庫”之類的關鍵字進行搜索,可以找到數量巨大的與終端用戶數據輸入工作有關的提問、帖子和文章,這反映了在現實工作中一線用戶所面臨的諸多問題,恰如前面所分析。
其實正是選擇的多樣性導致了記錄數據的文件類型多樣、格式不統一等現象,進而使得許多在業務上需要綜合和匯總的數據文件因格式和文件類型差異而無法合并或難于合并的尷尬現象出現。
本文所述內容正是為了解決這類問題而進行的一些研究和開發工作及成果。
1 問題的解決思路
解決實際工作中所產生的不同格式、結構和文件類型的統一化問題顯得很急迫和重要。如何解決這個問題,大體上可分為兩類思路。
?。?)對用戶的政策化管理方式
即利用行政文件或命令的形式,要求所有用戶采用某種統一格式或規范對數據進行處理與存儲,保障數據格式和文件類型的統一。
優點:對信息系統的技術依賴性較低,對原系統或指定系統需要少了甚至不需要改動,系統改造成本低。
缺點:行政性過強,導致用戶需要改變或學習指定的數據文件處理技術,有一定的行政命令執行時間段,同時還需要一定時間的統一化培訓和學習時間,從行政命令下發到系統可用的時間間隔較大;行政管理成本大、人工成本高、用戶體驗度較低,系統可擴展性較弱。
?。?)對系統進行技術升級或改進
升級(或設計和開發)可支持多種數據文件處理功能的新系統,使系統可以自動對現有的異種數據文件進行正確處理與存儲的能力,從而保障數據格式和文件類型的一致性。
優點:系統一旦升級或開發完成,在不是很長的部署周期后,系統即可投入使用,部署距離實用時間較短;系統自動進行異種類型數據文件的統一化處理,各終端用戶不需考慮學習新軟件或數據文件處理技術,用戶體驗度較高;對行政依賴相對較小,管理成本相對較低;系統可擴展性較強。
缺點:對信息技術依賴程度相對較高,需要投入一定的開發成本,并組織工程技術隊伍對原有系統進行升級,或重新設計開發新系統;需要一定的開發周期。
2 軟件模塊結構的設計
根據業務實際需求,采取了第(2)種思路的方式。首先查閱了與主題有關的許多文獻資料,有一些從軟件結構上做了一些研究工作,如參考文獻[2][8][10],但重點不是面向用戶數據服務;也已經有一些如參考文獻[11][12][13]用來實現一些指定文件向數據庫的轉化,然而這些文獻僅僅從編程角度對問題進行了說明,在軟件的架構設計和軟件工程的層面上,卻鮮有較系統和規范的設計與實現見于報道。
鑒于此,根據數據轉化的需求,本文設計和實現了一種能夠自動轉化軟件的結構。
2.1 轉化軟件模塊的總體結構
根據實際業務需求設計出整個數據處理概念模型如圖1所示。在該概念模型中,可以看到,對于可支持的多種類型的數據文件,比如Excel系列、TXT文件、Access系列、MySQL等類型,經期望的“數據統一化綜合處理模塊”處理后,可以轉化為某指定后臺數據庫中的標準形式,從而達到了自動標準化與統一化的目地。整個模型中“數據統一化綜合處理模塊”是核心,也是系統要解決的重點問題,依據此要設計出期望的軟件模塊。
圖2所述模塊通過統一化處理接口接收或發送用戶數據,通過圖中數據操作處理模塊與數據庫進行互操作。比如用戶經過web界面將數據文件提交于處理模塊,模塊中異種數據文件統一化處理接口根據文件類型將文件選擇性的傳遞給對應的文件處理引擎。經專門的引擎處理后,形成相對統一化的數據,然后將這些數據再寫入到統一的數據庫中去,從而最終形成統一標準的結構化數據信息。
以用戶提交一個TXT文本最終系統轉化成MySQL數據庫數據為例。這個過程如下:
用戶通過UI(比如web頁面形式)提交文件→“異種數據文件統一接口”進行預處理和選擇對應引擎→對應“引擎”進行轉化分析與處理→“數據庫操作處理模塊”實現與數據庫的互操作。用戶下載的過程與此相反,不再贅述。
3 軟件模塊的設計與實現
本文采用基于Java的Web系統開發技術,平臺采用Java2SE、eclipse、dreamweaver8.0作為開發平臺,以resin3.1.9為Web服務器運行平臺,后臺數據庫采用。因此,在模塊的實現中,所要解決的就是其他類型的數據文件與MySQL數據庫的互轉化問題。
3.1 TXT與MySQL的互轉化
利用從后臺數據庫讀取數據后,經處理然后生成TXT文件,再將該文件傳送到客戶端。為了解決TXT與MySQL的相互轉化,對TXT文本的格式做了要求,第一行表示表頭,其他每一行代表一條記錄,每個字段使用制表符(Tab)隔開,如圖3所示。
這樣就可以利用Java操縱本地文件的功能,方便地根據制表符Tab和回車換行符(\r\n)來讀取TXT文件中的每一行記錄和每一個記錄字段。再順利讀取了表頭后,就可以形成用于執行數據庫插入的PrepareStatement對象,然后再逐行讀入每行的各字段形成Preparestatement對象的執行參數,然后通過exceute函數執行,從而實現寫入數據庫的目的。
從數據庫向TXT文本轉化時,先利用JDBC從數據庫中讀出記錄,在利用java的本地文件讀寫功能,以格式化的形式向文件中寫入每一個記錄。以上圖所示為例,具體寫入語句格式為:
“工號”字段值+“\t”+“姓名”字段值+“\t”+“出生日期”字段值+“\t”+“職務”字段值+“\t”+“部門”字段值+“\r\n”
對應數據視圖讀寫完畢后,將形成一個載有所有記錄數據的TXT文檔,將此文檔再利用遠程下載方式傳送到客戶端,從而實現MySQL數據庫向TXT文本的轉化功能。
3.2 Excel 2003與MySQL的互轉化
利用類似TXT文件處理的思路,加入對Excel進行針對性操作的功能,可以將后臺數據庫中所生成視圖中數據按照順序和結構依次寫入到所生成Excel文件的對應單元格中,主要以Excel2003為基礎進行試驗。為了提高開發效率和降低成本,采取了在Jakarta的POI基礎上來進行二次開發的策略。具體過程是在工程中引入“poi.jar”包,在此基礎上開發出讀寫Excel文件中數據的應用模塊,并結合JDBC,實現后臺數據庫與Excel文件之間的相互自動轉化技術。
整個業務處理流程如圖4所示,其原理與3.1中TXT文檔的處理相似,除處理的文件類型不同外,主要是流程中間引入了用于精細化操作Excel的POI模塊。
為實現Aceess與MySQL的相互轉化,創建了一個類DB_Tran_MySQL_Access,在該類中用Java JDBC操縱MySQL,利用JDBC-ODBC橋操縱Access,然后根據業務需求利用Java代碼實現二者轉化,部分核心代碼如下:
//連接源數據庫
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection connAccess=
DriverManager.getConnection(
"jdbc:odbc:target","","");Statement stmt=connAccess.createStatement();ResultSet rs=stmt.executeQuery("select* from employee");
//連接目標數據庫
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://127.0.0.1:3306/test"
+"?characterSetResults=GBK";
Connection connMySQL=
DriverManager.getConnection(
url,"tester","pass123");
//執行記錄的轉移
PreparedStatement pstmt=
connMySQL.prepareStatement(
"insert into employee(id,name,department,salary)
values(?,?,?,?)");
while(rs.next()){//循環裝入數據
pstmt.setInt(1,rs.getInt("id"));pstmt.setString(2,rs.getString("name"));
pstmt.setString(3,rs.getString("department"));
pstmt.setDouble(4,rs.getDouble("salary"));pstmt.executeUpdate();}……
上述是Aceess向MySQL轉化的主要實現思路和過程。其他數據庫文件與MySQL的自動互轉化實現與此過程基本相似,不再贅述。
4 系統的性能評估
4.1 測試用數據說明
為了檢驗系統對用戶的業務提升效率,將開發后的原型系統部署在某省的審計單位進行測試。該單位在全省各市、州和縣均有下屬機構或單位,并且由于多民族和地區發展不均衡,業務人員的信息化操作水平參差不齊,差異較大,如文章開頭部分所述,是比較典型的面臨數據文件多樣與不一致問題的單位。再進行協調后,選取了其某一季度的業務數據用本文所述系統進行處理的效果對比,所處理數據文件數量及類型情況如表1所示(涉及到的記錄大概30 000多條):
由于人工錯誤率較高,那么在實際的使用中,可能會進行多次的檢查,意味著需要更多的人工和時間。
4.3 部署前后的效果對比
對所選取的數據文件利用文中所述系統進行了自動轉換,并與其以往的方式所消耗時間進行了對比。為了更真實的分析本系統對業務的積極影響,這里所謂處理時間不是單指計算機中的處理時間,而是包含了整個文件準備、輸入、處理和快速檢查等步驟,因為這個時間是真正的業務處理過程所消耗。
所測數據文件中,幾個類型的數據文件所消耗時間均不到一個小時,這里為了對比方便,都視為處理時間為1個小時。而之前該單位利用其以往的處理方式進行處理所消耗時間就相對大的多。對其業務量和勞動時間進行了統計,部署前后的對比數據如表3所示:
從圖可見,所設計和實現的異種數據文件自動轉化系統確實大大提高了數據的統一和規范化的處理效率,很實際的解決了用戶單位所面臨的具體業務困難,節省了業務成本。
總體上,本文所提出的軟件設計思路較新穎的從系統層面提出了一種通用異種數據轉化為統一數據庫數據的解決方法;并從中間件的角度構思和設計了一個可實現異種數據轉化的軟件模塊的全新架構;對系統進行初步工程實現,驗證了設計的可行性;原型系統表現出較好的自動化處理效果,為解決用戶存在的實際困難和問題提供了一個有效途徑。同時本文所提出的軟件思想和設計也不僅僅局限于文中所述問題,也可以對諸如Web系統中的不同網頁格式的統一化處理、對于網絡中的不同配置文件的統一化處理、以及其他類似問題的處理都有很實際的參考和借鑒價值。
當然,由于系統初步實現,還存在一些問題,如:(1)txt文本和excel文件內容必須是全結構化的,因此對文件內容格式要求較嚴格,導致用戶對文件的操作受到一定限制;(2)系統對文件內容的格式依賴程度較高,如果文件中不慎出現格式問題,將可能導致數據轉化的錯誤與失??;(3)系統穩定性等方面的問題。不足之處,將在今后的工作中繼續關注和解決,期望能有更完善的結構和軟件實現。
參考文獻
[1] 熊華平.大型異構數據庫數據遷移系統的研究與應用[J].計算機應用與軟件,2012(10):178-181.
[2] 唐彬.異構數據庫數據遷移中間件設計[D].蘭州:蘭州理工大學,2011.
[3] 張小波.基于協同數據庫的數據遷移模型研究與實現[J].計算機工程與設計,2005,26(5):1220-1222,1301.
[4] Xiong Junjun. Key Technology Research of Migration from Informix to Oracle[J]. Computer Engineering, 2012,7(14):52-55.
[5] 黃根平,郭紹忠,陳海勇,等.數據集成中XML模式和關系模式映射模型研究[J].信息工程大學學報,2009(4):527-531.
[6] 鄭仕勇.基于XML和中間件的異構數據庫數據遷移的研究與應用[D].桂林:桂林理工大學,2010.
[7] Li Aimin, Tan Xianhai. Research on conversion of unstructured data to structured data based on XML technology[J]. Railway computer application,2012(10):12-16.
[8] 劉如九.一種通用的多數據庫間數據抽取方法及應用[J].北京交通大學學報(自然科學版),2008(4):14-18.
[9] 韋琳,袁泉,霍劍青,等.E-learning非結構化數據管理系統的構建與實現[J].中國科學技術大學學報,2010,6(40):307-311.
[10] 徐燕.信息系統中的通用數據遷移工具的研究與設計[J].計算機與現代化,2010(6):156-158.
[11] http://www.sj00.com/article/578/579/2006/200605238423.html[EB/OL][2006-05-23].
[12] http://www.docin.com/p-244646744.html[EB/OL][2011-08-16].
[13] http://wenda.tianya.cn/question/4d2c1166d69e0f8f[EB/OL][2009-05-10].