張志強,王偉鈞,周利軍,黎忠文
(成都大學(xué) 計算機學(xué)院,四川 成都 610106)
在文本挖掘領(lǐng)域的研究中,很多學(xué)者提出分詞的產(chǎn)生以及新詞的發(fā)現(xiàn)都是極其重要的處理過程[1-2].在這些過程中,會產(chǎn)生海量的分詞數(shù)據(jù)和新詞候選詞數(shù)據(jù),對這些海量數(shù)據(jù)的處理效率極大地影響著整個文本挖掘項目運行的進(jìn)度.如何提高數(shù)據(jù)的處理效率是文本挖掘研究的重要問題[3-5].
通常,海量數(shù)據(jù)一般都存儲在數(shù)據(jù)庫中,若要進(jìn)行數(shù)據(jù)處理,就必須進(jìn)行數(shù)據(jù)庫的讀寫操作,由此需要設(shè)計相應(yīng)的數(shù)據(jù)庫讀寫策略.而采用常規(guī)的數(shù)據(jù)庫讀寫策略實現(xiàn)的處理方式盡管可以完成海量數(shù)據(jù)的處理,但數(shù)據(jù)處理的效率較低.為了提高數(shù)據(jù)庫讀寫的速度和數(shù)據(jù)處理的效率,本研究對常規(guī)的數(shù)據(jù)庫讀寫策略進(jìn)行了優(yōu)化分析,提出并設(shè)計了優(yōu)化后的數(shù)據(jù)庫讀寫策略,最后利用JAVA 語言實現(xiàn)了該策略.實驗結(jié)果表明,優(yōu)化后的數(shù)據(jù)庫讀寫策略實現(xiàn)的數(shù)據(jù)處理速度比常規(guī)數(shù)據(jù)庫讀寫策略實現(xiàn)的數(shù)據(jù)處理速度更快,從而其數(shù)據(jù)處理效率更高.
本研究所涉及到的分詞數(shù)據(jù)處理過程,是在文本挖掘中,從數(shù)據(jù)庫中讀取分詞數(shù)據(jù),根據(jù)新詞候選詞的產(chǎn)生算法生成多個新詞候選詞,并將新產(chǎn)生的新詞候選詞寫入數(shù)據(jù)庫中,為文本挖掘后期的分析處理提供基礎(chǔ)數(shù)據(jù).
在分詞數(shù)據(jù)處理過程中,常規(guī)的數(shù)據(jù)庫讀寫策略實現(xiàn)過程分為4 步驟:①利用JDBC 數(shù)據(jù)庫訪問接口,建立數(shù)據(jù)庫訪問連接對象;②利用JDBC 接口的executeQuery 方法執(zhí)行select 語句完成從數(shù)據(jù)庫的分詞表中提取分詞數(shù)據(jù);③將新產(chǎn)生的新詞候選詞利用JDBC 接口的executeUpdate 方法執(zhí)行insert語句寫入數(shù)據(jù)庫中;④關(guān)閉數(shù)據(jù)庫訪問連接,釋放數(shù)據(jù)庫連接資源.
常規(guī)的數(shù)據(jù)庫讀寫策略在分詞數(shù)據(jù)處理過程中的關(guān)鍵代碼結(jié)構(gòu)如下:
為了提高數(shù)據(jù)庫讀寫的速度,需要對常規(guī)數(shù)據(jù)庫讀寫策略進(jìn)行優(yōu)化設(shè)計,對此本研究采用帶連接池數(shù)據(jù)庫讀寫策略.
1.2.1 連接池.
在每次對數(shù)據(jù)庫進(jìn)行讀寫時,都需要建立數(shù)據(jù)庫連接對象.當(dāng)頻繁讀寫數(shù)據(jù)庫時,數(shù)據(jù)讀寫的效率將會變低.為了提高數(shù)據(jù)讀寫效率,采用數(shù)據(jù)庫連接池技術(shù).通過設(shè)計數(shù)據(jù)庫連接池來分配、管理和釋放數(shù)據(jù)庫連接,連接池允許程序重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是重新建立一個連接,同時連接池也會釋放空閑時間超過最大空閑時間的數(shù)據(jù)庫連接,以此避免因為沒有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏,從而能顯著地提高對數(shù)據(jù)庫讀寫的速度.
本研究設(shè)計的連接池實現(xiàn)的原理是在系統(tǒng)初始化的時候,為數(shù)據(jù)庫連接建立一個“緩沖池",預(yù)先在緩沖池中放入一定數(shù)量的連接.當(dāng)用戶需要訪問數(shù)據(jù)庫時,并非建立一個新的連接,而是從連接池中取出一個已建立的空閑連接對象.使用完畢后,該連接并不關(guān)閉,而是將連接放回連接池中,為下一個請求訪問使用.而連接的建立、斷開都由連接池來管理.同時,可以通過設(shè)置連接池的參數(shù)來控制連接池中的初始連接數(shù)、連接的上下限數(shù)以及連接池中的連接數(shù)動態(tài)增長等.連接池模型如圖1 所示.
圖1 連接池模型示意圖
1.2.2 帶連接池數(shù)據(jù)庫讀寫策略的實現(xiàn).
由于JDBC 接口本身并不提供可以直接使用的連接池API 函數(shù),需要單獨設(shè)計連接池.本研究設(shè)計了ConnectionPools 連接池類來實現(xiàn)連接池的功能.
連接池類的關(guān)鍵代碼結(jié)構(gòu)如下:
帶連接池數(shù)據(jù)庫讀寫策略在分詞數(shù)據(jù)處理過程中的關(guān)鍵代碼結(jié)構(gòu)如下:
數(shù)據(jù)處理過程中,數(shù)據(jù)庫讀寫策略使用的連接是從連接池中獲取,使用完后再放入連接池中,為后面的數(shù)據(jù)庫讀寫操作繼續(xù)使用,因此,每次數(shù)據(jù)庫讀寫時,并不需要重新建立連接和釋放連接,從而使得數(shù)據(jù)庫讀寫速度提高,其數(shù)據(jù)處理效率也得到提高.
為了更進(jìn)一步提高數(shù)據(jù)庫的讀寫速度和數(shù)據(jù)處理效率,本研究在帶連接池數(shù)據(jù)庫讀寫策略的基礎(chǔ)上又進(jìn)一步進(jìn)行了優(yōu)化.本次優(yōu)化中,將數(shù)據(jù)庫寫操作以批處理方式進(jìn)行,每次完成一批SQL 語句的執(zhí)行,從而減少了單條SQL 語句執(zhí)行的資源開銷,又更進(jìn)一步提高了數(shù)據(jù)處理的效率.批處理操作實現(xiàn)的關(guān)鍵步驟是:每次從新詞候選詞數(shù)組中提取候選詞后,動態(tài)產(chǎn)生一條insert 語句,該語句用于將候選詞寫入到數(shù)據(jù)庫的候選詞表中,并將該insert 語句利用JDBC 接口的addBatch 方法添加到批處理操作的集合中,以此類推,直到當(dāng)批處理集合容納的SQL語句的條數(shù)滿足設(shè)置的最大容量后,再一次性地提交給數(shù)據(jù)庫執(zhí)行.批處理數(shù)據(jù)庫讀寫策略實現(xiàn)模型如圖2 所示.
圖2 批處理數(shù)據(jù)庫讀寫策略架構(gòu)模型示意圖
批處理數(shù)據(jù)庫讀寫策略在分詞數(shù)據(jù)處理過程中的關(guān)鍵代碼結(jié)構(gòu)如下:
為了比較不同的數(shù)據(jù)庫讀寫策略對數(shù)據(jù)處理效率的影響,本研究對常規(guī)數(shù)據(jù)庫讀寫策略、帶連接池數(shù)據(jù)庫讀寫策略、批處理數(shù)據(jù)庫讀寫策略分別進(jìn)行了測試實驗.測試環(huán)境中,軟件環(huán)境是,后臺數(shù)據(jù)庫系統(tǒng)采用SQL Sever 2008 R2,數(shù)據(jù)庫中分詞表的記錄數(shù)為2 944 條,操作系統(tǒng)為Windows XP SP3;硬件環(huán)境是,CPU 為Intel Core 2 Duo T6570(2.10 GHz),內(nèi)存4 GB.
本研究設(shè)計的連接池類,可以設(shè)置連接池中容納的連接個數(shù)的最大值,從而動態(tài)調(diào)整連接池的性能.為了測試連接池最大容量對數(shù)據(jù)處理效率的影響,將連接池容納的連接個數(shù)的最大值分別設(shè)置為10、20、30、40、50、60、70、80、90、100,每種設(shè)置情況測試10 次.測試的結(jié)果如表1 所示.
從表1 的測試的結(jié)果可以看出,當(dāng)連接池中容納的連接個數(shù)的最大值設(shè)置為40 時,數(shù)據(jù)處理效率相對最高.
批處理數(shù)據(jù)庫讀寫策略的優(yōu)化方案設(shè)計中,批處理集合容量(批處理集合中容納的SQL 語句條數(shù))的設(shè)置對數(shù)據(jù)處理效率也有相應(yīng)的影響,為了測試批處理集合容量對數(shù)據(jù)處理效率的影響,將批處理集合容量分別設(shè)置為100、200、300、400、500、600、700、800、900、1000 進(jìn)行測試,每種設(shè)置測試10 次,其中連接池最大容量設(shè)置為40.測試的結(jié)果如表2 所示.
表1 連接池的最大容量對數(shù)據(jù)處理效率的影響
表2 批處理集合容量對數(shù)據(jù)處理效率的影響
從表2 的測試結(jié)果可以看出,當(dāng)批處理集合容量設(shè)置為400 時,數(shù)據(jù)處理的效率最高.
為了比較不同的數(shù)據(jù)庫讀寫策略的數(shù)據(jù)處理效率,本研究對3 種數(shù)據(jù)庫讀寫策略的數(shù)據(jù)處理進(jìn)行了比較測試.每種數(shù)據(jù)處理方式測試了10 次,其中,帶連接池數(shù)據(jù)庫讀寫策略的數(shù)據(jù)處理方式中將連接池容量的最大值設(shè)置為40;批處理數(shù)據(jù)庫讀寫策略的數(shù)據(jù)處理方式中將批處理集合容量設(shè)置為400.測試的結(jié)果如表3 所示.
表3 不同數(shù)據(jù)庫讀寫策略的數(shù)據(jù)處理效率的比較
從表3 可見,批處理數(shù)據(jù)庫讀寫策略的數(shù)據(jù)處理方式無論是數(shù)據(jù)處理的最優(yōu)時間值,還是數(shù)據(jù)處理的平均時間值,其處理時間值都是最小的.由此看見,批處理數(shù)據(jù)庫讀寫策略的數(shù)據(jù)處理效率最高.帶連接池數(shù)據(jù)庫讀寫策略的數(shù)據(jù)處理效率比常規(guī)數(shù)據(jù)庫讀寫策略的數(shù)據(jù)處理效率提高約18%,批處理數(shù)據(jù)庫讀寫策略數(shù)據(jù)處理效率比常規(guī)數(shù)據(jù)庫讀寫策略的數(shù)據(jù)處理效率提高約20%.
文本挖掘中,當(dāng)數(shù)據(jù)庫存儲的數(shù)據(jù)量是海量時,為了提高數(shù)據(jù)處理的效率,設(shè)計一種高效的數(shù)據(jù)庫讀寫策略是非常重要的.本研究設(shè)計了帶連接池數(shù)據(jù)庫讀寫策略和批處理數(shù)據(jù)庫讀寫策略,通過測試實驗看出其數(shù)據(jù)處理的效率得到明顯的提高.
[1]孫鐵利,劉延吉.中文分詞技術(shù)的研究現(xiàn)狀與困難[J].信息技術(shù),2009,33(7):187-189 +192.
[2]趙偉,戴新宇,尹存燕,等.一種規(guī)則與統(tǒng)計相結(jié)合的漢語分詞方法[J].計算機應(yīng)用研究,2004,21(3):23-25.
[3]文必龍,宗文棟.海量并行處理系統(tǒng)的大數(shù)據(jù)讀寫接口優(yōu)化研究[J].鄭州輕工業(yè)學(xué)院學(xué)報(自然科學(xué)版),2012,27(3):28-30 +48.
[4]孫勝耀,聶利穎.基于數(shù)據(jù)挖掘的高校學(xué)生信息海量數(shù)據(jù)處理[J].電腦知識與技術(shù),2011,7(24):5823-5825.
[5]賀瑤,王文慶,薛飛.基于云計算的海量數(shù)據(jù)挖掘研究[J].計算機技術(shù)與發(fā)展,2013,23(2):69-72.