ElasticSearch寫入效能優化

2021-09-27 09:01:43 字數 1203 閱讀 1211

增大寫吞吐量,越高越好

可以通過效能測試,確定最佳文件數量

多執行緒:需要觀察是否由http429返回,實現retry以及執行緒數量的自動調節

使用更好的硬體(通過觀察cpu/io block)

執行緒切換/堆疊狀況

使用es自動生成的文件id(可以避免get操作)

一些相關的es配置,如refresh interval

減少不必要的分詞

避免不需要的doc_values

文件的字段盡量保證相同的順序,可以提高文件的壓縮率

shard filering

write load balancer

put index}}

}-------------------------------

put index}}

}

犧牲可靠性:將副本分片設定為0,寫入完畢再調回去

犧牲搜尋及時性:增加refresh inteval的時間

犧牲可靠性:修改translog的配置

refresh:將文件先儲存在index buffer中,以refresh_interval為間隔時間,定期清空buffer, 生成segment, 借助檔案系統快取的特性,先將segment放在檔案系統快取中,並開放查詢,以提公升搜尋的實時性

translog:segment沒有寫入磁碟,即便發生了宕機,重啟後資料也能恢復,預設配置是每次請求都會落盤

flush:刪除舊的translog檔案,生成segment並寫入磁碟,更新commit point並寫入磁碟,這裡一般由es自動完成,優化空間不大

降低寫磁碟的頻率,但是會降低容災能力

客戶端

服務端

delete myindex

put myindex

, "routing":

},"translog": ,

"number_of_replicas": 0 //避免副本影響(允許丟資料)

},"dynamic": false, //避免不必要的字段索引,必要時可以通過update by query索引必要的字段

"properties": {}

}}

Elasticsearch的寫入優化

再次優化的寫入流程 1 資料寫入buffer緩衝和translog日誌檔案 2 每隔一秒鐘,buffer中的資料被寫入新的segment file,並進入os cache,此時segment被開啟並供search使用 3 buffer被清空 4 重複1 3,新的segment不斷新增,buffer不...

elasticsearch寫入資料的儲存過程

es建索引寫入資料,資料最先是存在記憶體buffer裡的,然後再刷入到lucene的底層檔案segment中 寫入segment完畢後再執行refresh操作,refresh操作後,資料將commit到磁碟中。資料刷入到了磁碟,就可以執行查詢操作了。過程簡單描述如下 記憶體buffer segmen...

CFile建立檔案,寫入,寫入完畢

1.檔案建立 cfile m file m file.open sfilename,cfile modecreat cfile modewrite 第乙個引數是建立的檔案的名稱 第二個引數意義是建立檔案及建立乙個可寫的檔案 2.檔案的寫入 m file.write sdata,sdata.getle...