謝英輝 鄧子云
(1.長沙民政職業技術學院,湖南 長沙 410004;2.湖南現代物流職業技術學院,湖南 長沙 410131)
基于Web方式海量數據上傳與導入的解決方案
謝英輝1鄧子云2
(1.長沙民政職業技術學院,湖南 長沙 410004;2.湖南現代物流職業技術學院,湖南 長沙 410131)
作者在文中介紹了傳統方法在解決海量數據從客戶端導入到服務器數據庫時的具體問題,提出了新的解決方案,即先利用Apache公司的文件上傳組件把文件上傳到服務器的臨時目錄,然后創建擴展名為“.ctl”的控制文件,再利用java語言的shell指令和線程來執行控制文件、進行數據導入,很好地解決了利用Web來實現大容量數據的導入問題,具有很高的研究和應用價值。
海量數據;企業信息化;解決方案;shell指令;線程
隨著計算機硬件、軟件的迅速發展,個人計算機逐漸進入普通家庭,社會信息化程度有了大幅度的提高,資源共享也成了企業必須關注的重點。Internet互聯網作用和潛力無限,目前企業信息共享也主要是基于Internet來進行的,許多公司和企業以及各政府、事業單位都建立了自己的門戶網站,及基于web的企業信息化辦公系統,這些網站上一般都有大量的可供其它企業利用的共享資源,其中就有很多的大容量共享信息,并且容量會隨著信息化普及程度的提高而增大,而目前的一些解決方案都存在著內存溢出、時間、地域和操作人員的高技術要求的問題,使得企業無法高效地利用和處理這些大容量信息,該問題也成了阻礙企業信息化提高的一個重要問題,為了高效利用這些信息,打破目前方法的時間、地域和操作人員技術要求的局限性,新的解決方案的提出和研究就顯得尤為重要。
目前社會信息化程度在不斷提高,但離普及各行各業還有相當大的距離,為了滿足人們對高生活質量的需求,信息化將普及到我們生活的每個角落,同時信息化的普及也必將給我們的生活帶來質的提高。為了提高工作效率,企業或個人一般會想盡辦法盡可能地利用共享資料,而有很多資料也可以直接為自己所用,在獲得共享資源后,有些需要直接導入到自己的系統
中去,目前一般企業有兩種解決方法,這兩種方法都存在一定問題和局限性:
方法一是通過采用Web操作來完成,這種方法很方便,對于時間、地域和操作人員技術要求不高,它主要是通過直接把文件信息內容通過內存變量讀入內存中,然后再把內存變量里的數據取出導入數據庫,但這種方法只能解決小容量數據的導入問題,在導入海量數據時就會出現內存溢出問題。
方法二是數據庫管理員直接啟動服務器,利用程序命令和手動操作以及相關輔助工具進行數據導入,該種方法很適合海量數據的導入,但對于操作員的專業技術要求很高,并且只能在服務器上操作,而且因為導入數據時間較長,中間不能出現導演中斷,否則會造成數據不完整,存在著時間、地域和專業技術要求高的局限性。
目前這兩種方法都存在問題和局限性,嚴重阻礙各行各業的信息化建設,成了社會信息化建設的一個嚴重的問題。
隨著社會信息化程度的不斷提高,資源數據的共享會越來越普遍,容量也會越來越大,為了提高大容量數據的共享使用效率,簡化操作步驟,讓更多不同層次計算機操作水平的相關人員參與到信息共享中去,這就需要設計一種采用WEB方法導入大容量數據的方案,來代替需要有專業技術、專業工具及時間和地點等要求的傳統方案。
該方案研究需求其實也是社會應用的一種需求,目前在信息化程度較高的國家需求更為明顯。本人在2008年的對日軟件外包開發工作過程中,有幸參與了一個有這種需求的項目,該項目是日本神戶電視臺的一個數據庫管理系統,項目有一個關于郵件管理的模塊,需要實現從日本國家網站上下載一個全國所有在國家機關注冊過的正規公司的詳細信息的Excel文件,然后要把文件里的公司名和地址信息導入到數據庫中,當時下載的文件容量就有15M,而且隨著注冊的公司越來越多,文件容量也會逐漸增加。
隨著信息化程度的不斷提高,這種需求將會是企業信息化建設的一種普遍需求,目前解決方案存在的問題也會越來越嚴重,因此迫切需要研究一種新的解決方案來解決。
采用JAVA開發語言;WEB服務器不限,可以是JBoss、Tomcat、Weblogic和 Enhydra等 WEB 服務器中的任何一種;操作系統可以是Windows系統或Linux系統,數據庫必須采用Oracle數據庫,因為要使用Oracle數據庫的sql loader工具,sql loader可以把一些以文本格式存放的數據順利地導入到oracle數據庫中,是一種在不同數據庫之間進行數據遷移的非常方便而且通用的工具。并且在方案中還要用到apache公司的開源組件commons-fileupload,該組件主要用來使用WEB方法在客戶端快速上傳大容量的文件到服務器端,使用方便,易掌握,該組件主要包括common.jar、commons-fileupload-1.1.jar、commons-io- 1.1.jar和fileupload.jar等類文件,這些文件在apache公司官方網站上下載。
先利用appack公司的上傳組件把文件上傳到服務器,然后在服務器端打開文件,再利用Oracle數據sql loader工具把文件中指定的內容導入到數據庫中,導入完成后刪除上傳的文件。由于需要快速向數據庫導入大量數據,考慮到通過程序讀寫文本的方法比較慢且需占用系統大量的資源,所以使用sqlldr,用sqlldr批量導入數據非常快,能在一小時導入100G的數據。
具體步驟如下:
3.2.1 創建工程
3.2.2 在apache公司官方網站上下載文件common.jar、commons - fileupload - 1.1.jar、commons - io-1.1.jar、fileupload.jar、fileuploadsrc.zip。
3.2.3 在工程中引入 common.jar、commonsfileupload-1.1.jar、commons- io - 1.1.jar、fileupload.jar、fileuploadsrc.zip庫文件,并引入 j2ee.jar庫文件,該文件可在網上下載,也可在安裝的j2ee服務器里的lib目錄下找到。
3.2.4 編碼實現
首先在jsp頁面中加入一個file控件,然后創建一個javaBean類,再在此類中編碼實現上傳功能,相關代碼及解釋如下:
第一步:引入相關庫文件

以上三個語句表示將apache上傳文件組件的庫文件里的命名空間顯式導入到應用程序文件中,以便在應用程序文件中能直接使用實現上傳的相關函數。
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
以上兩語句是引入j2ee.jar庫文件里的命名空間。
第二步:編寫函數實現上傳文件功能




第三步:編寫函數,創建用oracle中的sqlldr工具導入數據的控制文件和shell文件。



隨著社會信息化程度的不斷提高,資源共享成了社會進步的巨大推動力,怎樣使得資源共享更高效,成了計算機業研究的一個主要課題。本課題主要來自于社會實際客戶對共享大容量數據文件的直接導入到數據的需求內容,很好地解決了實際用戶的需求,得到了客戶很好的認可和評價。目前一般公司數據導入和維護需要通過計算機專業人員來完成,但該解決方案的應用將會把人從需要具有專業知識并且非常煩瑣的大容量數據共享導入的工作中解放出來,使得操作人員只需要懂得簡單的Web操作就可以完成。
[1]鄧子云,謝英輝.精通J2EE網絡編程[M].北京:清華大學出版社,2007.5.
[2]李建剛,秦興橋,鄭雨貝.JSP網絡編程技術與實踐[M].北京:清華大學出版社,2008.6.
[3]張本豐.軟件過程信息化[N].中國計算機報,2004-05-10
[4]SCOTTOAKS HENRYWONG.JAVA 線程(第3版)[M]. 南京:東南大學出版社,2006.3.
[5]哈諾德 .Java網絡編程[M].北京:中國電力出版社,2005.11.
[6](美)DAVID C.KREINES BRIAN LASKEY.ORACLE 數據庫管理[M].北京:中國電力出版社,2002.1.
[7]王海亮,王海鳳,張立民,鄭建茹.精通ORACLE10G備份與恢復[M].北京:中國水利水電出版社,2005.1.
[8]耿騫,袁名敦,肖明.信息系統分析與設計[M].北京:高等教育出版社,2004.5.
TP392
A
1671-5136(2010)02-0126-04
2010-04-25
謝英輝 (1977-),男,湖南漣源人,長沙民政職業技術學院軟件學院講師、碩士。研究方向:軟件項目管理、軟件工程;鄧子云 (1979-),男,湖南雙峰人,湖南現代物流職業技術學院副教授、高級工程師、碩士、中國系統分析員協會專業顧問。研究方向:軟件項目管理、軟件工程。