深度解析ES中document數(shù)據(jù)路由、增刪改以及查詢原理解析

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

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

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

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

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

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

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

(3)_id or custom routing value

  • 默認的routing就是_id,也可以在發(fā)送請求的時候,手動指定一個routing value,比如說put /index/type/id?routing=user_id

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

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


document路由原理

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

(1)客戶端選擇一個node發(fā)送請求過去,這個node就是coordinating node(協(xié)調(diào)節(jié)點)
(2)coordinating node,對document進行路由,將請求轉(zhuǎn)發(fā)給對應(yīng)的node(有primary shard)
(3)實際的node上的primary shard處理請求,然后將數(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ā)送請求到任意一個node,成為coordinate node
2、coordinate node對document進行路由,將請求轉(zhuǎn)發(fā)到對應(yīng)的node,此時會使用round-robin隨機輪詢算法,在primary shard以及其所有replica中隨機選擇一個,讓讀請求負載均衡
3、接收請求的node返回document給coordinate node
4、coordinate node返回document給客戶端
5、特殊情況:document如果還在建立索引過程中,可能只有primary shard有,任何一個replica shard都沒有,此時可能會導(dǎo)致無法讀取到document,但是document完成索引建立之后,primary shard和replica shard就都有了


讀請求內(nèi)部原理
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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