摘要:采油廠由于前端傳感器的龐大數(shù)量,每日都存在海量數(shù)據(jù)待處理。在數(shù)據(jù)處理過程中,對數(shù)據(jù)類型的索引和檢索的效率方面提出了很大的挑戰(zhàn)。因此,結(jié)合采油廠實(shí)際需求,從系統(tǒng)結(jié)構(gòu)、提高建立索引的效率、關(guān)鍵詞表的選擇、索引的壓縮等幾個(gè)方面,討論了在大數(shù)據(jù)量環(huán)境下快速進(jìn)行建立索引和檢索,并給出了初步的實(shí)驗(yàn)結(jié)果,為大數(shù)據(jù)的索引和檢索提供了一種比較有效的解決方案。
關(guān)鍵詞:信息檢索;倒排文件;索引;并行檢索
一、前言
隨著采油廠數(shù)字化的建設(shè)及應(yīng)用的逐步完善推廣,數(shù)據(jù)綜合應(yīng)用的需求增加,但各類系統(tǒng)較多,數(shù)據(jù)相對獨(dú)立,存在“信息孤島”現(xiàn)象,暫未形成統(tǒng)一標(biāo)準(zhǔn)。在數(shù)據(jù)量上,單就日常SCADA系統(tǒng)采集和應(yīng)用在6個(gè)月時(shí)間產(chǎn)生了約7800萬條實(shí)時(shí)記錄,SCADA系統(tǒng)的數(shù)據(jù)庫一年產(chǎn)生約210多個(gè)G的數(shù)據(jù)量。因此,如何從大量不同類型且分散的數(shù)據(jù)中快速找到有效數(shù)據(jù),并盡量縮短檢索時(shí)間,提高數(shù)據(jù)處理效率,因此,本文論述了:(1)海量數(shù)據(jù)的索引在可優(yōu)化可操作性空間上非常大;(2)怎樣在盡可能短的時(shí)間內(nèi)建立高效的數(shù)據(jù)索引;(3)對海量數(shù)據(jù)高效的檢索如何進(jìn)行。
二、系統(tǒng)結(jié)構(gòu)
針對采油廠現(xiàn)場采集的各類不同數(shù)據(jù),其大數(shù)據(jù)處理關(guān)鍵技術(shù)一般包括:快速采集、大數(shù)據(jù)預(yù)處理、大數(shù)據(jù)存儲及管理、大數(shù)據(jù)分析及挖掘、大數(shù)據(jù)展現(xiàn)和應(yīng)用(大數(shù)據(jù)檢索、大數(shù)據(jù)可視化、大數(shù)據(jù)應(yīng)用、大數(shù)據(jù)安全等)。然而,在采油廠實(shí)際應(yīng)用過程中,未被使用的信息比例高達(dá)80%以上,很大程度都是由于采集信息種類繁多,采集粒度高,有效數(shù)據(jù)無法被快速檢索。因此,如何從大數(shù)據(jù)中采集出有用的信息已經(jīng)是大數(shù)據(jù)發(fā)展的關(guān)鍵因素之一。
因此在目前采油廠SCADA系統(tǒng)快速采集的大量數(shù)據(jù)中,如何快速采集出有用的信息已經(jīng)是制約采油廠智能化和數(shù)字化發(fā)展的關(guān)鍵因素之一。
為了能夠?qū)Υ罅康臄?shù)據(jù)比較快速的建立索引和檢索,因此可將系統(tǒng)結(jié)構(gòu)設(shè)計(jì)為并行索引與檢索結(jié)構(gòu)。如圖1所示:每一臺機(jī)器都要完成對數(shù)據(jù)的索引并提供檢索服務(wù),檢索控制器接受檢索指令輸入,從而通過分布式查詢方法查詢控制各個(gè)檢索服務(wù)器,為用戶提供統(tǒng)一的檢索服務(wù)[1]。
三、建立高效的索引組織
在數(shù)據(jù)庫中索引過程中,其查詢和檢索過程類似于查字典操作,通過索引組織逐級查找檢索。因此,建立高效的索引組織,是對采油廠海量數(shù)據(jù)實(shí)現(xiàn)精準(zhǔn)、快速查詢的必要手段:
(1)通過建立高效索引組織可以避免全表掃描。多數(shù)查詢可以僅掃描少量索引頁及數(shù)據(jù)頁,而不是遍歷所有數(shù)據(jù)頁。
(2)對于非聚集索引可以不訪問數(shù)據(jù)頁。
(3)聚集索引可以避免數(shù)據(jù)插入操作集中于表最后數(shù)據(jù)頁。
(4)在進(jìn)行實(shí)時(shí)數(shù)據(jù)檢索和查詢過程中,索引還可用于避免排序操作。
同樣,建立索引雖然可以提高查詢速度,但是數(shù)據(jù)更新同時(shí)需要更新索引,因而會導(dǎo)致數(shù)據(jù)庫系統(tǒng)更新數(shù)據(jù)性能下降。
因此為了加快檢索速度,建立索引的組織采用倒排文件的結(jié)構(gòu),倒排文件的結(jié)構(gòu)一般如圖2所示(其中,D表示出現(xiàn)這個(gè)索引項(xiàng)的文檔序號,a表示在該文檔內(nèi)這個(gè)索引項(xiàng)出現(xiàn)的次數(shù);我們的索引結(jié)構(gòu)中還標(biāo)記了索引項(xiàng)的每一次出現(xiàn)在該文檔內(nèi)的位置)。通過記錄下每一個(gè)關(guān)鍵詞在文檔中的出現(xiàn)位置,通過建立索引的過程,將詞法分析和倒排文件生成兩個(gè)部分[2]。
(一)詞法分析和關(guān)鍵詞表的選擇
詞法分析對于不同類型數(shù)據(jù)、不同語言的數(shù)據(jù)要完成不同的任務(wù),因此在建立索引時(shí),對于詞表的選擇也是一個(gè)重要的問題。系統(tǒng)可以采用動態(tài)或者靜態(tài)詞表:動態(tài)詞表在建立索引時(shí)是不固定的,可隨索引的建立而動態(tài)的增加,其好處是任何在文本中出現(xiàn)的關(guān)鍵詞或點(diǎn)都可以被檢索,而缺點(diǎn)是詞表的會隨著數(shù)據(jù)量的增大不斷增長,加大系統(tǒng)索引負(fù)擔(dān)。靜態(tài)詞表的好處是系統(tǒng)開銷較小,維護(hù)查找簡單快速,但是因?yàn)樾枰S護(hù)和準(zhǔn)確定位,因此在某些情況可能產(chǎn)生查詢失敗[3]。
經(jīng)過詞法分析,文檔被分解為關(guān)鍵詞、文檔號以及關(guān)鍵詞在該文檔內(nèi)偏移位置構(gòu)成的三元組以供生成倒排文件使用[4]。這樣通過把關(guān)鍵詞映射成唯一的ID,因此索引效率得到極大提高:把關(guān)鍵詞映射為唯一的ID,在三元組排序合并等操作時(shí),關(guān)鍵詞的比較就是整數(shù)ID之間的比較;同時(shí),轉(zhuǎn)化為關(guān)鍵詞ID后,其長度是固定的,可實(shí)現(xiàn)索引的快速壓縮,減小系統(tǒng)開銷。
(二)倒排文件的生成
采用動態(tài)詞表時(shí),所占用的空間也隨數(shù)量的增加而增大。當(dāng)文檔數(shù)量增加到一定程度時(shí),內(nèi)存不能裝載下整個(gè)詞表。因此,進(jìn)行分批階段性的生成倒排文件,將其劃分成若干個(gè)部分分別建立倒排文件,再將各個(gè)倒排文件進(jìn)行合并最終生成一個(gè)倒排文件[5]。具體過程是:
1.一定量的在詞法分析階段生成的由關(guān)鍵詞、文檔號位置信息構(gòu)成的三元組,把三元組按照關(guān)鍵詞的順序進(jìn)行排序。
2.于相同的關(guān)鍵詞將其所在的文檔號和偏移位置進(jìn)行合并,將合并后的結(jié)果寫在倒排索引文件中。
3.再獲取一部分三元組,按照上面的方法建立好倒排文件,把新生成的倒排文件與以往的倒排文件進(jìn)行合并,重復(fù)上述操作直到所有文檔都建成索引。
(三)基于流水線的多線程倒排索引
通過分析上面建立索引的過程可以發(fā)現(xiàn),在生成三元組、排序、相同關(guān)鍵詞的倒排列表合并等操作主要消耗系統(tǒng)CPU資源,而將建好的索引寫到磁盤主要涉及到磁盤I/O的寫操作,如果把數(shù)據(jù)的讀取、三元組排序合并、索引寫、合并為建立索引的三個(gè)模塊,通過并發(fā)操作,則數(shù)據(jù)的讀取和索引寫兩個(gè)模塊都涉及到磁盤I/O操作,會產(chǎn)生沖突,降低并發(fā)的效率。
因此,對不同的磁盤來進(jìn)行操作,從一塊磁盤中讀取數(shù)據(jù),而向另一塊磁盤中寫索引文件,這樣可以盡量減少I/O讀寫沖突。同時(shí)啟動三個(gè)線程A,B,C來完成,時(shí)空圖如圖3所示:
如圖3中,在t2時(shí)刻,讀操作、分析排序操作、寫操作同時(shí)運(yùn)行;并且這三個(gè)操作所占用的系統(tǒng)資源不同,雖然同時(shí)運(yùn)行,但并不會出現(xiàn)爭奪系統(tǒng)資源的情況,因此提高了系統(tǒng)資源的利用率,從而極大地提高了建立索引的效率。
(四)索引文件的壓縮
由于:(1)索引文件需要占用大量的存儲空間;(2)對索引進(jìn)行壓縮可以減少I/O時(shí)間,因?yàn)镮/O是系統(tǒng)的瓶頸。因此,對于壓縮與解壓效率的要求是不均衡的。因?yàn)閴嚎s是在建立索引時(shí)進(jìn)行的,建立索引是離線的過程,對于時(shí)間要求相對較低,而解壓是在檢索時(shí)實(shí)時(shí)進(jìn)行的,必須有很高的效率才行。所以,壓縮算法對于解壓的效率要遠(yuǎn)高于對于壓縮效率的要求,因此在大數(shù)據(jù)索引文件壓縮時(shí)采用了伽馬壓縮算法[6]。
四、并行高效信息檢索
在對信息進(jìn)行檢索時(shí),檢索控制器把查詢向量發(fā)送到各個(gè)檢索服務(wù)器,在每個(gè)檢索服務(wù)器中進(jìn)行查詢,同時(shí)采用并行檢索的方式,由檢索控制器對用戶輸入的查詢進(jìn)行響應(yīng),對查詢進(jìn)行處理,并采用經(jīng)典的向量空間模型。最終每個(gè)檢索服務(wù)器將檢索的結(jié)果返回給檢索控制器,完成各個(gè)檢索服務(wù)器查詢結(jié)果的合并,把合并后的結(jié)果發(fā)送給用戶,從而實(shí)現(xiàn)并行高效信息檢索。
五、實(shí)驗(yàn)和結(jié)果
目前,對索引模塊,我們應(yīng)用采油廠不同的數(shù)據(jù)做了以下兩個(gè)實(shí)驗(yàn):實(shí)驗(yàn)1的目的是為了分析系統(tǒng)的瓶頸;實(shí)驗(yàn)2給出了目前索引的初步結(jié)果。
實(shí)驗(yàn)的物理環(huán)境如下:服務(wù)器,2*Xeon 2.8GHz CPU,8GB內(nèi)存。
(一)系統(tǒng)瓶頸的分析
為了了解索引器的運(yùn)行狀況,分析索引系統(tǒng)的瓶頸。我們分別對包含不同點(diǎn)位信息的傳感器采集實(shí)時(shí)數(shù)據(jù)(數(shù)據(jù)均為英文純文本格式),生產(chǎn)資料及信息(中文純文本)做了實(shí)驗(yàn),以獲得每一個(gè)階段所需要的時(shí)間。
從以上結(jié)果,可分為讀操作、詞法和排序操作、寫操作這三個(gè)階段。在三個(gè)階段中,其中第二個(gè)階段(即詞法和排序操作階段)所需時(shí)間最長;因?yàn)檫M(jìn)行此法分析所需時(shí)間遠(yuǎn)遠(yuǎn)大于排序所需時(shí)間。因此,詞法分析的效率是影響索引效率的關(guān)鍵因素之一。
(二)索引速度的初步結(jié)果
在該實(shí)驗(yàn)中,處理對象為SCADA動態(tài)數(shù)據(jù)庫,文本為英文純文本,詞典規(guī)模為28931。建立索引的速度如表3。
六、相關(guān)工作
關(guān)于建立索引的研究,文獻(xiàn)[4]采用了基于流水線的建立索引的方法,他們通過實(shí)驗(yàn)來確定一個(gè)合適的參數(shù)來盡可能提高資源的利用率。我們所采用的的方法與其不同之處包括:(1)對這A,B和C三個(gè)線程進(jìn)行調(diào)度以保證不會出現(xiàn)系統(tǒng)資源的爭奪,即只有線程A讀操作完成,線程B才開始讀;只有線程A的分析操作完成,線程B才開始分析操作;只有線程A的寫操作完成,線程B才開始寫操作,依次類推。(2)我們采用文件方式來存儲和管理索引,未采用嵌入式數(shù)據(jù)庫來存儲和管理索引[7],以實(shí)現(xiàn)更靈活和更快捷的檢索,同時(shí)在索引過程中把索引壓縮有機(jī)結(jié)合在一起。
七、結(jié)語
在采油廠實(shí)際應(yīng)用海量數(shù)據(jù)環(huán)境下對數(shù)據(jù)進(jìn)行處理,建立索引和檢索的效率是至關(guān)重要的技術(shù)手段。因此,在針對這個(gè)方面系統(tǒng)在設(shè)計(jì)時(shí)主要考慮效率方面的因素,采用了并行建立索引和檢索的結(jié)構(gòu),在建立索引時(shí)同時(shí)采用了多線程并發(fā)的方式。
同時(shí),針對不同種類的靜態(tài)、動態(tài)的海量數(shù)據(jù)給檢索系統(tǒng)帶來的另一個(gè)挑戰(zhàn)是對系統(tǒng)性能的壓力,大量的關(guān)鍵詞可能使系統(tǒng)的內(nèi)存不能全部裝載,對于這些問題,文章都給出了一定的解決方案。
參考文獻(xiàn)
[1]Baeza-Yates R, Ribeiro-Neto B, Mills D, et al. Modern Information Retrieval[M]. ACM Press;, 1999.
[2]Hawking D, Craswell N, Thistlewaite P. Overview of TREC-7 very large collection track. 2004.
[3]Frakes W, Baezayates R. Information Retrieval: Data Structures and Algorithms[M]. Prentice-Hall, Inc. 1992.
[4]Melnik S, Raghavan S, Yang B, et al. Building a distributed full-text index for the web[J]. Acm Transactions on Information Systems, 2001,19(3):217-241.
[5]Brown E W, Callan J P, Croft W B. Fast Incremental Indexing for Full-Text Information Retrieval[C]// International conference on Very Large Data Bases;VLDB' 94. Department of Computer Science University of Massachusetts Amherst, MA 01003 USA;Department of Computer Science University of Massachusetts Amherst, MA 01003 USA;Department of Computer Science University of Massachusetts Amherst, MA 01003 USA;, 1994.
[6]Ian H.Witten, Alistair Moffat, Timothy C.Bell. Managing Gigabytes: Compressing and Indexing Documents and Images, 1999
[7]劉鵬,施遙.THSort(2002年版)算法設(shè)計(jì)思想.2002.
(作者單位:肖翔、王偉,新疆油田公司數(shù)據(jù)公司陸梁油田作業(yè)區(qū);韓光、宋鳳勇,新疆油田公司數(shù)據(jù)公司 )