傅巍瑋,李仁發(fā),劉鈺峰,黃松立
(1.湖南大學(xué)嵌入式系統(tǒng)及網(wǎng)絡(luò)實(shí)驗(yàn)室 長(zhǎng)沙410082;2.淘寶(中國(guó))有限責(zé)任公司 杭州315100)
互聯(lián)網(wǎng)信息技術(shù)的高速發(fā)展使人們更加關(guān)注如何以最快的時(shí)間獲取實(shí)效數(shù)據(jù),并從中挖掘到有價(jià)值的信息。獲取實(shí)時(shí)資訊的方法有兩種。一是建立實(shí)時(shí)數(shù)據(jù)庫(kù)[1],保證數(shù)據(jù)的強(qiáng)一致性(ACID)和高可用性,但其在分布式環(huán)境下的擴(kuò)展能力較為有限;二是建立實(shí)時(shí)搜索引擎,不僅有理論價(jià)值,同時(shí)有重大的應(yīng)用價(jià)值[2]。傳統(tǒng)的信息搜索技術(shù)發(fā)展非常成熟,但是在查詢精度和不同查詢需求上存在許多不足[3],不能滿足信息的實(shí)時(shí)搜索需求。實(shí)時(shí)搜索是傳統(tǒng)搜索引擎的擴(kuò)展和延伸,可以分為通用實(shí)時(shí)搜索引擎[4]和垂直實(shí)時(shí)搜索引擎[5]。垂直搜索引擎針對(duì)某一領(lǐng)域行業(yè)的搜索,特點(diǎn)是專、精、深,實(shí)時(shí)搜索的研究大多集中于垂直搜索領(lǐng)域,如在圖片搜索[6]和物聯(lián)網(wǎng)領(lǐng)域的應(yīng)用[7]。實(shí)時(shí)搜索已成為當(dāng)前搜索引擎領(lǐng)域的熱點(diǎn)問(wèn)題,其核心概括為實(shí)時(shí)數(shù)據(jù)獲取和實(shí)時(shí)索引構(gòu)建兩方面。相比傳統(tǒng)搜索研究,垂直搜索數(shù)據(jù)來(lái)源相對(duì)簡(jiǎn)單,因此垂直實(shí)時(shí)搜索的難點(diǎn)問(wèn)題是分布式環(huán)境下的實(shí)時(shí)索引構(gòu)建。實(shí)時(shí)索引構(gòu)建主要指的是在大規(guī)模高并發(fā)的分布式環(huán)境下,即時(shí)提交實(shí)時(shí)數(shù)據(jù)構(gòu)建索引,保證實(shí)時(shí)數(shù)據(jù)即時(shí)展示以及分布式數(shù)據(jù)的一致性和容災(zāi)[8]。
針對(duì)這一難點(diǎn)問(wèn)題,本文在分布式搜索技術(shù)[9]基礎(chǔ)上提出一種基于Solr[10]的分布式實(shí)時(shí)檢索模型,模型的創(chuàng)新之處如下。
·引入自定義多維度的分組規(guī)則構(gòu)建分布式索引數(shù)據(jù)??筛鶕?jù)實(shí)際需求對(duì)索引進(jìn)行多維度的切分,將大型索引切分成獨(dú)立的集群組,搜索時(shí)通過(guò)相應(yīng)的路由規(guī)則定位至索引信息所在的m×n分布式集群組,減少索引搜索時(shí)間,提高搜索性能。
·提出一種新的實(shí)時(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)索引,不與主索引合并,減少索引合并時(shí)間開(kāi)銷。同時(shí)查詢內(nèi)存和磁盤(pán)索引,提升搜索響應(yīng)時(shí)間。
·解決分布式環(huán)境下的索引數(shù)據(jù)容災(zāi)問(wèn)題。引入CommitLog日志機(jī)制,持久化索引元數(shù)據(jù),改進(jìn)Solr的Master/Slave(主備)模型,保證數(shù)據(jù)的一致性和可用性。
分布式實(shí)時(shí)搜索模型由3部分組成,如圖1所示。
·搜索功能實(shí)現(xiàn):搜索請(qǐng)求分為查詢、更新、添加、刪除4種,分別定位到分布式集群的一組或者多組服務(wù)器。
·分布式m×n系統(tǒng)模型構(gòu)建:分布式集群組采用m×n模型,每一組集群內(nèi)采用Master/Slave模型保證單組數(shù)據(jù)的一致性和搜索服務(wù)的可用性。
·索引數(shù)據(jù)構(gòu)建:索引構(gòu)建采用主磁盤(pán)索引+內(nèi)存索引+從磁盤(pán)索引相結(jié)合的模型,保證最新的數(shù)據(jù)即時(shí)展現(xiàn),實(shí)現(xiàn)搜索的實(shí)時(shí)性。實(shí)時(shí)索引的請(qǐng)求先寫(xiě)CommitLog日志,保證實(shí)時(shí)索引的數(shù)據(jù)容災(zāi)性。
分布式系統(tǒng)是解決目前大規(guī)模海量數(shù)據(jù)和高并發(fā)請(qǐng)求的最有效方式。本系統(tǒng)采用分布式m×n的部署模型切分海量數(shù)據(jù)建立索引,實(shí)現(xiàn)高并發(fā)搜索請(qǐng)求量的隨機(jī)軟負(fù)載均衡,提升搜索系統(tǒng)性能。在索引量和搜索請(qǐng)求增加的情況下,動(dòng)態(tài)添加行列的機(jī)器數(shù)量保證存儲(chǔ)負(fù)載和搜索性能。其中,n列指系統(tǒng)劃分為搜索服務(wù)器集群的個(gè)數(shù),m行指單個(gè)搜索服務(wù)器集群包含搜索服務(wù)器的臺(tái)數(shù),m≥1且n≥1。m×n模型建立過(guò)程如下。
(1)自定義切分規(guī)則
根據(jù)系統(tǒng)需求,設(shè)定自定義的索引切分規(guī)則進(jìn)行Group Filter分組路由,例如分組規(guī)則用生成的索引Docment文檔的Field域userId取模進(jìn)行分組。分組規(guī)則不僅可以是單維,也可以是多維,即在m×n二維分組的基礎(chǔ)上進(jìn)行擴(kuò)展,多維數(shù)組與一維數(shù)組存儲(chǔ)機(jī)制一致,如先按userId取模分組后,再以用戶所在的省份進(jìn)行分組。
(2)確定m×n行列值
m和n的行列值取決于兩個(gè)因素。
·搜索服務(wù)器單機(jī)負(fù)載能力。單機(jī)的索引數(shù)據(jù)容量由磁盤(pán)容量決定。建立新索引的過(guò)程中涉及索引的合并,舊的索引繼續(xù)提供索引服務(wù),此時(shí)的磁盤(pán)空間為:一份新索引+一份正提供服務(wù)的索引+索引合并所需磁盤(pán)空間,磁盤(pán)容量至少為索引數(shù)據(jù)的3倍。單機(jī)能承受的搜索請(qǐng)求量通過(guò)壓力測(cè)試獲取。當(dāng)機(jī)器負(fù)載(load)值等于搜索服務(wù)器的CPU核數(shù)時(shí),服務(wù)器所能承受的TPS(每秒請(qǐng)求數(shù))為壓力測(cè)試的峰值,如對(duì)于4核的服務(wù)器,通常在load=4時(shí)的TPS為其單機(jī)所能承受的最高值。
·分布式系統(tǒng)索引總量和搜索請(qǐng)求總量。索引總量用S表示,單機(jī)承載索引量用T表示,搜索請(qǐng)求總量用Q表示,單機(jī)承載搜索請(qǐng)求量用R表示,X表示機(jī)器增量,在搜索的熱點(diǎn)數(shù)據(jù)相應(yīng)組添加服務(wù)器,保證可用性,則m、n可用下式計(jì)算:
(3)建立分布式集群
根據(jù)索引切分規(guī)則和m、n的行列數(shù),建立分布式搜索服務(wù)器集群。所有搜索服務(wù)器均提供搜索服務(wù),搜索請(qǐng)求隨機(jī)發(fā)送到組內(nèi)的任一服務(wù)器。在同一組搜索服務(wù)集群中,每一臺(tái)搜索服務(wù)器分別向組內(nèi)其他服務(wù)器發(fā)布感知服務(wù),確保兩兩感知。單組集群內(nèi)部,設(shè)定一臺(tái)Master服務(wù)器,其他均為Slave服務(wù)器。Master服務(wù)器負(fù)責(zé)主索引的建立和寫(xiě)CommitLog日志文件,Slave服務(wù)器從Master服務(wù)器中同步主索引,同步CommitLog日志建立內(nèi)存索引。通過(guò)Master/Slave模型保證單組的索引數(shù)據(jù)容災(zāi)性,在組內(nèi)某一搜索服務(wù)器宕機(jī)的情況下保證搜索服務(wù)的可用性。
索引分為3個(gè)部分:主磁盤(pán)索引、內(nèi)存索引、從磁盤(pán)索引。磁盤(pán)+內(nèi)存的索引結(jié)構(gòu)保證新增索引即時(shí)展現(xiàn)。寫(xiě)內(nèi)存索引前先寫(xiě)CommitLog日志,持久化索引數(shù)據(jù),保證內(nèi)存索引數(shù)據(jù)不丟失。內(nèi)存索引到達(dá)閾值后刷入從磁盤(pán)索引,保證可用性。索引的構(gòu)建采用全量dump+實(shí)時(shí)增量dump的模型構(gòu)建。全量dump采用時(shí)間周期任務(wù)定期執(zhí)行,實(shí)時(shí)增量dump由實(shí)時(shí)調(diào)用接口生成,下面是實(shí)時(shí)索引構(gòu)建的詳細(xì)設(shè)計(jì)。
(1)主磁盤(pán)索引構(gòu)建
·搜索服務(wù)器定時(shí)觸發(fā)全量dump程序。系統(tǒng)從數(shù)據(jù)源獲取索引數(shù)據(jù),數(shù)據(jù)源可以是網(wǎng)絡(luò)爬蟲(chóng)抓取的信息、各種存儲(chǔ)系統(tǒng)(數(shù)據(jù)庫(kù)、文件、nosql系統(tǒng)等)。索引建立采用迭代器模型,利用Data Provider接口,首先利用has Next()判斷下一條語(yǔ)句是否存在,存在則用next()方法取下一條數(shù)據(jù),構(gòu)建并返回一條Map記錄,直至has Next()方法返回為false,結(jié)束整個(gè)迭代過(guò)程。Map記錄對(duì)應(yīng)一篇索引文檔,Map的
·時(shí)間點(diǎn)設(shè)置:主索引構(gòu)建過(guò)程開(kāi)始時(shí),記錄一個(gè)時(shí)間點(diǎn)checkPoint。主索引建立完成后,提供搜索的服務(wù)將從舊索引替換到新索引,但是新索引建立過(guò)程中,會(huì)有增量的實(shí)時(shí)索引產(chǎn)生,因此需要補(bǔ)全在全量執(zhí)行期間的增量數(shù)據(jù),通過(guò)時(shí)間點(diǎn)機(jī)制從后補(bǔ)全實(shí)時(shí)索引。
·Slave服務(wù)器構(gòu)建主索引:Master服務(wù)的主索引構(gòu)建完成后,通知Slave服務(wù)器進(jìn)行主索引的拷貝,并將checkPoint傳遞給Slave服務(wù)器,Slave服務(wù)器完成索引的構(gòu)建工作后通知Master服務(wù)器,新的索引向外提供搜索服務(wù)。
(2)實(shí)時(shí)索引構(gòu)建
實(shí)時(shí)索引構(gòu)建包含內(nèi)存索引構(gòu)建和從磁盤(pán)索引構(gòu)建2部分,實(shí)現(xiàn)過(guò)程如下。
·實(shí)時(shí)更新請(qǐng)求。實(shí)時(shí)請(qǐng)求可以來(lái)自于數(shù)據(jù)源(與主索引相同),也可以來(lái)自客戶端的實(shí)時(shí)接口調(diào)用。以實(shí)時(shí)接口調(diào)用為例,客戶端調(diào)用Real-time Bean類的實(shí)時(shí)方法發(fā)送請(qǐng)求。實(shí)時(shí)請(qǐng)求方法分為Add(添加)、Update(更 新)、Delete(刪 除)、mAdd(批 量 添 加 )、mUpdate(批量更新)、mDelete(批量刪除)。服務(wù)器端接收實(shí)時(shí)請(qǐng)求,將實(shí)時(shí)請(qǐng)求封裝為Document Request對(duì)象添加到CommitLog日志文件中。
·CommitLog日志建立。所有的實(shí)時(shí)請(qǐng)求都會(huì)寫(xiě)入Master服務(wù)器的CommitLog日志中,持久化索引請(qǐng)求。搜索服務(wù)器啟動(dòng)時(shí)創(chuàng)建實(shí)時(shí)索引的構(gòu)建進(jìn)程Real-time Job,不斷輪循CommitLog日志,一旦有新的記錄產(chǎn)生即進(jìn)行寫(xiě)索引操作,根據(jù)請(qǐng)求類型的不同,分別調(diào)用Solr的Update Handler的相應(yīng)方法建立內(nèi)存索引。
·從磁盤(pán)索引建立。內(nèi)存索引受限于內(nèi)存大小,所以需要設(shè)定閾值,防止內(nèi)存索引過(guò)大撐爆內(nèi)存或者影響其他應(yīng)用。當(dāng)內(nèi)存索引達(dá)到閾值時(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)立即搜索。
·內(nèi)存索引恢復(fù)機(jī)制。如果服務(wù)器宕機(jī)或者重新部署導(dǎo)致服務(wù)器重啟,當(dāng)前的內(nèi)存索引會(huì)造成數(shù)據(jù)丟失。設(shè)定宕機(jī)時(shí)間恢復(fù)點(diǎn)記錄CommitLog日志位置偏移值,新的從磁盤(pán)索引生成時(shí),更新一次宕機(jī)時(shí)間恢復(fù)點(diǎn)信息。服務(wù)器重啟時(shí)從最近的宕機(jī)時(shí)間恢復(fù)點(diǎn)開(kāi)始讀取CommitLog日志,恢復(fù)內(nèi)存索引。通過(guò)CommitLog日志機(jī)制保證內(nèi)存索引數(shù)據(jù)的容災(zāi)。
系統(tǒng)一共提供4種功能,包括查詢、新增、更新、刪除。查詢不會(huì)修改索引數(shù)據(jù)結(jié)構(gòu),其他3種操作都會(huì)造成索引數(shù)據(jù)的修改,且有相應(yīng)的批量操作方法。
(1)搜索功能實(shí)現(xiàn)
用戶發(fā)出搜索請(qǐng)求后,通過(guò)路由規(guī)則獲取索引所在分布式搜索服務(wù)器組的集合。如果是單組搜索,需要對(duì)當(dāng)前所有的索引進(jìn)行搜索,包含主磁盤(pán)索引、內(nèi)存索引、從磁盤(pán)索引,搜索結(jié)果過(guò)濾掉已被刪除的文檔。被刪除文檔的docId存儲(chǔ)在delList集合中。多組則利用Solr的shard概念對(duì)多組的結(jié)果集作合并操作。Solr服務(wù)是通過(guò)HTTP的方式提供服務(wù),索引合并也都是通過(guò)HTTP方式發(fā)出請(qǐng)求進(jìn)行合并,本系統(tǒng)對(duì)此作了改進(jìn)。任意選定分組集中的一組,通過(guò)TCP/IP協(xié)議進(jìn)行訪問(wèn),此時(shí)利用Solr提供的Embedded Solr Server獲取當(dāng)前組索引,并向其他組發(fā)送TCP/IP請(qǐng)求,獲取索引數(shù)據(jù)并進(jìn)行索引的merge操作,提高索引獲取速度。
(2)添加、刪除、更新功能實(shí)現(xiàn)
·添加功能實(shí)現(xiàn)??蛻舳税l(fā)出Add命令,將其封裝成添加請(qǐng)求寫(xiě)入CommitLog日志文件中。Index Build Job構(gòu)建索引時(shí)進(jìn)行判斷,如為Add Document Request請(qǐng)求,提取索引數(shù)據(jù)信息轉(zhuǎn)換為Solr的Add Update Command對(duì)象,最后調(diào)用Solr的Update Handle的Add Doc()命令,實(shí)現(xiàn)索引數(shù)據(jù)的添加。
·刪除功能實(shí)現(xiàn)??蛻舳税l(fā)出Delete命令,將其封裝成刪除請(qǐng)求 Delete Document Request寫(xiě)入CommitLog日志文件中。在Lucene搜索引擎中有Index Writer和Index Reader兩個(gè)對(duì)象可以做刪除動(dòng)作,區(qū)別在于Index Writer實(shí)例中刪除的內(nèi)容被緩存起來(lái),并不會(huì)馬上生效。搜索引擎接收實(shí)時(shí)刪除請(qǐng)求后,如果待刪除的文檔在內(nèi)存中,則用Index Writer直接進(jìn)行刪除,否則在磁盤(pán)索引(即主索引和從索引)做標(biāo)志刪除,將文檔保存至待刪除的集合delList中。在內(nèi)存索引提交時(shí),調(diào)用Index Writer的commit()方法,再調(diào)用磁盤(pán)索引的Index Reader方法逐個(gè)刪除delList集合的元素。
·更新功能實(shí)現(xiàn)。與Add命令相同,客戶端發(fā)出Update命令會(huì)被封裝為Update Document Request請(qǐng)求,寫(xiě)入CommitLog日志中。Index Build Job構(gòu)建索引時(shí),將索引數(shù)據(jù)信息轉(zhuǎn)換為Add Update Command,同時(shí)設(shè)置 Allow Dups為 false,即不允許索引數(shù)據(jù)重復(fù)。此時(shí)Solr會(huì)首先判斷索引是否已存在,有則刪除,然后進(jìn)行添加操作,完成更新。
實(shí)驗(yàn)由10臺(tái)搜索服務(wù)器組成,分為5組,每組一主一備。搜索服務(wù)器配置為Intel?Xeon?4核CPU E5520@2.27 GHz、內(nèi)存4 GB、60 GB硬盤(pán)7 200轉(zhuǎn)。索引總量為60 GB、單機(jī)12 GB,實(shí)驗(yàn)數(shù)據(jù)取平均值。
工程實(shí)現(xiàn)的原型系統(tǒng)為Xsolr,對(duì)比系統(tǒng)為Solr,數(shù)據(jù)集為4 000萬(wàn)個(gè)文檔,每個(gè)文檔由22個(gè)域構(gòu)成,平均大小為0.03 KB,測(cè)試工具為L(zhǎng)oad Runner。實(shí)驗(yàn)結(jié)果分兩部分,第一組實(shí)驗(yàn)為Xsolr與Solr系統(tǒng)的性能指標(biāo)對(duì)比,結(jié)果見(jiàn)表1,第二組實(shí)驗(yàn)為Xsolr的數(shù)據(jù)一致性與容災(zāi),如圖2所示。
·實(shí)時(shí)響應(yīng)性能。由表1可以看出,Xsolr的TPS和響應(yīng)時(shí)間在4種測(cè)試條件下的性能均好于Solr。實(shí)時(shí)更新的請(qǐng)求響應(yīng)時(shí)間均在1 s以內(nèi)。因?yàn)閄solr更新操作在內(nèi)存進(jìn)行,索引在內(nèi)存進(jìn)行建立,而且不與磁盤(pán)索引進(jìn)行合并,同時(shí)搜索內(nèi)存和磁盤(pán)索引,減少磁盤(pán)I/O,加速了實(shí)時(shí)索引數(shù)據(jù)展示的速度。
·負(fù)載分析。在系統(tǒng)負(fù)載接近的情況下,Xsolr的CPU更加消耗資源。因?yàn)閄solr會(huì)建立內(nèi)存索引,實(shí)驗(yàn)環(huán)境下占用大量?jī)?nèi)存,最高時(shí)達(dá)到1 GB。CPU使用率最高在30%左右,此時(shí)索引的更新TPS高達(dá)2 100,大量占用內(nèi)存,但是機(jī)器負(fù)載仍小于4,在可接受的范圍內(nèi)。
·數(shù)據(jù)一致性。如圖2所示,前15 s內(nèi),單機(jī)分別進(jìn)行插入、更新、刪除操作,Master/Slave服務(wù)器數(shù)據(jù)保持一致,有極細(xì)微區(qū)別。實(shí)時(shí)操作時(shí),Slave不間斷地從Master機(jī)器中拉取增量CommitLog日志文件,進(jìn)行消費(fèi)創(chuàng)建實(shí)時(shí)索引,保證主備服務(wù)器數(shù)據(jù)的一致性。但是由于CommitLog是順序?qū)懭?,且從Master機(jī)器拷貝文件有一定的網(wǎng)絡(luò)開(kāi)銷,所以會(huì)出、現(xiàn)極細(xì)微的區(qū)別,在毫秒級(jí)別實(shí)現(xiàn)最終一致性,對(duì)系統(tǒng)整體服務(wù)影響極小,在可接受的范圍內(nèi)。
表1 Xsolr與Solr實(shí)驗(yàn)結(jié)果對(duì)比
·數(shù)據(jù)容災(zāi)及完整性。17 s時(shí),Master服務(wù)器隨機(jī)插入1 000條記錄,此時(shí)內(nèi)存索引未達(dá)到閾值,不刷入從磁盤(pán)索引。30 s時(shí),Slave服務(wù)器恢復(fù)服務(wù),其索引記錄數(shù)與Master相同。35 s后Master服務(wù)器宕機(jī),60 s后恢復(fù)啟動(dòng),其索引記錄數(shù)與Slave相同,且符合最初插入的1 000條記錄數(shù)。Xsolr通過(guò)CommitLog日志持久化實(shí)時(shí)數(shù)據(jù),設(shè)置宕機(jī)恢復(fù)點(diǎn)。服務(wù)器宕機(jī)恢復(fù)時(shí),讀取離Check Point最近的CommitLog日志記錄偏移量,從偏移量處開(kāi)始重建內(nèi)存索引,保證數(shù)據(jù)的完整性,實(shí)現(xiàn)數(shù)據(jù)容災(zāi)。
實(shí)驗(yàn)結(jié)果表明,本模型滿足系統(tǒng)的實(shí)時(shí)性需求,同時(shí)在大數(shù)據(jù)量和高并發(fā)環(huán)境下保證了數(shù)據(jù)的一致性和數(shù)據(jù)容災(zāi),證明了系統(tǒng)模型的可行性。
本文主要研究了分布式實(shí)時(shí)搜索引擎,并基于Solr進(jìn)行了實(shí)現(xiàn)。重點(diǎn)解決搜索引擎在大數(shù)據(jù)量高并發(fā)分布式環(huán)境下的實(shí)時(shí)性和數(shù)據(jù)容災(zāi)問(wèn)題。模型目前還存在一些問(wèn)題,如Master/Slave模型中寫(xiě)操作都是作用于Master服務(wù)器,其宕機(jī)會(huì)造成實(shí)時(shí)信息更新失敗。下一步的工作從以下方面著手:改進(jìn)當(dāng)前的實(shí)時(shí)模型,實(shí)現(xiàn)單組搜索服務(wù)器Master/Slave去角色化,進(jìn)一步提高實(shí)時(shí)模型的可用性;研究利用SSD磁盤(pán)代替普通SATA硬盤(pán)作高速存儲(chǔ),進(jìn)一步提高實(shí)時(shí)搜索性能。
1 Nizar Idoudi,Claude Duvallet,Bruno Sadeg.How to model a real-time database.In:Proc of IEEE International Symposium on Object/Component/Service-Oriented Real-TimeDistributed Computing,2009
2 Bernard J Jansen,Zhe Liu,Courtney Weaver,et al.Real time search on theWeb:queries,topics,and economic value.Information Processing and Management,2011
3 曾春,邢春曉,周立柱.基于內(nèi)容過(guò)濾的個(gè)性化搜索算法.軟件學(xué)報(bào),2003(5)
4 Daniel Peng,Frank Dabek.Large-scale incremental processing using distributed transactions and notifications.In:Proc of the 9th USENIX Conference of OSDI,2010
5 Wu Y,Shou L,Hu T,et al.Query triggered crawling strategy:build a time sensitive vertical search engine.Cyberworlds,2008
6 Jingyu Cui,Fang Wen,Xiaoou Tang.Real time Google and live image search re-ranking.In:Proc of the 16th ACM International Conference on Multimedia,2008
7 Gershenfeld N,Krikorian R,Cohen D.The Internet of things.Scientific American,2004,291(4):76~81
8 Seth Gilkn,Nancy Lynch.Brewer's conjecture and the feasibility of consistent,available,partition-tolerant Web services.Sinact News,2002,33(2)
9 姚樹(shù)宇,趙少東.一種使用分布式技術(shù)的搜索引擎.計(jì)算機(jī)應(yīng)用與軟件,2005,22(10)
10 Apache.SOLR.http://lucene.apache.org/solr/