一種海量數(shù)據(jù)下可靠索引更新系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及物聯(lián)網(wǎng)搜索技術(shù)領(lǐng)域,尤其涉及一種海量數(shù)據(jù)下可靠索引更新系統(tǒng)及方法。
【背景技術(shù)】
[0002]物聯(lián)網(wǎng)實體資源指一切能夠接入網(wǎng)絡(luò)的設(shè)備資源和物理實體。在物聯(lián)網(wǎng)中,大量的實體資源互連互通,很多具備自動化控制的物理設(shè)備等實體都能連接到網(wǎng)絡(luò)中,成為物聯(lián)網(wǎng)實體資源海洋的一部分,這些物聯(lián)網(wǎng)實體資源有的是傳統(tǒng)的路由器、打印機、攝像頭、手機等傳感器設(shè)備,有的是新型的可接入車載網(wǎng)網(wǎng)絡(luò)的汽車、可接入智能家居系統(tǒng)的電冰箱、甚至你桌子上的臺燈等智能生活用品。這些接入網(wǎng)絡(luò)中的實體資源越來越多,直接造成了物聯(lián)網(wǎng)實體信息的海量性。另一方面,單個實體資源的屬性也是動態(tài)變化的,其位置會隨著時間而變化,狀態(tài)也會隨著時間和空間的變化而變化,數(shù)以百萬千萬計的實體資源合起來產(chǎn)生的信息是海量的動態(tài)變化的信息。
[0003]為了提高對這些海量動態(tài)變化的信息建立索引的速度,實時索引構(gòu)建技術(shù)一直是物聯(lián)網(wǎng)搜索技術(shù)研宄的重點?,F(xiàn)在,關(guān)鍵字檢索技術(shù)中Apache Lucene (GospodneticO, Hatcher E.Lucene[Μ].Manning, 2005.)較好地提供了實時索引構(gòu)建技術(shù)的一種實現(xiàn)。它是通過建立硬盤主索引、內(nèi)存索引和合并中索引的三級索引結(jié)構(gòu)來實現(xiàn)實時索引構(gòu)建(Hatcher E, Gospodnetic 0.Lucene in act1n[J].2004.)的。該方案有如下特點:
[0004](I)搜索服務(wù)是在硬盤主索引Ful 1-1ndex和內(nèi)存索引Ram-1ndex中同時進行。
[0005](2)內(nèi)存索引Ram-1ndex是索引數(shù)據(jù)更新的入口。
[0006](3)當(dāng)內(nèi)存索引Ram-1ndex達到一定量時,需要與硬盤索引Ful 1-1ndex進行合并,合并的過程如下:首先將Ram-1ndex轉(zhuǎn)變?yōu)镸erging-1ndex,同時開辟一塊新的內(nèi)存索引空間Ram-1ndex接收新的文檔索引,這時假如有查詢請求,則同時查詢Ram_Index,F(xiàn)ul1-1ndex 和 Merging-1ndex,直到 Merging-1ndex 完全合并到 Ful 1-1ndex 中。
[0007](4)當(dāng) Merging-1ndex 完全合并到 Ful Ι-1ndex 中以后,這時 Merging-1ndex 不會立即刪除,而是會等待新的IndexReader打開。因為用IndexReader重新打開Ful 1-1ndex的速度是很慢的,如果這時有搜索請求過來,仍然檢索以上三個索引,保證了實時性。等到新的IndexReader打開以后,將其替代老的IndexReader,完成一次索引合并過程。
[0008]上述內(nèi)存索引與硬盤索引適時合并的方式保證了索引、搜索的實時性,但是如果索引更新速度過快,內(nèi)存索引的合并速度跟不上原始數(shù)據(jù)的推送速度,當(dāng)合并中索引還沒有完成與硬盤索引的合并操作,這時內(nèi)存索引達到了閾值;或者硬盤上的索引已經(jīng)很大,合并操作和重新打開IndexReader的操作要花費太長的時間,使得內(nèi)存索引已經(jīng)達到閾值的情況下,合并中索引與硬盤索引還沒有完成合并;又如在內(nèi)存索引尚未完成與硬盤索引合并的過程中發(fā)生服務(wù)器宕機事故,此時內(nèi)存索引的數(shù)據(jù)就會丟失,導(dǎo)致索引文件的不完整甚至索引文件損壞情況發(fā)生。
【發(fā)明內(nèi)容】
[0009]本發(fā)明所要解決的技術(shù)問題是提供一種海量數(shù)據(jù)下可靠索引更新系統(tǒng)及方法,加入了日志預(yù)寫、斷點檢查機制和資源緩存機制,資源更新和索引構(gòu)建之間添加了一級“緩存”,既解決了索引更新速度和原始數(shù)據(jù)推送速度不匹配的問題,又保證了索引更新的可靠性,且大大提升了海量資源屬性索引的重復(fù)更新速度。
[0010]本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種海量數(shù)據(jù)下可靠索引更新系統(tǒng),包括日志預(yù)寫模塊、日志數(shù)據(jù)庫、斷點控制模塊、斷點設(shè)置模塊、資源緩存模塊和內(nèi)存索引存儲區(qū);
[0011]所述日志預(yù)寫模塊,用于實時接收從物聯(lián)網(wǎng)實體資源數(shù)據(jù)中心推送來的資源更新信息,并將資源更新信息以“資源ID+屬性參數(shù)”的格式寫入日志數(shù)據(jù)庫中;
[0012]所述日志數(shù)據(jù)庫,用于保存各條“資源ID+屬性參數(shù)”的資源更新記錄;
[0013]所述斷點控制模塊,用于根據(jù)所述日志數(shù)據(jù)庫中保存的資源更新記錄的增長情況判斷是否達到閾值,如果達到閾值,將斷點信號發(fā)送至所述斷點設(shè)置模塊后,再發(fā)送更新信號至所述資源緩存模塊進行處理;
[0014]所述斷點設(shè)置模塊,用于記錄各組資源更新記錄的斷點信息,當(dāng)接收到所述斷點信號后,以本組資源更新記錄中更新的最后一條資源更新記錄作為斷點來建立斷點信息,并將斷點信息寫入斷點記錄表中;
[0015]所述資源緩存模塊,用于當(dāng)接收到更新信號后,在建立的更新記錄緩存區(qū)或所述內(nèi)存索引存儲區(qū)中逐一對本組的資源更新記錄的內(nèi)容進行更新處理;
[0016]所述內(nèi)存索引存儲區(qū),用于當(dāng)資源緩存模塊處理完成后,將在更新記錄緩存區(qū)處理的資源更新記錄的內(nèi)容導(dǎo)入,并根據(jù)經(jīng)過更新處理后的資源更新記錄的內(nèi)容對內(nèi)存索引文件進行更新。
[0017]本發(fā)明的有益效果是:針對物聯(lián)網(wǎng)實體資源海量性、動態(tài)性的特點,提出了一種保證索引更新速度和可靠性的方法,
[0018](I)針對索引構(gòu)建速度和資源數(shù)據(jù)更新速度不匹配以及宕機時內(nèi)存索引易丟失的情況,本發(fā)明加入了日志預(yù)寫與斷點檢查機制解決了以上問題,保證了索引更新的可靠性。
[0019](2)針對物聯(lián)網(wǎng)實體資源數(shù)據(jù)動態(tài)變化速度快的特點,本發(fā)明在傳統(tǒng)的實時索引更新方法中的內(nèi)存索引更新操作之前加入了資源緩存,在10000個資源的屬性重復(fù)更新100次的情況下將索引更新速度提升了 10倍以上。
[0020]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進。
[0021 ] 進一步,所述斷點控制模塊包括閾值設(shè)定單元、更新點判斷單元和斷點信息讀取單元;
[0022]所述閾值設(shè)定單元,用于設(shè)定每組資源更新記錄的數(shù)目的閾值;
[0023]所述更新點判斷單元,用于從所述斷點信息讀取單元讀取上一組資源更新記錄的斷點信息后,以該斷點信息所記錄的斷點時間為監(jiān)測點,實時監(jiān)測所述日志數(shù)據(jù)庫中本組資源更新記錄的增長情況,并判斷本組資源更新記錄的數(shù)目是否達到設(shè)定的閾值,如果達到閾值,將本組資源更新記錄的斷點信號發(fā)送至所述斷點設(shè)置模塊后,再發(fā)送更新信號至所述資源緩存模塊進行處理,否則,繼續(xù)監(jiān)測所述日志數(shù)據(jù)庫中資源更新記錄的增長情況;
[0024]所述斷點信息讀取單元,用于從所述斷點設(shè)置模塊中讀取資源更新記錄的斷點信息。
[0025]進一步,所述資源緩存模塊包括表單創(chuàng)建單元和記錄處理單元和更新記錄緩存區(qū);
[0026]所述表單創(chuàng)建單元,用于從所述日志數(shù)據(jù)庫中獲取本組“資源ID+屬性參數(shù)”的資源更新記錄,并根據(jù)屬性參數(shù)獲取對應(yīng)的屬性內(nèi)容,并建立〈資源ID+屬性內(nèi)容 > 信息的表單;
[0027]所述記錄處理單元,用于逐一判斷表單中的資源ID是否已存在于所述更新記錄緩存區(qū)中,如果存在,則調(diào)出原屬性內(nèi)容將其更新為表單中