龔建華
(國防信息學院,武漢 430010)
Oracle數據庫全文檢索性能研究
龔建華
(國防信息學院,武漢430010)
隨著全文檢索應用場景越來越多,更加需要了解數據庫全文檢索的性能。介紹Oracle數據庫全文檢索的設置方法,然后加載測試數據,對全文檢索和模糊查詢的性能進行比對測試,最后對全文檢索的查全能力和查詢速度進行詳細分析。
數據庫;全文檢索;模糊查詢
隨著信息社會的不斷發(fā)展,獲取信息比過去任何時候都變得更加容易,人們在碰到疑難問題時會主動查詢信息,查詢信息的頻率比過去高出了很多倍。生產生活中涌現的大量信息通常以文本形式呈現,很多信息還沒有來得及結構化,或者這些根本沒有必要進行結構化,導致目前從文本中查找信息是信息查詢的主流形式。由于文本難以量化比對大小,因此與數量、日期類型的數據查詢相比,文本的比對更復雜、更費時。
數據庫全文檢索是在數據表文本字段上建立全文索引,文本查詢完全在索引上進行,毋庸置疑,建立全文索引可以提高文本數據查詢的效率,但是查詢效率到底能夠提高多少,查詢效率與哪些因素有關,這些都是需要深入研究的問題。本文以Oracle10g企業(yè)版10.2.0.1.0版為研究對象,對比研究Oracle數據庫全文檢索性能。
1.1解鎖CTXSYS用戶
Oracle數據庫建立全文檢索在的工具包在CTXSYS模式中,安裝數據庫時,默認情況下CTXSYS用戶是鎖定的,在使用CTXSYS工具包之前,必須解鎖CTXSYS用戶,具體操作如下:
1.2CTX_DDL包授權
CTX_DDL包是設置全文索引的工具,因此在創(chuàng)建全文索引之前需要獲得該包的執(zhí)行權限,例如把該包的執(zhí)行權限授予SCOTT用戶,具體操作如下:
1.3創(chuàng)建中文分詞名稱
在Oracle數據庫中,針對不同國家的語言提供了不同的分詞器,常用的中文分詞器主要有CHINESE_VGRAM_LEXER和 CHINESE_LEXER,其中CHINESE_LEXER是新的漢語分詞器,支持中文和U-nicode字符集,該分詞器最大的改進是能夠認識大部分常用漢語詞匯,因此能夠更有效地分離詞匯。這里選用CHINESE_LEXER分詞器,使用該分詞器之前,需要建一個分詞器實體名,操作如下:
其中,CHINESE_LEXER是分詞器,MY_CHI-NESE_LEXER是分詞器實體名。
1.4創(chuàng)建全文索引
(1)創(chuàng)建數據表
在SCOTT模式下,創(chuàng)建一張用于存儲大量文本的數據表,操作如下:
其中,TXT字段是clob類型,可以存儲大量文本,單條記錄可以高達4G容量,NAME用于文本來源的文件名稱,ID只是一個編號。
(2)創(chuàng)建全文索引
Oracle數據的全文索引有 CONTEXT、CTXCAT、CTXRULE、CTXXPATH等四種類型,對DT表的TXT字段創(chuàng)建CONTEXT類型全文索引,操作如下:
create index IDX_DTTXT on SCOTT.DT(TXT)indextype is ctxsys.context parameters('LEXER MY_CHINESE_LEXER');
執(zhí)行這條命令即可創(chuàng)建全文索引,其中ctxsys.context是全文索引類型,'LEXER MY_CHINESE_LEXER'表示使用名稱為MY_CHINESE_LEXER的分詞器。
由于全文檢索是在全文索引的基礎上做檢索,從理論上講應該比模糊查詢直接針對文本做查詢要快一些,下面通過對比分析研究全文檢索的檢索速度。
2.1給DT表加載測試數據
為了能夠重現測試結論,這里選用中文版HTML格式JAVADOC系列文檔作為測試數據,該JAVADOC文檔集共有8964篇、約198M字節(jié),是Java語言的編程指南,每篇文檔包含中英文字符,可作為測試數據。
向Oracle數據庫加載CLOB字段內容時,通常不能直接插入,而應該采用流的方式加入,所以這些測試數據需要編寫程序加載到DT表中,具體操作略,數據加載完畢后,DT表所占表空間大小約550M字節(jié)。
2.2維護全文索引
每次更新DT表TXT字段的數據后,應當及時進行全文索引維護,即同步和優(yōu)化,使全文索引與TXT字段的內容吻合,具體操作如下:
2.3全文檢索與模糊查詢對比測試
(1)查詢工具與查詢命令
使用PL/SQL Developer 9.0中文版為查詢工具,使用下列語句來對比測試結果
模糊查詢的語句為:
(2)查詢方法
為提高對比分析的精確性,每次查詢盡可能采用一致的環(huán)境,使用相同的查詢工具,在相同的查詢窗口,每次查詢前等待CPU空閑。PL/SQL Developer 9.0設置為一次顯示全部查詢結果,操作系統(tǒng)中不額外運行其他應用程序,避免對系統(tǒng)資源的干擾。選用了“合成”、“網絡”、“鏈接”等檢索詞。
(3)查詢結果
全文檢索和模糊查詢對比測試的結果如表1所示。
表1 全文檢索與模糊查詢對比測試結果
表中:
記錄數占比=查詢結果記錄數/DT 表總記錄數(式1)
記錄數互比=全文檢索的結果記錄數/模糊查詢的結果記錄數(式2)
查詢速度互比=模糊查詢的耗時/全文檢索的耗時(式3)
耗時是查詢過程所使用的時間,以秒為單位,來自PL/SQL Developer 9.0 給出的結果。
(1)對測試數據本身的分析
測試選用JAVADOC文檔集屬于一個單一的專業(yè)領域,共有8964篇,占用550M左右表空間,有一定的規(guī)模,數據量對全文檢索性能分析有意義。
測試中選擇了7個檢索詞,這7個檢索詞的查詢結果的記錄數占比從0.007變化到0.975,覆蓋范圍比較廣,檢索詞選取對全文檢索分析有意義。
(2)查全能力分析
圖1 全文檢索記錄數與模糊查詢記錄數
圖2 全文檢索記錄數與模糊查詢記錄數互比
模糊是查詢能夠把滿足條件的所有數據都查詢出來,而全文檢索由于可能存在分詞不正確的原因,可能有少數滿足條件的記錄查詢不到。從圖1和圖2可以看出,對相同表和相同的檢索詞,全文檢索和模糊檢索的結果基本相差很小,記錄數互比最高到0.9998856,筆者推斷,記錄數互比很高的原因是我們使用專業(yè)文獻作為測試數據集,并且使用專業(yè)詞匯作為檢索詞?;究梢哉J為在專業(yè)領域全文檢索可以查全所有結果。
(3)查詢速度分析
圖3 模糊查詢耗時
從圖3中可以看出,無論查詢結果記錄占比為多少,模糊查詢的時間基本上是一個常數,在16秒左右。反過來說明,模糊查詢的耗時與查詢結果的數量沒有關系。這個測試結論印證了模糊查詢機制,模糊查詢要將檢索詞與所有記錄的TXT字段內容進行比對,對同一個表每個檢索詞比對記錄數是相同的,在一篇文檔內比對的方法也是相同的,所以每個檢索詞的查詢耗時基本相同。
圖4 全文檢索耗時
從圖4中可以看出,全文檢索的耗時隨著檢索結果的增加線性增加,這與全文索引的存儲機制有密切關系。如果有多篇文檔包含同一個索引詞,那么就會對這個索引詞建立起這些文檔的編號鏈表,包含同一個索引詞的文檔越多,鏈表就越長。全文檢索就是找到索引詞的鏈表,并解析鏈表把文檔編號分析出來。因此當索引詞的記錄數越多時,鏈表就越長,耗時就越多,基本是一個線性遞增的關系。
從圖5中可以看出,查詢結果記錄數占比小于0.1時,全文檢索與模糊查詢的速度互比有幾十倍甚至上百倍,全文檢索的優(yōu)勢非常明顯。當查詢結果記錄數占比大于0.4時,全文檢索與模糊查詢的速度互比小于5,最小只有2.426,全文檢索的優(yōu)勢減弱。綜合圖3和圖4可以看出,模糊查詢的耗時與查詢結果多少無關,基本是一個常數,而全文檢索查詢的結果記錄越多耗時越長,這是查詢結果越多時全文檢索優(yōu)勢迅速下降的根本原因。雖然全文檢索的優(yōu)勢已經不是十分明顯,但是全文檢索兩倍以上的速度優(yōu)勢仍然有應用價值。
圖5 全文檢索與模糊查詢的速度互比
[1]蒙輝,陳燕.Oracle Text技術在復雜結構數據庫中的應用[J].計算機技術與發(fā)展,2007,17(4):38-44.
[2]葛振國,李建,何林糠等.基于Lucene的Oracle數據庫全文檢索.信息技術,2010(3):156-158.
[3]楊寶峰.數據庫全文檢索技術.黑龍江科學信息,2007(5)45-45.
Research on the Performance of Oracle Full Text Retrieval
GONG Jian-hua
(PLA Academy of National Defense Information,Wuhan 430010)
With more and more applications in full text retrieval,understanding of the performance of database full-text retrieval is needed.Introduces the method of setting Oracle text,and then the loads test data,tests the performance of full-text retrieval and fuzzy query,analyses the search ability and speed of the full-text retrieval in details.
Database;Full Text Retrieval;Fuzzy Query
1007-1423(2016)27-0036-04DOI:10.3969/j.issn.1007-1423.2016.27.010
龔建華(1973-),男,湖北麻城人,副教授,碩士研究生,研究方向為信息系統(tǒng)設計與數據工程
2016-06-21
2016-09-20