日韩成人黄色,透逼一级毛片,狠狠躁天天躁中文字幕,久久久久久亚洲精品不卡,在线看国产美女毛片2019,黄片www.www,一级黄色毛a视频直播

一種數(shù)據(jù)搜索方法及系統(tǒng)的制作方法

文檔序號(hào):10687120閱讀:509來(lái)源:國(guó)知局
一種數(shù)據(jù)搜索方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種數(shù)據(jù)搜索方法及系統(tǒng),方法包括:確定當(dāng)前用于數(shù)據(jù)搜索的多臺(tái)服務(wù)器;根據(jù)多臺(tái)服務(wù)器構(gòu)建分布式m×n搜索模型;在每個(gè)集群的m臺(tái)服務(wù)器中構(gòu)建索引;在接收到搜索請(qǐng)求時(shí),根據(jù)每個(gè)集群的當(dāng)前負(fù)載,將搜索請(qǐng)求分配至最小當(dāng)前負(fù)載對(duì)應(yīng)的目標(biāo)集群中的任意一臺(tái)服務(wù)器中;根據(jù)構(gòu)建的索引確定出搜索請(qǐng)求對(duì)應(yīng)的第一索引,并根據(jù)第一索引提供目標(biāo)數(shù)據(jù)。根據(jù)本方案,通過(guò)構(gòu)建分布式m×n搜索模型,并在搜索模型的每一個(gè)集群中均構(gòu)建索引,在接收到搜索請(qǐng)求時(shí)將搜索請(qǐng)求分配給最小當(dāng)前負(fù)載對(duì)應(yīng)的集群中的任意一臺(tái)服務(wù)器,以實(shí)現(xiàn)負(fù)載均衡,降低集群內(nèi)服務(wù)器所承受的壓力,進(jìn)而提高數(shù)據(jù)搜索效率。
【專利說(shuō)明】
一種數(shù)據(jù)搜索方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及搜索引擎技術(shù)領(lǐng)域,特別涉及一種數(shù)據(jù)搜索方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)技術(shù)的高速發(fā)展,用戶越來(lái)越關(guān)注如何以最快的時(shí)間獲取實(shí)效數(shù)據(jù),以從實(shí)效數(shù)據(jù)中挖掘到有價(jià)值的信息。
[0003]傳統(tǒng)的信息搜索技術(shù)是通過(guò)在服務(wù)器中建立與各個(gè)數(shù)據(jù)源相對(duì)應(yīng)的索引,在該服務(wù)器接收到搜索請(qǐng)求時(shí),根據(jù)該搜索請(qǐng)求查找相應(yīng)索引,并根據(jù)索引確定數(shù)據(jù)源位置。
[0004]然而,在搜索請(qǐng)求的個(gè)數(shù)較多時(shí),服務(wù)器的搜索能力無(wú)法承受住較多的搜索請(qǐng)求,從而影響搜索效率。

【發(fā)明內(nèi)容】

[0005]本發(fā)明實(shí)施例提供了一種數(shù)據(jù)搜索方法及系統(tǒng),以提高搜索效率。
[0006]第一方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)搜索方法,包括:
[0007]確定當(dāng)前用于數(shù)據(jù)搜索的多臺(tái)服務(wù)器;
[0008]根據(jù)所述多臺(tái)服務(wù)器構(gòu)建分布式mXn搜索模型;其中,η用于表征搜索模型包括的集群個(gè)數(shù),m用于表征每個(gè)集群中包括的服務(wù)器數(shù)量;η多I ;m多I;
[0009]在每個(gè)集群的m臺(tái)服務(wù)器中構(gòu)建索引;
[0010]在接收到搜索請(qǐng)求時(shí),根據(jù)每個(gè)集群的當(dāng)前負(fù)載,將所述搜索請(qǐng)求分配至最小當(dāng)前負(fù)載對(duì)應(yīng)的目標(biāo)集群中的任意一臺(tái)服務(wù)器中;
[0011]根據(jù)構(gòu)建的索引確定出所述搜索請(qǐng)求對(duì)應(yīng)的第一索引,并根據(jù)所述第一索引提供目標(biāo)數(shù)據(jù)。
[0012]優(yōu)選地,所述根據(jù)所述多臺(tái)服務(wù)器構(gòu)建分布式mX η搜索模型,包括:
[0013]通過(guò)下述公式計(jì)算η的值:n = S/T;
[0014]其中,S用于表征索引總量;T用于表征單臺(tái)服務(wù)器承載的最大索引量;
[0015]通過(guò)下述公式計(jì)算m的值:m = Q/R+X;
[0016]其中,Q用于表征搜索請(qǐng)求總量;R用于表征單臺(tái)服務(wù)器承載的最大搜索請(qǐng)求量;X用于表征機(jī)器增量。
[0017]優(yōu)選地,
[0018]進(jìn)一步包括:在當(dāng)前集群中的m臺(tái)服務(wù)器的數(shù)量不小于2時(shí),在所述當(dāng)前集群的m臺(tái)服務(wù)器中確定主服務(wù)器和從服務(wù)器;
[0019]所述在每個(gè)集群的m臺(tái)服務(wù)器中構(gòu)建索引,包括:在主服務(wù)器中構(gòu)建主磁盤(pán)索引,并每構(gòu)建一條主磁盤(pán)索引,更新CommitLog日志文件;在從服務(wù)器中設(shè)定同步周期,并根據(jù)設(shè)定的同步周期,將主服務(wù)器中構(gòu)建的主磁盤(pán)索引和CommitLog日志文件同步到從服務(wù)器中,并在從服務(wù)器中根據(jù)CommitLog日志文件將搜索量最大的主磁盤(pán)索引構(gòu)建為內(nèi)存索引,并在內(nèi)存索引量大于設(shè)定閾值時(shí),按照內(nèi)存索引的構(gòu)建時(shí)間,將最先構(gòu)建的內(nèi)存索引刷新為從磁盤(pán)索引,以使內(nèi)存索引量不大于所述設(shè)定閾值。
[0020]優(yōu)選地,
[0021]所述在主服務(wù)器中構(gòu)建主磁盤(pán)索引,包括:
[0022]在主服務(wù)器中根據(jù)預(yù)先設(shè)定的索引構(gòu)建周期,觸發(fā)全量dump程序,并記錄此時(shí)的開(kāi)始時(shí)間點(diǎn);
[0023]確定對(duì)應(yīng)于數(shù)據(jù)源的數(shù)據(jù);
[0024]在每獲取到對(duì)應(yīng)于數(shù)據(jù)源的當(dāng)前數(shù)據(jù)之后,判斷是否存在下一條數(shù)據(jù),若判斷結(jié)果包括存在,則采用迭代器模型,利用DataProvider接口,獲取對(duì)應(yīng)于數(shù)據(jù)源的下一條數(shù)據(jù),并構(gòu)建一條相應(yīng)的Map記錄,并繼續(xù)執(zhí)行步驟,直到判斷結(jié)果包括不存在為止;
[0025]將構(gòu)建的多條Map記錄封裝為相應(yīng)的Map對(duì)象,并利用封裝好的Map對(duì)象構(gòu)建添加批量更新對(duì)象,并將該批量更新對(duì)象刷新至主磁盤(pán)索引;
[0026]根據(jù)記錄的所述開(kāi)始時(shí)間點(diǎn)以及當(dāng)前時(shí)間點(diǎn),對(duì)從所述開(kāi)始時(shí)間點(diǎn)至所述當(dāng)前時(shí)間點(diǎn)之間的時(shí)間段內(nèi)的增量數(shù)據(jù)刷新至主磁盤(pán)索弓I。
[0027]優(yōu)選地,進(jìn)一步包括:在主服務(wù)器接收到針對(duì)第二索引的實(shí)時(shí)請(qǐng)求時(shí),針對(duì)所述第二索引執(zhí)行所述實(shí)時(shí)請(qǐng)求對(duì)應(yīng)的操作,并將執(zhí)行的操作更新到CommitLog日志文件中;與該主服務(wù)器從屬于同一集群的從服務(wù)器根據(jù)同步到的Commi tLog日志文件中更新的操作構(gòu)建相應(yīng)的內(nèi)存索引;
[0028]所述實(shí)時(shí)請(qǐng)求包括:刪除請(qǐng)求、添加請(qǐng)求、更新請(qǐng)求、批量刪除請(qǐng)求、批量添加請(qǐng)求和批量更新請(qǐng)求。
[0029]第二方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)搜索系統(tǒng),包括:
[0030]第一確定單元,用于確定當(dāng)前用于數(shù)據(jù)搜索的多臺(tái)服務(wù)器;
[0031]搜索模型構(gòu)建單元,用于根據(jù)所述多臺(tái)服務(wù)器構(gòu)建分布式mXn搜索模型;其中,η用于表征搜索模型包括的集群個(gè)數(shù),m用于表征每個(gè)集群中包括的服務(wù)器數(shù)量;η多I ;m多I;
[0032]索引構(gòu)建單元,用于在每個(gè)集群的m臺(tái)服務(wù)器中構(gòu)建索引;
[0033]分配單元,用于在接收到搜索請(qǐng)求時(shí),根據(jù)每個(gè)集群的當(dāng)前負(fù)載,將所述搜索請(qǐng)求分配至最小當(dāng)前負(fù)載對(duì)應(yīng)的目標(biāo)集群中的任意一臺(tái)服務(wù)器中;
[0034]搜索單元,用于根據(jù)構(gòu)建的索引確定出所述搜索請(qǐng)求對(duì)應(yīng)的第一索引,并根據(jù)所述第一索引提供目標(biāo)數(shù)據(jù)。
[0035]優(yōu)選地,所述搜索模型構(gòu)建單元,具體用于:
[0036]通過(guò)下述公式計(jì)算η的值:n = S/T;
[0037]其中,S用于表征索引總量;T用于表征單臺(tái)服務(wù)器承載的最大索引量;
[0038]通過(guò)下述公式計(jì)算m的值:m = Q/R+X;
[0039]其中,Q用于表征搜索請(qǐng)求總量;R用于表征單臺(tái)服務(wù)器承載的最大搜索請(qǐng)求量;X用于表征機(jī)器增量。
[0040]優(yōu)選地,
[0041 ]進(jìn)一步包括:第二確定單元,用于在當(dāng)前集群中的m臺(tái)服務(wù)器的數(shù)量不小于2時(shí),在所述當(dāng)前集群的m臺(tái)服務(wù)器中確定主服務(wù)器和從服務(wù)器;
[0042]所述索引構(gòu)建單元,具體用于在主服務(wù)器中構(gòu)建主磁盤(pán)索引,并每構(gòu)建一條主磁盤(pán)索引,更新CommitLog日志文件;在從服務(wù)器中設(shè)定同步周期,并根據(jù)設(shè)定的同步周期,將主服務(wù)器中構(gòu)建的主磁盤(pán)索引和CommitLog日志文件同步到從服務(wù)器中,并在從服務(wù)器中根據(jù)CommitLog日志文件將搜索量最大的主磁盤(pán)索引構(gòu)建為內(nèi)存索引,并在內(nèi)存索引量大于設(shè)定閾值時(shí),按照內(nèi)存索引的構(gòu)建時(shí)間,將最先構(gòu)建的內(nèi)存索引刷新為從磁盤(pán)索引,以使內(nèi)存索引量不大于所述設(shè)定閾值。
[0043]優(yōu)選地,
[0044]所述索引構(gòu)建單元,具體用于:
[0045]在主服務(wù)器中根據(jù)預(yù)先設(shè)定的索引構(gòu)建周期,觸發(fā)全量dump程序,并記錄此時(shí)的開(kāi)始時(shí)間點(diǎn);
[0046]確定對(duì)應(yīng)于數(shù)據(jù)源的數(shù)據(jù);
[0047]在每獲取到對(duì)應(yīng)于數(shù)據(jù)源的當(dāng)前數(shù)據(jù)之后,判斷是否存在下一條數(shù)據(jù),若判斷結(jié)果包括存在,則采用迭代器模型,利用DataProvider接口,獲取對(duì)應(yīng)于數(shù)據(jù)源的下一條數(shù)據(jù),并構(gòu)建一條相應(yīng)的Map記錄,并繼續(xù)執(zhí)行步驟,直到判斷結(jié)果包括不存在為止;
[0048]將構(gòu)建的多條Map記錄封裝為相應(yīng)的Map對(duì)象,并利用封裝好的Map對(duì)象構(gòu)建添加批量更新對(duì)象,并將該批量更新對(duì)象刷新至主磁盤(pán)索引;
[0049]根據(jù)記錄的所述開(kāi)始時(shí)間點(diǎn)以及當(dāng)前時(shí)間點(diǎn),對(duì)從所述開(kāi)始時(shí)間點(diǎn)至所述當(dāng)前時(shí)間點(diǎn)之間的時(shí)間段內(nèi)的增量數(shù)據(jù)刷新至主磁盤(pán)索弓I。
[0050]優(yōu)選地,進(jìn)一步包括:
[0051 ]實(shí)時(shí)更新單元,用于在主服務(wù)器接收到針對(duì)第二索引的實(shí)時(shí)請(qǐng)求時(shí),針對(duì)所述第二索引執(zhí)行所述實(shí)時(shí)請(qǐng)求對(duì)應(yīng)的操作,并將執(zhí)行的操作更新到CommitLog日志文件中;與該主服務(wù)器從屬于同一集群的從服務(wù)器根據(jù)同步到的Commi tLog日志文件中更新的操作構(gòu)建相應(yīng)的內(nèi)存索引;
[0052 ]所述實(shí)時(shí)請(qǐng)求包括:刪除請(qǐng)求、添加請(qǐng)求、更新請(qǐng)求、批量刪除請(qǐng)求、批量添加請(qǐng)求和批量更新請(qǐng)求。
[0053]本發(fā)明實(shí)施例提供了一種數(shù)據(jù)搜索方法及系統(tǒng),通過(guò)構(gòu)建分布式m X η搜索模型,并在搜索模型的每一個(gè)集群中均構(gòu)建索引,在接收到搜索請(qǐng)求時(shí)將搜索請(qǐng)求分配給最小當(dāng)前負(fù)載對(duì)應(yīng)的集群中的任意一臺(tái)服務(wù)器,以實(shí)現(xiàn)負(fù)載均衡,降低集群內(nèi)服務(wù)器所承受的壓力,進(jìn)而提高數(shù)據(jù)搜索效率。
【附圖說(shuō)明】
[0054]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0055]圖1是本發(fā)明一個(gè)實(shí)施例提供的一種方法流程圖;
[0056]圖2是本發(fā)明一個(gè)實(shí)施例提供的另一種方法流程圖;
[0057]圖3是本發(fā)明一個(gè)實(shí)施例提供的Xsolr與Solr系統(tǒng)的性能指標(biāo)對(duì)比結(jié)果示意圖;
[0058]圖4是本發(fā)明一個(gè)實(shí)施例提供的Xsolr的數(shù)據(jù)一致性與容災(zāi)示意圖;
[0059]圖5是本發(fā)明一個(gè)實(shí)施例提供的一種系統(tǒng)結(jié)構(gòu)示意圖;
[0060]圖6是本發(fā)明一個(gè)實(shí)施例提供的另一種系統(tǒng)結(jié)構(gòu)示意圖;
[0061]圖7是本發(fā)明一個(gè)實(shí)施例提供的另一種系統(tǒng)結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0062]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例,基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0063]如圖1所示,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)搜索方法,該方法可以包括以下步驟:
[0064]步驟101:確定當(dāng)前用于數(shù)據(jù)搜索的多臺(tái)服務(wù)器;
[0065]步驟102:根據(jù)所述多臺(tái)服務(wù)器構(gòu)建分布式mXn搜索模型;其中,η用于表征搜索模型包括的集群個(gè)數(shù),m用于表征每個(gè)集群中包括的服務(wù)器數(shù)量;η多I ;m多I;
[0066]步驟103:在每個(gè)集群的m臺(tái)服務(wù)器中構(gòu)建索引;
[0067]步驟104:在接收到搜索請(qǐng)求時(shí),根據(jù)每個(gè)集群的當(dāng)前負(fù)載,將所述搜索請(qǐng)求分配至最小當(dāng)前負(fù)載對(duì)應(yīng)的目標(biāo)集群中的任意一臺(tái)服務(wù)器中;
[0068]步驟105:根據(jù)構(gòu)建的索引確定出所述搜索請(qǐng)求對(duì)應(yīng)的第一索引,并根據(jù)所述第一索引提供目標(biāo)數(shù)據(jù)。
[0069]根據(jù)上述方案,通過(guò)構(gòu)建分布式mX η搜索模型,并在搜索模型的每一個(gè)集群中均構(gòu)建索引,在接收到搜索請(qǐng)求時(shí)將搜索請(qǐng)求分配給最小當(dāng)前負(fù)載對(duì)應(yīng)的集群中的任意一臺(tái)服務(wù)器,以實(shí)現(xiàn)負(fù)載均衡,降低集群內(nèi)服務(wù)器所承受的壓力,進(jìn)而提高數(shù)據(jù)搜索效率。
[0070]在本發(fā)明一個(gè)實(shí)施例中,為了保證集群中某一臺(tái)服務(wù)器宕機(jī)后,該集群可以保證搜索服務(wù)的可用性,可以進(jìn)一步包括:在當(dāng)前集群中的m臺(tái)服務(wù)器的數(shù)量不小于2時(shí),在所述當(dāng)前集群的m臺(tái)服務(wù)器中確定主服務(wù)器和從服務(wù)器;
[0071]所述在每個(gè)集群的m臺(tái)服務(wù)器中構(gòu)建索引,包括:在主服務(wù)器中構(gòu)建主磁盤(pán)索引,并每構(gòu)建一條主磁盤(pán)索引,更新CommitLog日志文件;在從服務(wù)器中設(shè)定同步周期,并根據(jù)設(shè)定的同步周期,將主服務(wù)器中構(gòu)建的主磁盤(pán)索引和CommitLog日志文件同步到從服務(wù)器中,并在從服務(wù)器中根據(jù)CommitLog日志文件將搜索量最大的主磁盤(pán)索引構(gòu)建為內(nèi)存索引,并在內(nèi)存索引量大于設(shè)定閾值時(shí),按照內(nèi)存索引的構(gòu)建時(shí)間,將最先構(gòu)建的內(nèi)存索引刷新為從磁盤(pán)索引,以使內(nèi)存索引量不大于所述設(shè)定閾值。
[0072]在本發(fā)明一個(gè)實(shí)施例中,為了進(jìn)一步提高數(shù)據(jù)搜索的效率,可以進(jìn)一步包括:建立索引分類規(guī)則;
[0073]在所述在每個(gè)集群的m臺(tái)服務(wù)器中構(gòu)建索引之后,進(jìn)一步包括:將構(gòu)建的主磁盤(pán)索引按照所述索引分類規(guī)則分成多個(gè)分組,每一個(gè)分組對(duì)應(yīng)相應(yīng)的索引類型;
[0074]所述根據(jù)構(gòu)建的索引確定出所述搜索請(qǐng)求對(duì)應(yīng)的第一索引,包括:確定所述搜索請(qǐng)求對(duì)應(yīng)的目標(biāo)索引類型,并根據(jù)所述目標(biāo)索引類型在相應(yīng)的分組內(nèi)遍歷每一條主磁盤(pán)索弓丨,以確定所述第一索引。如此,可以縮小索弓I的搜索范圍,從而提高索弓I搜索的效率。
[0075]如圖2所示,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)搜索方法,該方法可以包括以下步驟:
[0076]步驟201:確定當(dāng)前用于數(shù)據(jù)搜索的多臺(tái)服務(wù)器。
[0077]本實(shí)施例以100臺(tái)服務(wù)器為例進(jìn)行說(shuō)明。
[0078]步驟202:根據(jù)分組路由,將該多臺(tái)服務(wù)器分成多個(gè)集群組。
[0079]在本實(shí)施例中,可以根據(jù)系統(tǒng)需求,將當(dāng)前用于數(shù)據(jù)搜索的多臺(tái)服務(wù)器分成多個(gè)集群組,其中,該分組方式可以根據(jù)GroupFilter分組路由來(lái)實(shí)現(xiàn)。例如,將該100臺(tái)服務(wù)器分成兩個(gè)集群組,第一個(gè)集群組40臺(tái)服務(wù)器,第二集群組60臺(tái)服務(wù)器。其中,第一個(gè)集群組用于對(duì)用戶ID為北京的搜索請(qǐng)求實(shí)現(xiàn)相應(yīng)數(shù)據(jù)的搜索服務(wù)器,第二集群組用于對(duì)用戶ID為河北省的搜索請(qǐng)求實(shí)現(xiàn)相應(yīng)數(shù)據(jù)的搜索服務(wù)器。
[0080]步驟203:針對(duì)每一個(gè)集群組,將該集群組內(nèi)的服務(wù)器分成η個(gè)集群,每一個(gè)集群中包括m臺(tái)服務(wù)器。
[0081]η和m的值主要取決于如下兩個(gè)因素:
[0082 ] 1、單臺(tái)服務(wù)器承載的最大搜索請(qǐng)求量。
[0083]其中,單臺(tái)服務(wù)器的索引容量由磁盤(pán)容量決定。在建立新索引的過(guò)程中涉及索引的合并,舊的索引繼續(xù)提供索引服務(wù),此時(shí)的磁盤(pán)容量為:一份新索引+—份正提供服務(wù)的索弓I+索引合并所需磁盤(pán)空間,磁盤(pán)容量至少為索引容量的3倍。
[0084]其中,單臺(tái)服務(wù)器能承受的搜索請(qǐng)求量可以通過(guò)壓力測(cè)試獲取。當(dāng)機(jī)器負(fù)載(load)值等于服務(wù)器的CPU核數(shù)時(shí),服務(wù)器所能承受的TPS(每秒搜索請(qǐng)求量)為壓力測(cè)試的峰值,如對(duì)于4核的服務(wù)器,通常在load = 4時(shí)的TPS為其單機(jī)所能承受的最高值。
[0085]2、索引總量和搜索請(qǐng)求總量。
[0086]下面可以公式(I)和公式(2)分別計(jì)算分組內(nèi)集群個(gè)數(shù)n,以及每一個(gè)集群內(nèi)服務(wù)器的臺(tái)數(shù)m:
[0087]n = S/T; (I)
[0088]m = Q/R+X; (2)
[0089]其中,S用于表征索引總量;T用于表征單臺(tái)服務(wù)器承載的最大索引量;Q用于表征搜索請(qǐng)求總量;R用于表征單臺(tái)服務(wù)器承載的最大搜索請(qǐng)求量;X用于表征機(jī)器增量。
[0090]步驟204:在每一個(gè)集群包括的m臺(tái)服務(wù)器中確定主服務(wù)器和從服務(wù)器。
[0091 ]在本發(fā)明一個(gè)實(shí)施例中,在同一個(gè)集群中,每一臺(tái)服務(wù)器分別向集群內(nèi)其他服務(wù)器發(fā)布感知服務(wù),以確保兩兩感知。
[0092]其中,集群中的每一臺(tái)服務(wù)器均提供搜索服務(wù),當(dāng)集群中m不小于2時(shí),可以在該集群中確定主(Master)服務(wù)器和從(Slave)服務(wù)器,其中,可以在該集群中確定一臺(tái)Master服務(wù)器,剩余的服務(wù)器作為Slave服務(wù)器;當(dāng)集群中m等于I時(shí),可以將該集群中的服務(wù)器作為Master服務(wù)器。
[0093]步驟205:在每一個(gè)集群的所有服務(wù)器中構(gòu)建索引。
[0094]在本實(shí)施例中,可以構(gòu)建如下三個(gè)部分的索引:主磁盤(pán)索引、內(nèi)存索引和從磁盤(pán)索引。
[0095]其中,磁盤(pán)+內(nèi)存的索引結(jié)構(gòu)可以保證新增索引即時(shí)展現(xiàn)。Master服務(wù)器負(fù)責(zé)主磁盤(pán)索引的建立,并每建立一條主磁盤(pán)索引更新一次CommitLog日志文件,由Slave服務(wù)器同步主磁盤(pán)索引和CommitLog日志文件,以保證索引數(shù)據(jù)不被丟失,并在構(gòu)建的內(nèi)存索引到達(dá)設(shè)定閾值后將最先構(gòu)建的內(nèi)存索引刷新到從磁盤(pán)索引,保證可用性。
[0096]索引的構(gòu)建采用全量dump+實(shí)時(shí)增量dump的模型構(gòu)建。其中,全量dump采用時(shí)間周期任務(wù)定期執(zhí)行,實(shí)時(shí)增量dump由實(shí)時(shí)調(diào)用接口生成,下面對(duì)實(shí)時(shí)索引的構(gòu)建過(guò)程進(jìn)行詳細(xì)說(shuō)明。
[0097](I)主磁盤(pán)索引的構(gòu)建
[0098]預(yù)先設(shè)定索引構(gòu)建周期,例如,設(shè)定該索引構(gòu)建周期為I周。主服務(wù)器根據(jù)索引構(gòu)建周期定時(shí)觸發(fā)全量dump程序,以實(shí)現(xiàn)主磁盤(pán)索引的構(gòu)建,該構(gòu)建過(guò)程如下:
[0099]確定對(duì)應(yīng)于數(shù)據(jù)源的數(shù)據(jù),該數(shù)據(jù)源可以是網(wǎng)絡(luò)爬蟲(chóng)抓取的信息、各種存儲(chǔ)系統(tǒng)(例如,數(shù)據(jù)庫(kù)、文件、NOSQL系統(tǒng)等)。主磁盤(pán)索引的建立可以采用迭代器模型,利用DataProvider接口,首先利用hasNext ()判斷下一條數(shù)據(jù)是否存在,若存在則用next ()方法取下一條數(shù)據(jù),構(gòu)建并返回一條Map記錄,直至hasNext ()方法返回為f alse,結(jié)束整個(gè)迭代過(guò)程。Map記錄對(duì)應(yīng)一篇索引文檔,Map的〈key ,value〉鍵值對(duì)對(duì)應(yīng)于文檔的域和域值。將Map記錄封裝為相應(yīng)的Map對(duì)象,利用封裝好的Map對(duì)象構(gòu)建So Ir的AddUpdateCommand (添加批量更新)對(duì)象,最后調(diào)用SoIr的UpdateHandle.addDoc()方法添加文檔至索引,從而完成主磁盤(pán)索引的構(gòu)建。
[0100]在本發(fā)明一個(gè)實(shí)施例中,主磁盤(pán)索引的構(gòu)建過(guò)程中,會(huì)有增量的實(shí)時(shí)索引產(chǎn)生,因此,需要補(bǔ)全在全量dump執(zhí)行期間的增量數(shù)據(jù),其中,可以通過(guò)時(shí)間點(diǎn)機(jī)制來(lái)補(bǔ)全該實(shí)時(shí)索引:可以在主磁盤(pán)索引的構(gòu)建過(guò)程開(kāi)始時(shí),記錄一個(gè)開(kāi)始時(shí)間點(diǎn)checkpoint,主磁盤(pán)索引建立完成后,根據(jù)當(dāng)前時(shí)間點(diǎn),對(duì)從開(kāi)始時(shí)間點(diǎn)至當(dāng)前時(shí)間點(diǎn)之間的時(shí)間段內(nèi)的增量數(shù)據(jù)刷新至主磁盤(pán)索引。
[0101]為了保證在集群中一臺(tái)Master服務(wù)器宕機(jī)后,該集群中其他服務(wù)器可以繼續(xù)提供搜索服務(wù),需要在Slave服務(wù)器進(jìn)行主磁盤(pán)索引的同步,該過(guò)程如下=Master服務(wù)器的主磁盤(pán)索引構(gòu)建完成后,通知Slave服務(wù)器進(jìn)行主磁盤(pán)索引的拷貝,并將checkpoint傳遞給Slave服務(wù)器,Slave服務(wù)器完成主磁盤(pán)索引的構(gòu)建工作后通知Master服務(wù)器,并利用構(gòu)建的主磁盤(pán)索引提供搜索服務(wù)。
[0102](2)實(shí)時(shí)索引構(gòu)建
[0103]在本實(shí)施例中,實(shí)時(shí)索引構(gòu)建可以包含內(nèi)存索引的構(gòu)建和從磁盤(pán)索引的構(gòu)建兩個(gè)部分,其中,該實(shí)現(xiàn)過(guò)程如下:
[0104]A:內(nèi)存索引的構(gòu)建。
[0105]對(duì)于實(shí)時(shí)請(qǐng)求可以來(lái)自于數(shù)據(jù)源(與主磁盤(pán)索引相同),也可以來(lái)自客戶端的實(shí)時(shí)接口調(diào)用。以實(shí)時(shí)接口調(diào)用為例,客戶端調(diào)用Real-t imeBean類的實(shí)時(shí)方法發(fā)送請(qǐng)求。其中,實(shí)時(shí)請(qǐng)求方法分為Add(添加)、Update (更新)、DeIete (刪除)、mAdd(批量添加)、mUpdate (批量更新)、mDelete(批量刪除)。服務(wù)器端接收該實(shí)時(shí)請(qǐng)求,將該實(shí)時(shí)請(qǐng)求封裝為DocumentRequest對(duì)象添加到CommitLog日志文件中。
[Ο?Ο?] Slave服務(wù)器啟動(dòng)時(shí)創(chuàng)建實(shí)時(shí)索引的構(gòu)建進(jìn)程1^31-1:;
[1116]013,不斷輪循(:0111111;[讓(^日志文件,一旦有新的記錄產(chǎn)生即進(jìn)行寫(xiě)索引操作,根據(jù)請(qǐng)求類型的不同,分別調(diào)用Solr的UpdateHandler的相應(yīng)方法建立內(nèi)存索引。
[0107]B:從磁盤(pán)索引的構(gòu)建。內(nèi)存索引受限于內(nèi)存大小,所以需要設(shè)定閾值,防止內(nèi)存索引過(guò)大撐爆內(nèi)存或者影響其他應(yīng)用。當(dāng)內(nèi)存索引大于該設(shè)定閾值時(shí),新開(kāi)一個(gè)內(nèi)存索引,新來(lái)的實(shí)時(shí)請(qǐng)求寫(xiě)入新的內(nèi)存索引,同時(shí)將舊的內(nèi)存索引刷新至從磁盤(pán)。利用內(nèi)存索引與從磁盤(pán)索引結(jié)構(gòu)完全相同的特性,調(diào)用Directory的copy方法直接將內(nèi)存索引拷貝至磁盤(pán),形成從磁盤(pán)索引,提升搜索性能,實(shí)現(xiàn)立即搜索。
[0108]步驟206:接收用戶發(fā)送的實(shí)時(shí)請(qǐng)求,根據(jù)該實(shí)時(shí)請(qǐng)求的地址信息,確定該實(shí)時(shí)請(qǐng)求對(duì)應(yīng)的集群組。
[0109]例如,該實(shí)時(shí)請(qǐng)求對(duì)應(yīng)的地址信息為北京,那么確定該實(shí)時(shí)請(qǐng)求對(duì)應(yīng)的集群組為第一集群組。
[0110]步驟207:根據(jù)該集群組內(nèi)每個(gè)集群的當(dāng)前負(fù)載,將該實(shí)時(shí)請(qǐng)求分配至最小當(dāng)前負(fù)載對(duì)應(yīng)的目標(biāo)集群中的任意一臺(tái)服務(wù)器中。
[0111]為了實(shí)現(xiàn)負(fù)載均衡,提高對(duì)實(shí)時(shí)請(qǐng)求的響應(yīng)效率,可以將該實(shí)時(shí)請(qǐng)求分配至最小當(dāng)前負(fù)載對(duì)應(yīng)的目標(biāo)集群中的任意一臺(tái)服務(wù)器中。
[0112]步驟208:根據(jù)實(shí)時(shí)請(qǐng)求的類型,對(duì)該實(shí)時(shí)請(qǐng)求進(jìn)行響應(yīng)。
[0113]在本實(shí)施例中,該實(shí)時(shí)請(qǐng)求可以包括:搜索請(qǐng)求、刪除請(qǐng)求、添加請(qǐng)求、更新請(qǐng)求、批量刪除請(qǐng)求、批量添加請(qǐng)求和批量更新請(qǐng)求。
[0114]下面分別針對(duì)上述幾類實(shí)時(shí)請(qǐng)求進(jìn)行詳細(xì)說(shuō)明。
[0115](I)搜索請(qǐng)求
[0116]接收到該搜索請(qǐng)求的服務(wù)器執(zhí)行如下操作:對(duì)于單組搜索,則根據(jù)該搜索請(qǐng)求,對(duì)主磁盤(pán)索引、內(nèi)存索引、從磁盤(pán)索引進(jìn)行全面搜索,其中,需要將搜索結(jié)果過(guò)濾掉被刪除的文檔。其中,被刪除文檔的doc Id存儲(chǔ)在de ILi st集合中。對(duì)于多組搜索則利用SoIr的shard概念對(duì)多組的結(jié)果集作合并操作,任意選定分組集中的一組,通過(guò)TCP/IP協(xié)議進(jìn)行訪問(wèn),此時(shí)利用Solr提供的EmbeddedSolrServer獲取當(dāng)前組索引,并向其他組發(fā)送TCP/IP請(qǐng)求,獲取索引數(shù)據(jù)并進(jìn)行索引的merge操作,提高索引獲取速度。
[0117](2)添加請(qǐng)求、刪除請(qǐng)求和更新請(qǐng)求
[0118]A:添加請(qǐng)求??蛻舳税l(fā)出Add命令,將其封裝成添加請(qǐng)求寫(xiě)入CommitLog日志文件中。IndexBui IdJob構(gòu)建索引時(shí)進(jìn)行判斷,如為AddDocumentRequest請(qǐng)求,提取索引數(shù)據(jù)信息轉(zhuǎn)換為3011'的六(1(11^(1&七6(]0_&11(1對(duì)象,最后調(diào)用So Ir的UpdateHandle的AddDoc O命令,實(shí)現(xiàn)索引數(shù)據(jù)的添加。
[0119]B:刪除請(qǐng)求??蛻舳税l(fā)出D e I e t e命令,將其封裝成刪除請(qǐng)求DeleteDocumentRequest寫(xiě)入CommitLog 日志文件中。在Lucene搜索引擎中有Indexfciter和IndexReader兩個(gè)對(duì)象可以做刪除動(dòng)作,區(qū)別在于IndexWri ter實(shí)例中刪除的內(nèi)容被緩存起來(lái),并不會(huì)馬上生效。搜索引擎接收實(shí)時(shí)刪除請(qǐng)求后,如果待刪除的文檔在內(nèi)存中,則用IndexWriter直接進(jìn)行刪除,否則在磁盤(pán)索引(即主磁盤(pán)索引和從磁盤(pán)索引)做標(biāo)志刪除,將文檔保存至待刪除的集合delList中。在內(nèi)存索引提交時(shí),調(diào)用Indexfciter的commit()方法,再調(diào)用磁盤(pán)索引的IndexReader方法逐個(gè)刪除delList集合的元素。
[0120]C:更新請(qǐng)求。與Add命令相同,客戶端發(fā)出Update命令會(huì)被封裝為UpdateDocumentRequest請(qǐng)求,寫(xiě)入CommitLog日志中。IndexBuiIdJob構(gòu)建索引時(shí),將索引數(shù)據(jù)信息轉(zhuǎn)換為AddUpdateCommand,同時(shí)設(shè)置Al lowDups為f al se,即不允許索引數(shù)據(jù)重復(fù)。此時(shí)Solr會(huì)首先判斷索引是否已存在,有則刪除,然后進(jìn)行添加操作,完成更新。
[0121]利用下述實(shí)驗(yàn)下面對(duì)本發(fā)明上述實(shí)施例中的搜索模型進(jìn)行驗(yàn)證,其中,該實(shí)驗(yàn)由10臺(tái)服務(wù)器組成,分為5組,每組一主一備。服務(wù)器配置為Intel〇RXeon〇R4核CPUE552002.276取、內(nèi)存468、6068硬盤(pán)7200轉(zhuǎn)。索引總量為6068、單臺(tái)服務(wù)器1268,實(shí)驗(yàn)數(shù)據(jù)取平均值。
[0122]實(shí)驗(yàn)實(shí)現(xiàn)的原型系統(tǒng)為Xsolr,對(duì)比系統(tǒng)為Solr,數(shù)據(jù)集為4000萬(wàn)個(gè)文檔,每個(gè)文檔由22個(gè)域構(gòu)成,平均大小為0.03KB,測(cè)試工具為L(zhǎng)oadRunner。實(shí)驗(yàn)結(jié)果分兩部分,第一組實(shí)驗(yàn)為Xsolr與Solr系統(tǒng)的性能指標(biāo)對(duì)比,請(qǐng)參考圖3;第二組實(shí)驗(yàn)為Xsolr的數(shù)據(jù)一致性與容災(zāi),請(qǐng)參考圖4。
[0123]A:實(shí)時(shí)響應(yīng)性能。根據(jù)圖3可知,Xsolr的TPS和響應(yīng)時(shí)間在4種測(cè)試條件下的性能均好于Solr。實(shí)時(shí)更新的請(qǐng)求響應(yīng)時(shí)間均在Is以內(nèi)。因?yàn)閄solr更新操作在內(nèi)存進(jìn)行,索引在內(nèi)存進(jìn)行建立,而且不與磁盤(pán)索引進(jìn)行合并,同時(shí)搜索內(nèi)存和磁盤(pán)索引,減少磁盤(pán)1/0,加速了實(shí)時(shí)索引數(shù)據(jù)展示的速度。
[0124]B:負(fù)載分析。在系統(tǒng)負(fù)載接近的情況下,Xsolr的CPU更加消耗資源。因?yàn)閄solr會(huì)建立內(nèi)存索引,實(shí)驗(yàn)環(huán)境下占用大量?jī)?nèi)存,最高時(shí)達(dá)到1GBXPU使用率最高在30%左右,此時(shí)索引的更新TPS高達(dá)2100,大量占用內(nèi)存,但是機(jī)器負(fù)載仍小于4,在可接受的范圍內(nèi)。
[0125]C:數(shù)據(jù)一致性。根據(jù)圖4可知,前15s內(nèi),單臺(tái)服務(wù)器分別進(jìn)行添加、更新、刪除操作,Master/Slave服務(wù)器數(shù)據(jù)保持一致,有極細(xì)微區(qū)別。實(shí)時(shí)操作時(shí),Slave不間斷地從Master機(jī)器中拉取增量Commi tLog日志文件,進(jìn)行消費(fèi)創(chuàng)建實(shí)時(shí)索引,保證主備服務(wù)器數(shù)據(jù)的一致性。但是由于CommitLog是順序?qū)懭耄覐腗aster機(jī)器拷貝文件有一定的網(wǎng)絡(luò)開(kāi)銷,所以會(huì)出、現(xiàn)極細(xì)微的區(qū)別,在毫秒級(jí)別實(shí)現(xiàn)最終一致性,對(duì)系統(tǒng)整體服務(wù)影響極小,在可接受的范圍內(nèi)。
[0126]D:數(shù)據(jù)容災(zāi)及完整性。17s時(shí),Master服務(wù)器隨機(jī)添加1000條記錄,此時(shí)內(nèi)存索引未達(dá)到閾值,不刷入從磁盤(pán)索引。30s時(shí),Slave服務(wù)器恢復(fù)服務(wù),其索引記錄數(shù)與Master相同。35s后Master服務(wù)器宕機(jī),60s后恢復(fù)啟動(dòng),其索引記錄數(shù)與Slave相同,且符合最初添加的1000條記錄數(shù)。Xsolr通過(guò)CommitLog日志持久化實(shí)時(shí)數(shù)據(jù),設(shè)置宕機(jī)恢復(fù)點(diǎn)。服務(wù)器宕機(jī)恢復(fù)時(shí),讀取離Checkpoint最近的CommitLog日志記錄偏移量,從偏移量處開(kāi)始重建內(nèi)存索引,保證數(shù)據(jù)的完整性,實(shí)現(xiàn)數(shù)據(jù)容災(zāi)。
[0127]根據(jù)上述實(shí)驗(yàn)結(jié)果可以表明,本實(shí)施例提供的分布式mXn搜索模型滿足系統(tǒng)的實(shí)時(shí)性需求,同時(shí)在大數(shù)據(jù)量和高并發(fā)環(huán)境下保證了數(shù)據(jù)的一致性和數(shù)據(jù)容災(zāi),證明了系統(tǒng)模型的可行性。
[0128]請(qǐng)參考圖5,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)搜索系統(tǒng),可以包括:
[0129]第一確定單元501,用于確定當(dāng)前用于數(shù)據(jù)搜索的多臺(tái)服務(wù)器;
[0130]搜索模型構(gòu)建單元502,用于根據(jù)所述多臺(tái)服務(wù)器構(gòu)建分布式mX η搜索模型;其中,η用于表征搜索模型包括的集群個(gè)數(shù),m用于表征每個(gè)集群中包括的服務(wù)器數(shù)量;η多I ;m^ I;
[0131]索引構(gòu)建單元503,用于在每個(gè)集群的m臺(tái)服務(wù)器中構(gòu)建索引;
[0132]分配單元504,用于在接收到搜索請(qǐng)求時(shí),根據(jù)每個(gè)集群的當(dāng)前負(fù)載,將所述搜索請(qǐng)求分配至最小當(dāng)前負(fù)載對(duì)應(yīng)的目標(biāo)集群中的任意一臺(tái)服務(wù)器中;
[0133]搜索單元505,用于根據(jù)構(gòu)建的索引確定出所述搜索請(qǐng)求對(duì)應(yīng)的第一索引,并根據(jù)所述第一索弓I提供目標(biāo)數(shù)據(jù)。
[0134]在本發(fā)明一個(gè)實(shí)施例中,所述搜索模型構(gòu)建單元502,具體用于:
[0135]通過(guò)下述公式計(jì)算η的值:n = S/T;
[0136]其中,S用于表征索引總量;T用于表征單臺(tái)服務(wù)器承載的最大索引量;
[0137]通過(guò)下述公式計(jì)算m的值:m = Q/R+X;
[0138]其中,Q用于表征搜索請(qǐng)求總量;R用于表征單臺(tái)服務(wù)器承載的最大搜索請(qǐng)求量;X用于表征機(jī)器增量。
[0139]在本發(fā)明一個(gè)實(shí)施例中,請(qǐng)參考圖6,該數(shù)據(jù)搜索系統(tǒng)可以進(jìn)一步包括:
[0140]第二確定單元601,用于在當(dāng)前集群中的m臺(tái)服務(wù)器的數(shù)量不小于2時(shí),在所述當(dāng)前集群的m臺(tái)服務(wù)器中確定主服務(wù)器和從服務(wù)器;
[0141]所述索引構(gòu)建單元503,具體用于在主服務(wù)器中構(gòu)建主磁盤(pán)索引,并每構(gòu)建一條主磁盤(pán)索引,更新CommitLog日志文件;在從服務(wù)器中設(shè)定同步周期,并根據(jù)設(shè)定的同步周期,將主服務(wù)器中構(gòu)建的主磁盤(pán)索引和CommitLog日志文件同步到從服務(wù)器中,并在從服務(wù)器中根據(jù)CommitLog日志文件將搜索量最大的主磁盤(pán)索引構(gòu)建為內(nèi)存索引,并在內(nèi)存索引量大于設(shè)定閾值時(shí),按照內(nèi)存索引的構(gòu)建時(shí)間,將最先構(gòu)建的內(nèi)存索引刷新為從磁盤(pán)索引,以使內(nèi)存索引量不大于所述設(shè)定閾值。
[0142]在本發(fā)明一個(gè)實(shí)施例中,所述索引構(gòu)建單元503,具體用于:
[0143]在主服務(wù)器中根據(jù)預(yù)先設(shè)定的索引構(gòu)建周期,觸發(fā)全量dump程序,并記錄此時(shí)的開(kāi)始時(shí)間點(diǎn);
[0144]確定對(duì)應(yīng)于數(shù)據(jù)源的數(shù)據(jù);
[0145]在每獲取到對(duì)應(yīng)于數(shù)據(jù)源的當(dāng)前數(shù)據(jù)之后,判斷是否存在下一條數(shù)據(jù),若判斷結(jié)果包括存在,則采用迭代器模型,利用DataProvider接口,獲取對(duì)應(yīng)于數(shù)據(jù)源的下一條數(shù)據(jù),并構(gòu)建一條相應(yīng)的Map記錄,并繼續(xù)執(zhí)行步驟,直到判斷結(jié)果包括不存在為止;
[OH6]將構(gòu)建的多條Map記錄封裝為相應(yīng)的Map對(duì)象,并利用封裝好的Map對(duì)象構(gòu)建添加批量更新對(duì)象,并將該批量更新對(duì)象刷新至主磁盤(pán)索引;
[0147]根據(jù)記錄的所述開(kāi)始時(shí)間點(diǎn)以及當(dāng)前時(shí)間點(diǎn),對(duì)從所述開(kāi)始時(shí)間點(diǎn)至所述當(dāng)前時(shí)間點(diǎn)之間的時(shí)間段內(nèi)的增量數(shù)據(jù)刷新至主磁盤(pán)索弓I。
[0148]在本發(fā)明一個(gè)實(shí)施例中,請(qǐng)參考圖7,該數(shù)據(jù)搜索系統(tǒng)可以進(jìn)一步包括:
[0149]實(shí)時(shí)更新單元701,用于在主服務(wù)器接收到針對(duì)第二索引的實(shí)時(shí)請(qǐng)求時(shí),針對(duì)所述第二索引執(zhí)行所述實(shí)時(shí)請(qǐng)求對(duì)應(yīng)的操作,并將執(zhí)行的操作更新到CommitLog日志文件中;與該主服務(wù)器從屬于同一集群的從服務(wù)器根據(jù)同步到的Commi tLog日志文件中更新的操作構(gòu)建相應(yīng)的內(nèi)存索引;
[0150]所述實(shí)時(shí)請(qǐng)求包括:刪除請(qǐng)求、添加請(qǐng)求、更新請(qǐng)求、批量刪除請(qǐng)求、批量添加請(qǐng)求和批量更新請(qǐng)求。
[0151]綜上,本發(fā)明各個(gè)實(shí)施例至少可以實(shí)現(xiàn)如下有益效果:
[0152]1、在本發(fā)明實(shí)施例中,通過(guò)構(gòu)建分布式m X η搜索模型,并在搜索模型的每一個(gè)集群中均構(gòu)建索引,在接收到搜索請(qǐng)求時(shí)將搜索請(qǐng)求分配給最小當(dāng)前負(fù)載對(duì)應(yīng)的集群中的任意一臺(tái)服務(wù)器,以實(shí)現(xiàn)負(fù)載均衡,降低集群內(nèi)服務(wù)器所承受的壓力,進(jìn)而提高數(shù)據(jù)搜索效率。
[0153]2、在本發(fā)明實(shí)施例中,通過(guò)將多臺(tái)服務(wù)器按照路由規(guī)則進(jìn)行分組,在接收到搜索請(qǐng)求時(shí),可以根據(jù)搜索請(qǐng)求的地址信息,確定為其提供搜索服務(wù)的集群組,從而可以降低搜索時(shí)間,提高搜索效率。
[0154]3、在本發(fā)明實(shí)施例中,采用內(nèi)存與磁盤(pán)索引相結(jié)合的多索引機(jī)制。通過(guò)全量的方式定期建立主磁盤(pán)索引,保證數(shù)據(jù)的完整性。實(shí)時(shí)信息以增量方式先寫(xiě)入內(nèi)存,內(nèi)存索引超出設(shè)定閾值后復(fù)制寫(xiě)入磁盤(pán),形成從磁盤(pán)索引,不與主磁盤(pán)索引合并,減少索引合并時(shí)間開(kāi)銷。同時(shí)查詢內(nèi)存和磁盤(pán)索引,提升搜索響應(yīng)時(shí)間。
[0155]4、在本發(fā)明實(shí)施例中,解決分布式環(huán)境下的索引數(shù)據(jù)容災(zāi)問(wèn)題,引入CommitLog日志機(jī)制,持久化索引元數(shù)據(jù),改進(jìn)Solr的Master/Slave (主備)模型,保證數(shù)據(jù)的一致性和可用性。
[0156]上述裝置內(nèi)的各單元之間的信息交互、執(zhí)行過(guò)程等內(nèi)容,由于與本發(fā)明方法實(shí)施例基于同一構(gòu)思,具體內(nèi)容可參見(jiàn)本發(fā)明方法實(shí)施例中的敘述,此處不再贅述。
[0157]需要說(shuō)明的是,在本文中,諸如第一和第二之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開(kāi)來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)......”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同因素。
[0158]本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成,前述的程序可以存儲(chǔ)在計(jì)算機(jī)可讀取的存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:ROM、RAM、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)中。
[0159]最后需要說(shuō)明的是:以上所述僅為本發(fā)明的較佳實(shí)施例,僅用于說(shuō)明本發(fā)明的技術(shù)方案,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種數(shù)據(jù)搜索方法,其特征在于,包括: 確定當(dāng)前用于數(shù)據(jù)搜索的多臺(tái)服務(wù)器; 根據(jù)所述多臺(tái)服務(wù)器構(gòu)建分布式mXn搜索模型;其中,η用于表征搜索模型包括的集群個(gè)數(shù),m用于表征每個(gè)集群中包括的服務(wù)器數(shù)量;I ;m多I; 在每個(gè)集群的m臺(tái)服務(wù)器中構(gòu)建索引; 在接收到搜索請(qǐng)求時(shí),根據(jù)每個(gè)集群的當(dāng)前負(fù)載,將所述搜索請(qǐng)求分配至最小當(dāng)前負(fù)載對(duì)應(yīng)的目標(biāo)集群中的任意一臺(tái)服務(wù)器中; 根據(jù)構(gòu)建的索引確定出所述搜索請(qǐng)求對(duì)應(yīng)的第一索引,并根據(jù)所述第一索引提供目標(biāo)數(shù)據(jù)。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述多臺(tái)服務(wù)器構(gòu)建分布式mX η搜索模型,包括: 通過(guò)下述公式計(jì)算η的值:n = S/T ; 其中,S用于表征索引總量;T用于表征單臺(tái)服務(wù)器承載的最大索引量; 通過(guò)下述公式計(jì)算m的值:m=Q/R+X ; 其中,Q用于表征搜索請(qǐng)求總量;R用于表征單臺(tái)服務(wù)器承載的最大搜索請(qǐng)求量;X用于表征機(jī)器增量。3.根據(jù)權(quán)利要求1所述的方法,其特征在于, 進(jìn)一步包括:在當(dāng)前集群中的m臺(tái)服務(wù)器的數(shù)量不小于2時(shí),在所述當(dāng)前集群的m臺(tái)服務(wù)器中確定主服務(wù)器和從服務(wù)器; 所述在每個(gè)集群的m臺(tái)服務(wù)器中構(gòu)建索引,包括:在主服務(wù)器中構(gòu)建主磁盤(pán)索引,并每構(gòu)建一條主磁盤(pán)索引,更新CommitLog日志文件;在從服務(wù)器中設(shè)定同步周期,并根據(jù)設(shè)定的同步周期,將主服務(wù)器中構(gòu)建的主磁盤(pán)索引和CommitLog日志文件同步到從服務(wù)器中,并在從服務(wù)器中根據(jù)CommitLog日志文件將搜索量最大的主磁盤(pán)索引構(gòu)建為內(nèi)存索引,并在內(nèi)存索引量大于設(shè)定閾值時(shí),按照內(nèi)存索引的構(gòu)建時(shí)間,將最先構(gòu)建的內(nèi)存索引刷新為從磁盤(pán)索引,以使內(nèi)存索引量不大于所述設(shè)定閾值。4.根據(jù)權(quán)利要求3所述的方法,其特征在于, 所述在主服務(wù)器中構(gòu)建主磁盤(pán)索引,包括: 在主服務(wù)器中根據(jù)預(yù)先設(shè)定的索引構(gòu)建周期,觸發(fā)全量dump程序,并記錄此時(shí)的開(kāi)始時(shí)間點(diǎn); 確定對(duì)應(yīng)于數(shù)據(jù)源的數(shù)據(jù); 在每獲取到對(duì)應(yīng)于數(shù)據(jù)源的當(dāng)前數(shù)據(jù)之后,判斷是否存在下一條數(shù)據(jù),若判斷結(jié)果包括存在,則采用迭代器模型,利用DataProvider接口,獲取對(duì)應(yīng)于數(shù)據(jù)源的下一條數(shù)據(jù),并構(gòu)建一條相應(yīng)的Map記錄,并繼續(xù)執(zhí)行步驟,直到判斷結(jié)果包括不存在為止; 將構(gòu)建的多條Map記錄封裝為相應(yīng)的Map對(duì)象,并利用封裝好的Map對(duì)象構(gòu)建添加批量更新對(duì)象,并將該批量更新對(duì)象刷新至主磁盤(pán)索引; 根據(jù)記錄的所述開(kāi)始時(shí)間點(diǎn)以及當(dāng)前時(shí)間點(diǎn),對(duì)從所述開(kāi)始時(shí)間點(diǎn)至所述當(dāng)前時(shí)間點(diǎn)之間的時(shí)間段內(nèi)的增量數(shù)據(jù)刷新至主磁盤(pán)索弓I。5.根據(jù)權(quán)利要求1-4中任一所述的方法,其特征在于,進(jìn)一步包括:在主服務(wù)器接收到針對(duì)第二索引的實(shí)時(shí)請(qǐng)求時(shí),針對(duì)所述第二索引執(zhí)行所述實(shí)時(shí)請(qǐng)求對(duì)應(yīng)的操作,并將執(zhí)行的操作更新到CommitLog日志文件中;與該主服務(wù)器從屬于同一集群的從服務(wù)器根據(jù)同步到的CommitLog日志文件中更新的操作構(gòu)建相應(yīng)的內(nèi)存索引; 所述實(shí)時(shí)請(qǐng)求包括:刪除請(qǐng)求、添加請(qǐng)求、更新請(qǐng)求、批量刪除請(qǐng)求、批量添加請(qǐng)求和批量更新請(qǐng)求。6.一種數(shù)據(jù)搜索系統(tǒng),其特征在于,包括: 第一確定單元,用于確定當(dāng)前用于數(shù)據(jù)搜索的多臺(tái)服務(wù)器; 搜索模型構(gòu)建單元,用于根據(jù)所述多臺(tái)服務(wù)器構(gòu)建分布式mXn搜索模型;其中,η用于表征搜索模型包括的集群個(gè)數(shù),m用于表征每個(gè)集群中包括的服務(wù)器數(shù)量;η多I ;m多I;索引構(gòu)建單元,用于在每個(gè)集群的m臺(tái)服務(wù)器中構(gòu)建索引; 分配單元,用于在接收到搜索請(qǐng)求時(shí),根據(jù)每個(gè)集群的當(dāng)前負(fù)載,將所述搜索請(qǐng)求分配至最小當(dāng)前負(fù)載對(duì)應(yīng)的目標(biāo)集群中的任意一臺(tái)服務(wù)器中; 搜索單元,用于根據(jù)構(gòu)建的索引確定出所述搜索請(qǐng)求對(duì)應(yīng)的第一索引,并根據(jù)所述第一索引提供目標(biāo)數(shù)據(jù)。7.根據(jù)權(quán)利要求6所述的數(shù)據(jù)搜索系統(tǒng),其特征在于,所述搜索模型構(gòu)建單元,具體用于: 通過(guò)下述公式計(jì)算η的值:n = S/T ; 其中,S用于表征索引總量;T用于表征單臺(tái)服務(wù)器承載的最大索引量; 通過(guò)下述公式計(jì)算m的值:m=Q/R+X ; 其中,Q用于表征搜索請(qǐng)求總量;R用于表征單臺(tái)服務(wù)器承載的最大搜索請(qǐng)求量;X用于表征機(jī)器增量。8.根據(jù)權(quán)利要求6所述的數(shù)據(jù)搜索系統(tǒng),其特征在于, 進(jìn)一步包括:第二確定單元,用于在當(dāng)前集群中的m臺(tái)服務(wù)器的數(shù)量不小于2時(shí),在所述當(dāng)前集群的m臺(tái)服務(wù)器中確定主服務(wù)器和從服務(wù)器; 所述索引構(gòu)建單元,具體用于在主服務(wù)器中構(gòu)建主磁盤(pán)索引,并每構(gòu)建一條主磁盤(pán)索引,更新CommitLog日志文件;在從服務(wù)器中設(shè)定同步周期,并根據(jù)設(shè)定的同步周期,將主服務(wù)器中構(gòu)建的主磁盤(pán)索引和CommitLog日志文件同步到從服務(wù)器中,并在從服務(wù)器中根據(jù)CommitLog日志文件將搜索量最大的主磁盤(pán)索引構(gòu)建為內(nèi)存索引,并在內(nèi)存索引量大于設(shè)定閾值時(shí),按照內(nèi)存索引的構(gòu)建時(shí)間,將最先構(gòu)建的內(nèi)存索引刷新為從磁盤(pán)索引,以使內(nèi)存索引量不大于所述設(shè)定閾值。9.根據(jù)權(quán)利要求8所述的數(shù)據(jù)搜索系統(tǒng),其特征在于, 所述索引構(gòu)建單元,具體用于: 在主服務(wù)器中根據(jù)預(yù)先設(shè)定的索引構(gòu)建周期,觸發(fā)全量dump程序,并記錄此時(shí)的開(kāi)始時(shí)間點(diǎn); 確定對(duì)應(yīng)于數(shù)據(jù)源的數(shù)據(jù); 在每獲取到對(duì)應(yīng)于數(shù)據(jù)源的當(dāng)前數(shù)據(jù)之后,判斷是否存在下一條數(shù)據(jù),若判斷結(jié)果包括存在,則采用迭代器模型,利用DataProvider接口,獲取對(duì)應(yīng)于數(shù)據(jù)源的下一條數(shù)據(jù),并構(gòu)建一條相應(yīng)的Map記錄,并繼續(xù)執(zhí)行步驟,直到判斷結(jié)果包括不存在為止; 將構(gòu)建的多條Map記錄封裝為相應(yīng)的Map對(duì)象,并利用封裝好的Map對(duì)象構(gòu)建添加批量更新對(duì)象,并將該批量更新對(duì)象刷新至主磁盤(pán)索引; 根據(jù)記錄的所述開(kāi)始時(shí)間點(diǎn)以及當(dāng)前時(shí)間點(diǎn),對(duì)從所述開(kāi)始時(shí)間點(diǎn)至所述當(dāng)前時(shí)間點(diǎn)之間的時(shí)間段內(nèi)的增量數(shù)據(jù)刷新至主磁盤(pán)索弓I。10.根據(jù)權(quán)利要求6-9中任一所述的數(shù)據(jù)搜索系統(tǒng),其特征在于,進(jìn)一步包括: 實(shí)時(shí)更新單元,用于在主服務(wù)器接收到針對(duì)第二索引的實(shí)時(shí)請(qǐng)求時(shí),針對(duì)所述第二索引執(zhí)行所述實(shí)時(shí)請(qǐng)求對(duì)應(yīng)的操作,并將執(zhí)行的操作更新到CommitLog日志文件中;與該主服務(wù)器從屬于同一集群的從服務(wù)器根據(jù)同步到的CommitLog日志文件中更新的操作構(gòu)建相應(yīng)的內(nèi)存索引; 所述實(shí)時(shí)請(qǐng)求包括:刪除請(qǐng)求、添加請(qǐng)求、更新請(qǐng)求、批量刪除請(qǐng)求、批量添加請(qǐng)求和批量更新請(qǐng)求。
【文檔編號(hào)】G06F17/30GK106055622SQ201610362426
【公開(kāi)日】2016年10月26日
【申請(qǐng)日】2016年5月26日
【發(fā)明人】王之濱, 程林
【申請(qǐng)人】浪潮軟件集團(tuán)有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1