Elasticsearch 中(zhong) PUT 操(cao)作(zuo)的(de)數據(ju)處理與(yu)存(cun)儲(chu)流(liu)程(cheng)詳解(jie)
1. 客(ke)戶端(duan)發(fa)起(qi)請求
2. 請求到(dao)達協調(tiao)節點
3. 文(wen)檔(dang)路由與(yu)主(zhu)分(fen)片(pian)定(ding)位
4. 轉(zhuan)發(fa)請(qing)求到(dao)主分(fen)片(pian)節(jie)點
5. 本地索引處理(數(shu)據(ju)處(chu)理階段)
- 解析(xi)與驗(yan)證(zheng):系統解析(xi) JSON 文(wen)檔(dang),驗(yan)證(zheng)其結(jie)構。
- 字段映(ying)射(she)與(yu)類(lei)型轉換(huan):根(gen)據(ju)索引的(de)映(ying)射(she)(mapping)定(ding)義(yi),對(dui)字(zi)段進(jin)行類(lei)型處理。例(li)如(ru),將(jiang)字符(fu)串(chuan)日期(qi)轉換(huan)為(wei)
date 類(lei)型,或(huo)對(dui)文(wen)本字段進(jin)行分(fen)詞(ci)設置。如(ru)果(guo)字(zi)段未預(yu)先定(ding)義(yi)且(qie)動態(tai)映(ying)射(she)開(kai)啟(qi),Elasticsearch 會自動推(tui)斷其(qi)類(lei)型並更新(xin)映(ying)射(she)。
- 分(fen)析(xi)過程(cheng):對(dui)於(yu)文(wen)本字段(
text 類(lei)型),會調(tiao)用相(xiang)應(ying)的(de)分(fen)析(xi)器(qi)(analyzer)進(jin)行分(fen)詞(ci)、過濾(lv)(如(ru)小寫化、去(qu)除停用詞等(deng)),生成倒排(pai)索引所需(xu)的(de)詞項(xiang)。
- 生成文(wen)檔(dang)數據結(jie)構:處理後(hou)的(de)文(wen)檔(dang)會被(bei)轉換(huan)為(wei)內(nei)部(bu)存(cun)儲(chu)結構,包(bao)括源(yuan)文(wen)檔(dang)(
_source,默認存(cun)儲(chu)原始 JSON)、倒排(pai)索引條目(mu)、文(wen)檔(dang)值(zhi)(用於排(pai)序和(he)聚(ju)合)等(deng)。
6. 寫入事務日誌(zhi)與內(nei)存(cun)緩(huan)沖區(qu)
- 事務日誌(zhi)(Translog)寫入:在數據真正(zheng)寫入磁(ci)盤(pan)前(qian),操作(zuo)會首先被(bei)記(ji)錄到(dao)事務日誌(zhi)中。Translog 提供了崩(beng)潰恢(hui)復(fu)機(ji)制,防止數(shu)據(ju)丟失。
- 內(nei)存(cun)緩(huan)沖區(qu):文(wen)檔(dang)數據被(bei)添加到(dao)索引的(de)內(nei)存(cun)緩(huan)沖區(qu)中(zhong),此時尚(shang)不可被(bei)搜索。
7. 刷(shua)新(xin)(Refresh)與(yu)可搜索性
8. 副(fu)本同步(bu)(存(cun)儲(chu)支持服(fu)務的(de)關(guan)鍵(jian))
9. 響應(ying)客(ke)戶端(duan)
10. 後(hou)續(xu)持久(jiu)化:刷(shua)寫(Flush)與段合並
- Translog 刷(shua)寫:當 Translog 達到(dao)壹定(ding)大(da)小時(默(mo)認 512MB)或(huo)定(ding)期(qi)(默(mo)認(ren) 30 分(fen)鐘),會觸發(fa)壹(yi)次刷(shua)寫。此時(shi),內(nei)存(cun)中(zhong)所有未(wei)持(chi)久(jiu)化的(de)段會被(bei)完全(quan)寫入磁(ci)盤(pan),同時清空(kong) Translog。
- 段合並:由(you)於頻繁刷(shua)新(xin)會產(chan)生大(da)量(liang)小段,Elasticsearch 會在後臺自動合並小段為更大(da)的(de)段,優(you)化(hua)存(cun)儲(chu)和(he)搜索性能,並刪除已刪除的(de)文(wen)檔(dang)。