要將合并因子η選擇較大,這樣可以降低單位時(shí)間內(nèi)刷入索引的合并次數(shù),反之,則將合并因子選擇較小的數(shù)。這個(gè)可以通過(guò)實(shí)際的刷入索引生成速度決定。
[0053]在刷入索引合并的過(guò)程中,參與合并的刷入索引扔對(duì)外提供搜索服務(wù),當(dāng)索引合并完成后,新生成的刷入索引開(kāi)始對(duì)外提供服務(wù)。之前參與合并的刷入索引對(duì)應(yīng)的資源引用技術(shù)減1,保證合并過(guò)程中連接到參與合并的刷入索引的查詢?cè)L問(wèn)的線程正常結(jié)束。
[0054]刷入索引合并的正常結(jié)束:參與合并的刷入索引生成合并后的新索引,新的刷入索引生成后新的查詢?cè)L問(wèn)任務(wù)連接到新的索引上,同時(shí)在合并完成之前連接到參與合并的刷入索引上的查詢?nèi)蝿?wù)正常結(jié)束后,就不再有新的查詢?cè)L問(wèn)任務(wù)連接進(jìn)來(lái)。
[0055]在合并過(guò)程中,如果出現(xiàn)了宕機(jī)或者異常情況,合并事務(wù)未正常結(jié)束,則對(duì)合并事務(wù)進(jìn)行回滾,清理掉合并后的新的刷入索引,同時(shí)參與合并的刷入索引繼續(xù)正常對(duì)外提供查詢?cè)L問(wèn)服務(wù)。
[0056]假設(shè)我們選擇的合并影響因素為2,則表示在刷入索引中存在兩個(gè)大小一樣的
[0057]時(shí)候?qū)λ⑷胨饕M(jìn)行合并?,F(xiàn)在刷入索引中存在index_flush_0和index_flush_l的大小一致,貝丨」開(kāi)始將它們合并成index_flush_2。在合并為index_flush_2的過(guò)程中,index_flush_0和index_flush_l繼續(xù)對(duì)外提供正常的服務(wù)。當(dāng)完全合并為index_flush_2 后,index_flush_2 開(kāi)始對(duì)外提供服務(wù)。同時(shí)將 index_flush_0 和 index_flush_l上的資源引用計(jì)數(shù)減1,。當(dāng)index_flush_0和index_flush_l上的查詢?cè)L問(wèn)任務(wù)線程結(jié)束后,就正常關(guān)閉索引 index_flush_0 和 index_flush_l。
[0058]步驟102,將所述合并索引與當(dāng)前的全量索引根據(jù)預(yù)設(shè)的算法進(jìn)行合并,生成新的全量索引,所述新的全量索引用于用戶進(jìn)行數(shù)據(jù)搜索。
[0059]優(yōu)選地,所述將所述合并索引與當(dāng)前的全量索引根據(jù)預(yù)設(shè)的算法進(jìn)行合并,生成新的全量索引,所述新的全量索引用于用戶進(jìn)行數(shù)據(jù)搜索,包括:
[0060]將所述合并索引與當(dāng)前的全量索引進(jìn)行合并,生成新的全量索引和新的合并任務(wù),建立所述新的全量索引和所述新的合并任務(wù)的連接;
[0061]將所述新的全量索引存儲(chǔ)到存儲(chǔ)模塊中,監(jiān)控是否完成所述當(dāng)前全量索引對(duì)應(yīng)的搜索任務(wù);
[0062]在監(jiān)控到已完成所述當(dāng)前全量對(duì)應(yīng)的搜索任務(wù)后,刪除所述當(dāng)前全量索引。
[0063]具體的,建立索引數(shù)據(jù)的索引,并將建立后的索引存儲(chǔ)到內(nèi)存的索引A區(qū),當(dāng)內(nèi)存索引A區(qū)的大小達(dá)到閾值,則將內(nèi)存索引A區(qū)的數(shù)據(jù)拷貝到索引B區(qū),將內(nèi)存索引B區(qū)的索引刷入存儲(chǔ)空間中,以子索引形式切區(qū)分于全量索引存儲(chǔ)。
[0064]當(dāng)合并索引的數(shù)量增加時(shí),將合并索引與全量索引進(jìn)行合并,生成相關(guān)的合并任務(wù)。將合并任務(wù)提交給分布式計(jì)算集群進(jìn)行合并索引和全量索引的合并,合并后的新的全量索引存儲(chǔ)到存儲(chǔ)模塊中,監(jiān)控現(xiàn)在對(duì)于舊的全量索引的搜索任務(wù),將新的搜索任務(wù)連接到新的全量索引,等待舊的全量索引上的搜索任務(wù)的完成,新的全量索引平滑切換舊的全量索引,當(dāng)全量索引切換完成,刪除舊的全量索引,新的全量索引開(kāi)始全面對(duì)外提供搜索任務(wù)。
[0065]本發(fā)明實(shí)施例通過(guò)監(jiān)控磁盤(pán)中存儲(chǔ)的刷入索引,合并滿足預(yù)設(shè)的合并策略的刷入索引,生成合并索引;將所述合并索引與當(dāng)前的全量索引根據(jù)預(yù)設(shè)的算法進(jìn)行合并,生成新的全量索引,所述新的全量索引用于用戶進(jìn)行數(shù)據(jù)搜索,通過(guò)對(duì)現(xiàn)有生成的較小的索引按照一定的規(guī)則進(jìn)行合并,從而減少較小的索引的個(gè)數(shù),當(dāng)索引碎片的大小達(dá)到一定的閾值后,則采用全量索引構(gòu)建的策略,從而降低了搜索引擎的性能消耗,影響整個(gè)搜索任務(wù)和索引建立等任務(wù)的效率。
[0066]實(shí)施例二
[0067]參考圖2,圖2是本發(fā)明建立索引的方法第二實(shí)施例的方法流程示意圖。
[0068]在實(shí)施例一中,所述方法還包括:
[0069]步驟103,判斷是否達(dá)到構(gòu)建全量索引的時(shí)間間隔,若是,則執(zhí)行將所述合并索引與當(dāng)前的全量索引根據(jù)預(yù)設(shè)的算法進(jìn)行合并,生成新的全量索引,所述新的全量索引用于用戶進(jìn)行數(shù)據(jù)搜索。
[0070]具體的,隨著索引合并任務(wù)的不斷進(jìn)行,生成的刷入索引的大小會(huì)越來(lái)越大,繼續(xù)對(duì)現(xiàn)有的刷入索引進(jìn)行合并會(huì)造成很大的性能損耗。在這種情況下,通過(guò)全量索引的構(gòu)建來(lái)解決索引合并帶來(lái)的性能損耗問(wèn)題,同時(shí)又提高了實(shí)時(shí)索引和搜索的效率。
[0071]通過(guò)設(shè)置全量索引構(gòu)建的時(shí)間周期來(lái)滿足實(shí)時(shí)索引更新和搜索服務(wù)性能的要求。對(duì)于實(shí)時(shí)索引更新速度較快,一般采取按天為單位索引更新量少的時(shí)間段進(jìn)行全量索引構(gòu)建的方法。
[0072]實(shí)施例三
[0073]參考圖3,圖3是本發(fā)明建立索引的裝置的功能模塊示意圖。
[0074]在實(shí)施例三中,所述建立索引的裝置包括:
[0075]第一生成單元301,用于監(jiān)控磁盤(pán)中存儲(chǔ)的刷入索引,合并滿足預(yù)設(shè)的合并策略的刷入索引,生成合并索引;
[0076]優(yōu)選地,所述第一生成單元301,用于:
[0077]監(jiān)控當(dāng)前磁盤(pán)中存儲(chǔ)的刷入索引文件,獲取η個(gè)大小一致的刷入索引,合并獲取到的η個(gè)大小一致的刷入索引,生成合并索引。
[0078]優(yōu)選地,所述第一生成單元301,用于:
[0079]監(jiān)控磁盤(pán)中存儲(chǔ)的刷入索引,根據(jù)所述刷入索引生成的速度預(yù)估設(shè)置合并影響因子;
[0080]當(dāng)所述刷入索引大小一致的個(gè)數(shù)達(dá)到指定的合并影響因子時(shí),則合并指定的合并影響因子的大小一致的刷入索引,生成合并索引。
[0081]具體的,在實(shí)時(shí)索引不斷生成的同時(shí),內(nèi)存中會(huì)觸發(fā)內(nèi)存索引寫(xiě)盤(pán)的動(dòng)作,當(dāng)內(nèi)存中的實(shí)時(shí)索引的大小達(dá)到一定的閾值后,則將索引寫(xiě)入到磁盤(pán)中進(jìn)行持久化,也就產(chǎn)生了刷入索引。當(dāng)寫(xiě)入磁盤(pán)的刷入索引不斷增多的時(shí)候,會(huì)導(dǎo)致搜索任務(wù)和索引任務(wù)的性能的降低。通過(guò)對(duì)現(xiàn)有的刷入索引進(jìn)行合并,減少索引文件的個(gè)數(shù),達(dá)到性能的優(yōu)化。
[0082]存儲(chǔ)到磁盤(pán)的索引文件,本文采取index_flush_0、index_flush_l......等方式命名,當(dāng)刷入的索引文件增多時(shí),這些文件就必須通過(guò)合并的方式來(lái)減少文件的個(gè)數(shù)。
[0083]對(duì)于刷入索引的合并策略:監(jiān)控當(dāng)前磁盤(pán)中存儲(chǔ)的刷入索引文件,采取當(dāng)出現(xiàn)η個(gè)大小一致的刷入索引時(shí),就對(duì)當(dāng)前的刷入索引進(jìn)行合并,其中的因子η可以通過(guò)測(cè)試進(jìn)行選擇。
[0084]合并因子η的選擇策略:刷入索引生成速度較快,則需要將合并因子η選擇較大,這樣可以降低單位時(shí)間內(nèi)刷入索引的合并次數(shù),反之,則將合并因子選擇較小的數(shù)。這個(gè)可以通過(guò)實(shí)際的刷入索引生成速度決定。
[0085]在刷入索引合并的過(guò)程中,參與合并的刷入索引扔對(duì)外提供搜索服務(wù),當(dāng)索引合并完成后,新生成的刷入索引開(kāi)始對(duì)外提供服務(wù)。之前參與合并的刷入索引對(duì)應(yīng)的資源引用技術(shù)減1,保證合并過(guò)程中連接到參與合并的刷入索引的查詢?cè)L問(wèn)的線程正常結(jié)束。
[0086]刷入索引合并的正常結(jié)束:參與合并的刷入索引生成合并后的新索引,新的刷入索引生成后新的查詢?cè)L問(wèn)任務(wù)連接到新的索引上,同時(shí)在合并完成之前連接到參與合并的刷入索引上的查詢?nèi)蝿?wù)正常結(jié)束后,就不再有新的查詢?cè)L問(wèn)任務(wù)連接進(jìn)來(lái)。
[0087]在合并過(guò)程中,如果出現(xiàn)了宕機(jī)或者異常情況,合并事務(wù)未正常結(jié)束,則對(duì)合并事務(wù)進(jìn)行回滾,清理掉合并后的新的刷入索引,同時(shí)參與合并的刷入索引繼續(xù)正常對(duì)外提供查詢?cè)L問(wèn)服務(wù)。
[0088]假設(shè)我們選擇的合并影響因素為2,則表示在刷入索引中存在兩個(gè)大小一樣的
[0089]時(shí)候?qū)λ⑷胨饕M(jìn)行合并?,F(xiàn)在刷入索引中存在index_flush_0和index_flush_l的大小一致,貝丨」開(kāi)始將它們合并成index_flush_2。在合并為index_flush_2的過(guò)程中,index_flush_0和index_flush_l繼續(xù)對(duì)外提供正常的服務(wù)。當(dāng)完全合并為index_flush_2