ElasticSearch寫入優化

  • 問題

在作數據同步的時候,因爲數據大小的 緣由,會發現寫入到ES的速度會很慢。那該怎麼辦呢,只能優化啦!服務器

  • 分片

通常ES推薦的JVM堆的大小是30到32G,也就是說分片的最大容量限制在30G左右。用200G的數據爲例,咱們應該分配7到8個分片,保證大小夠用的狀況下,容量要略微富餘一點。性能

  • translog

因爲進來的數據,會先寫入到buffer中,同時會將操做的記錄記錄到translog。當每次refresh以後,translog的記錄纔會被清除。因此translog的優化也會對ES的寫入有很大影響。測試

  • 副本

看到不少資料說,在批量插入的時候,若是將副本數量設置爲0,會大幅縮短ES的寫入時間。可是通過本身測驗,我發現速度並無變快,並且不設置副本,數據將存放在內存,致使內存會愈來愈大,會影響怎麼服務的性能。所以,這裏我並無修改副本的數量配置來優化。優化

  • 批量

再寫入的時候儘可能批量寫入。TransportClient提供了BulkRequestBuilder和BulkProcessor。我推薦使用BulkProcessor,實現能夠看個人這篇博客:http://www.javashuo.com/article/p-ceqkwvad-c.html 同時要注意BulkProcessor最好設置成單例,這樣能夠下降cpu的使用率!ui

注意點:.net

今天的經驗告訴我:不要一味的追求處理速度,進行大批量操做的時候,注意本身服務器的內存,CPU以及GC狀況,若是沒注意可能就爆CPU或者內存了哦!處理速度和資源使用狀況二者如何平衡,須要本身不斷的進行測試來得到最佳的平衡點!blog

相關文章
相關標籤/搜索