進(jìn)一步提高Elasticsearch的檢索效率

? ? ? ?Elasticsearch的路由機(jī)制與其分片機(jī)制有著直接的關(guān)系北戏。Elasticsearch的路由機(jī)制即是通過(guò)哈希算法尿赚,將具有相同哈希值的文檔放置到同一個(gè)主分片中督惰。這個(gè)和通過(guò)哈希算法來(lái)進(jìn)行負(fù)載均衡幾乎是一樣的察皇。

? ? ? ? 而Elasticsearch也有一個(gè)默認(rèn)的路由算法:它會(huì)將文檔的ID值作為依據(jù)將其哈希到相應(yīng)的主分片上茴厉,這種算法基本上會(huì)保持所有數(shù)據(jù)在所有分片上的一個(gè)平均分布,而不會(huì)產(chǎn)生數(shù)據(jù)熱點(diǎn)什荣。

樂(lè)觀并發(fā)控制:

Elasticsearch是分布式的矾缓。當(dāng)文檔被創(chuàng)建、更新或刪除稻爬,文檔的新版本會(huì)被復(fù)制到集群的其它節(jié)點(diǎn)嗜闻。Elasticsearch即是同步的又是異步的,意思是這些復(fù)制請(qǐng)求都是平行發(fā)送的桅锄,并無(wú)序(out of sequence)的到達(dá)目的地琉雳。這就需要一種方法確保老版本的文檔永遠(yuǎn)不會(huì)覆蓋新的版本样眠。在 index 、 get 翠肘、 delete 請(qǐng)求時(shí)吹缔,我們指出每個(gè)文檔都有一個(gè) _version 號(hào)碼,這個(gè)號(hào)碼在文檔被改變時(shí)加一锯茄。

Elasticsearch使用這個(gè) _version 保證所有修改都被正確排序厢塘。當(dāng)一個(gè)舊版本出現(xiàn)在新版本之后,它會(huì)被簡(jiǎn)單的忽略肌幽。

分布式文檔存儲(chǔ)

路由文檔到分片

Elasticsearch將文檔存儲(chǔ)的哪一個(gè)分片上晚碾,是根據(jù)算法:

shard = hash(routing) % number_of_primary_shards

routing 值是一個(gè)任意字符串,它默認(rèn)是 _id 但也可以自定義喂急。這個(gè) routing

字符串通過(guò)哈希函數(shù)生成一個(gè)數(shù)字格嘁,然后除以主切片的數(shù)量得到一個(gè)余數(shù)

(remainder),余數(shù)的范圍永遠(yuǎn)是 0 到 number_of_primary_shards - 1 廊移,這個(gè)

數(shù)字就是特定文檔所在的分片

新建糕簿、索引和刪除文檔都是寫(xiě)操作,它們必須在主分片上成功完成才能復(fù)制到相關(guān)的的復(fù)制分片上狡孔。

而我們?yōu)槭裁磿?huì)需要自定義的Routing模式呢懂诗?首先默認(rèn)的Routing模式在很多情況下都是能滿(mǎn)足我們的需求的——平均的數(shù)據(jù)分布、對(duì)我們來(lái)說(shuō)是透明的苗膝、多數(shù)時(shí)候性能也不是問(wèn)題殃恒。但是在我們更深入地理解我們的數(shù)據(jù)的特征之后,使用自定義的Routing模式可能會(huì)給我們帶來(lái)更好的性能辱揭。

假設(shè)你有一個(gè)100個(gè)分片的索引离唐。當(dāng)一個(gè)請(qǐng)求在集群上執(zhí)行時(shí)會(huì)發(fā)生什么呢?

1. 這個(gè)搜索的請(qǐng)求會(huì)被發(fā)送到一個(gè)節(jié)點(diǎn)

2. 接收到這個(gè)請(qǐng)求的節(jié)點(diǎn)问窃,將這個(gè)查詢(xún)廣播到這個(gè)索引的每個(gè)分片上(可能是主分片亥鬓,也可能是復(fù)制分片)

3. 每個(gè)分片執(zhí)行這個(gè)搜索查詢(xún)并返回結(jié)果

4. 結(jié)果在通道節(jié)點(diǎn)上合并、排序并返回給用戶(hù)

因?yàn)槟J(rèn)情況下域庇,Elasticsearch使用文檔的ID(類(lèi)似于關(guān)系數(shù)據(jù)庫(kù)中的自增ID嵌戈,當(dāng)然,如果不指定ID的話较剃,Elasticsearch使用的是隨機(jī)值)將文檔平均的分布于所有的分片上咕别,這導(dǎo)致了Elasticsearch

不能確定文檔的位置,所以它必須將這個(gè)請(qǐng)求廣播到所有的100個(gè)分片上去執(zhí)行写穴。這同時(shí)也解釋了為什么主分片的數(shù)量在索引創(chuàng)建的時(shí)候是固定下來(lái)的,并且永遠(yuǎn)不能改變雌贱。因?yàn)槿绻制臄?shù)量改變了啊送,

所有先前的路由值就會(huì)變成非法了偿短,文檔相當(dāng)于丟失了。

當(dāng)然在5.0中增加了Shrink接口馋没,它可將分片數(shù)進(jìn)行收縮成它的因數(shù)昔逗,如之前你是15個(gè)分片,你可以收縮成5個(gè)或者3個(gè)又或者1個(gè)篷朵,那么我們就可以想象成這樣一種場(chǎng)景勾怒,在寫(xiě)入壓力非常大的收集階段,

設(shè)置足夠多的索引声旺,充分利用shard的并行寫(xiě)能力笔链,索引寫(xiě)完之后收縮成更少的shard,提高查詢(xún)性能腮猖。而自定義的Routing模式鉴扫,可以使我們的查詢(xún)更具目的性。我們不必盲目地去廣播查詢(xún)請(qǐng)求澈缺,取而代

之的是:我們要告訴Elasticsearch我們的數(shù)據(jù)在哪個(gè)分片上坪创。

而當(dāng)你采集的日志數(shù)據(jù)有明顯的地域性,如數(shù)據(jù)來(lái)自北京姐赡、河北莱预、浙江、廣東等项滑,當(dāng)你只需對(duì)北京的數(shù)據(jù)進(jìn)行分析時(shí)锁施,設(shè)想下如果數(shù)據(jù)是按地域進(jìn)行存儲(chǔ)的,這樣分析時(shí)需要加載的數(shù)據(jù)是不是的大減小

了杖们;這個(gè)跟數(shù)據(jù)庫(kù)的分區(qū)的做法較為類(lèi)似悉抵。

curl -XPOST 'http://localhost:9200/log_201702/info?routing=beijing' -d '

{

"event": "sample",

"host": "60.11.23.222"

}'

查詢(xún)時(shí)指定路由

curl -XGET 'http://localhost:9200/log_201702/info_search?routing=beijing' -d '

{

"query": {

"match_all": {}

}'

在大規(guī)模集群計(jì)算時(shí),使用路由是能大大提高集群的響應(yīng)速度的摘完,路由姥饰、路由、路由重要的事情說(shuō)三遍孝治。

當(dāng)然在進(jìn)行日志存儲(chǔ)時(shí)列粪,進(jìn)行分表(也是數(shù)據(jù)分區(qū)的一種實(shí)現(xiàn))也是提高檢索速度的一個(gè)重要法寶。

利用Elasticsearch跨表查詢(xún)的功能谈飒,對(duì)指定索引集合的數(shù)據(jù)進(jìn)行分析岂座,只需要對(duì)索引名進(jìn)行通配(log_2017*)就能夠簡(jiǎn)單的指定分析的索引。

curl -XGET 'http://localhost:9200/log_2017*/info_search?routing=beijing' -d '

{

"query": {

"match_all": {}

}'

指定路由查詢(xún)杭措、跨表查詢(xún)這些提高集群檢索性能的利器费什,當(dāng)前簡(jiǎn)單使用SQL均以支持

指定路由查詢(xún)

select * from log_201702@beijing where host between '60.11.0.0' and '60.11.0.0';

"log_201702/beijing" SQL中from的表明中用“@”來(lái)定義路由信息

跨表查詢(xún)

通配符

select * from log_2017*手素;

定義表的數(shù)組鸳址,用","隔開(kāi)

select * from log_201701,log_201703 where host = 'xx.xx.xx.xxx'瘩蚪;

跨表查詢(xún)與指定路由的結(jié)合

select * from log_201701,log_201703@beijing where host = 'xx.xx.xx.xxx';

更多使用Elasticsearch的使用技巧請(qǐng)關(guān)注合眾開(kāi)源:

https://github.com/unimassystem

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末稿黍,一起剝皮案震驚了整個(gè)濱河市疹瘦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巡球,老刑警劉巖言沐,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異酣栈,居然都是意外死亡险胰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)钉嘹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鸯乃,“玉大人,你說(shuō)我怎么就攤上這事跋涣∮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵陈辱,是天一觀的道長(zhǎng)奖年。 經(jīng)常有香客問(wèn)我,道長(zhǎng)沛贪,這世上最難降的妖魔是什么陋守? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮利赋,結(jié)果婚禮上水评,老公的妹妹穿的比我還像新娘。我一直安慰自己媚送,他們只是感情好中燥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著塘偎,像睡著了一般疗涉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吟秩,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天咱扣,我揣著相機(jī)與錄音,去河邊找鬼涵防。 笑死闹伪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祭往,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伦意,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼火窒!你這毒婦竟也來(lái)了硼补?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤熏矿,失蹤者是張志新(化名)和其女友劉穎已骇,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體票编,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡褪储,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慧域。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鲤竹。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖昔榴,靈堂內(nèi)的尸體忽然破棺而出辛藻,到底是詐尸還是另有隱情,我是刑警寧澤互订,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布吱肌,位于F島的核電站,受9級(jí)特大地震影響仰禽,放射性物質(zhì)發(fā)生泄漏氮墨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一吐葵、第九天 我趴在偏房一處隱蔽的房頂上張望规揪。 院中可真熱鬧,春花似錦温峭、人聲如沸猛铅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)奕坟。三九已至,卻和暖如春清笨,著一層夾襖步出監(jiān)牢的瞬間月杉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工抠艾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苛萎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像腌歉,于是被迫代替她去往敵國(guó)和親蛙酪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容