關(guān)于分片淤刃、查詢偏好、路由三者在查詢過(guò)程中的影響。
假設(shè)索引X包含4個(gè)分片潮模,所有的分析基于這個(gè)前提進(jìn)行討論
GET /_search/?preference=_local&search_type=query_and_fetch
{
? ? "query": {
? ? ? ? "match_all": {}
? ? }
}
整體流程:
http://x.x.x.x:9200/_cluster/state 獲取routing_table。
獲取查詢索引所有分片信息 -> 根據(jù)路由篩選分片 -> 根據(jù)查詢偏好篩選分片對(duì)應(yīng)的es節(jié)點(diǎn) -> 針對(duì)獲取的分片及節(jié)點(diǎn)發(fā)送查詢請(qǐng)求
詳細(xì)分解流程:
1痴施、client端發(fā)送請(qǐng)求到es集群的任意一個(gè)節(jié)點(diǎn)(transaction)擎厢,該節(jié)點(diǎn)作為協(xié)調(diào)節(jié)點(diǎn)開(kāi)始進(jìn)行處理。
2辣吃、首先獲取es集群中關(guān)于索引X的分片信息动遭,得到分片1/2/3/4所在的節(jié)點(diǎn)。
3神得、如果查詢請(qǐng)求中帶有路由信息厘惦,那么會(huì)根據(jù)路由信息和步驟2中的分片信息獲取所在分片。
? ? 如果查詢請(qǐng)求中沒(méi)有帶有路由信息循头,那么就會(huì)獲取步驟2中得到的所有分片信息绵估。
4炎疆、針對(duì)每個(gè)分片獲取該分片所在的es節(jié)點(diǎn)(譬如分片1包括1副本,那么分片1就分布在2個(gè)es節(jié)點(diǎn)上)
5国裳、根據(jù)查詢偏好(如_local)那么就在分片所在的多個(gè)es節(jié)點(diǎn)中按照本節(jié)點(diǎn)優(yōu)先排在前面的方式進(jìn)行查詢
6形入、索引X包含4個(gè)分片,所以會(huì)發(fā)起4次查詢請(qǐng)求(每個(gè)分片發(fā)送一個(gè))缝左。
7亿遂、在整個(gè)過(guò)程中路由和查詢偏好決定了每個(gè)分片應(yīng)該優(yōu)先去哪個(gè)節(jié)點(diǎn)進(jìn)行查詢。