深度解析ES中document數(shù)據(jù)路由、增刪改以及查詢?cè)斫馕?/h2>

1、document數(shù)據(jù)路由原理

(1)document路由到shard上是什么意思?

一個(gè)index的數(shù)據(jù)會(huì)被分為多片,每片都在一個(gè)shard中。所以說(shuō),一個(gè)document,只能存在于一個(gè)shard中。
當(dāng)客戶端創(chuàng)建document的時(shí)候,es此時(shí)就需要決定說(shuō),這個(gè)document是放在這個(gè)index的哪個(gè)shard上。
這個(gè)過(guò)程,就稱之為document routing,數(shù)據(jù)路由。

(2)路由算法:shard = hash(routing) % number_of_primary_shards

number_of_primary_shards:primary shard的數(shù)量。

  • 舉個(gè)例子,一個(gè)index有3個(gè)primary shard,P0,P1,P2。
    每次增刪改查一個(gè)document的時(shí)候,都會(huì)帶過(guò)來(lái)一個(gè)routing number,默認(rèn)就是這個(gè)document的_id(可能是手動(dòng)指定,也可能是自動(dòng)生成)
    routing = _id,假設(shè)_id=1
    然后會(huì)將這個(gè)routing值,傳入一個(gè)hash函數(shù)中,產(chǎn)出一個(gè)routing值的hash值,hash(routing) = 21
    然后將hash函數(shù)產(chǎn)出的值對(duì)這個(gè)index的primary shard的數(shù)量求余數(shù),21 % 3 = 0
    就決定了,這個(gè)document就放在P0上。

決定一個(gè)document在哪個(gè)shard上,最重要的一個(gè)值就是routing值,默認(rèn)是_id,也可以手動(dòng)指定,相同的routing值,每次過(guò)來(lái),從hash函數(shù)中,產(chǎn)出的hash值一定是相同的
無(wú)論hash值是幾,無(wú)論是什么數(shù)字,對(duì)number_of_primary_shards求余數(shù),結(jié)果一定是在0~number_of_primary_shards-1之間這個(gè)范圍內(nèi)的。0,1,2。

(3)_id or custom routing value

  • 默認(rèn)的routing就是_id,也可以在發(fā)送請(qǐng)求的時(shí)候,手動(dòng)指定一個(gè)routing value,比如說(shuō)put /index/type/id?routing=user_id

手動(dòng)指定routing value是很有用的,可以保證說(shuō),某一類document一定被路由到一個(gè)shard上去,那么在后續(xù)進(jìn)行應(yīng)用級(jí)別的負(fù)載均衡,以及提升批量讀取的性能的時(shí)候,是很有幫助的

(4)primary shard數(shù)量不可變的謎底


document路由原理

2、_document增刪改內(nèi)部原理圖解

(1)客戶端選擇一個(gè)node發(fā)送請(qǐng)求過(guò)去,這個(gè)node就是coordinating node(協(xié)調(diào)節(jié)點(diǎn))
(2)coordinating node,對(duì)document進(jìn)行路由,將請(qǐng)求轉(zhuǎn)發(fā)給對(duì)應(yīng)的node(有primary shard)
(3)實(shí)際的node上的primary shard處理請(qǐng)求,然后將數(shù)據(jù)同步到replica node
(4)coordinating node,如果發(fā)現(xiàn)primary node和所有replica node都搞定之后,就返回響應(yīng)結(jié)果給客戶端


es增刪改內(nèi)部原理

3、_document查詢內(nèi)部原理

1、客戶端發(fā)送請(qǐng)求到任意一個(gè)node,成為coordinate node
2、coordinate node對(duì)document進(jìn)行路由,將請(qǐng)求轉(zhuǎn)發(fā)到對(duì)應(yīng)的node,此時(shí)會(huì)使用round-robin隨機(jī)輪詢算法,在primary shard以及其所有replica中隨機(jī)選擇一個(gè),讓讀請(qǐng)求負(fù)載均衡
3、接收請(qǐng)求的node返回document給coordinate node
4、coordinate node返回document給客戶端
5、特殊情況:document如果還在建立索引過(guò)程中,可能只有primary shard有,任何一個(gè)replica shard都沒(méi)有,此時(shí)可能會(huì)導(dǎo)致無(wú)法讀取到document,但是document完成索引建立之后,primary shard和replica shard就都有了


讀請(qǐng)求內(nèi)部原理
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容