ES的性能優化


ES的性能優化

es在數據量很大的情況下(數十億級別)如何提高查詢效率?

在es里,不要期待着隨手調一個參數,就可以萬能的應對所有的性能慢的場景。也許有的場景是你換個參數,或者調整一下語法,就可以搞定,但是絕對不是所有場景都可以這樣。

es的性能優化,主要是圍繞着fileSystem cache也可以叫做OS cache來進行;

前面已經分析了es寫入數據的原理,實際上數據最終都會寫入到磁盤中去,當我們搜索讀取的時候,系統會將數據放入到os cache中,而es嚴重依賴於這個os cache,如果我們給機器的內存足夠多,在es里存的書庫里昂小於內存容量,那么搜索的效率是非常高的,

1、減少字段

如果我們的表里有很多的字段,而我們只需要往es庫里寫入我們需要檢索的那幾個字段就可以了,對於其他的字段我們可以存到mysql或者說其他的比如Hbase中,hbase的特點是適用於海量數據的在線存儲,就是對hbase可以寫入海量數據,不要做復雜的搜索,就是做很簡單的一些根據id或者范圍進行查詢的這么一個操作就可以了,從es中根據檢索的字段去搜索,拿到的結果可能就十幾個doc id,然后根據doc id到hbase里去查詢每個doc id對應的完整的數據,給查出來,再返回給前端。簡單地說就是:elastcisearch減少數據量僅僅放要用於搜索的幾個關鍵字段即可,盡量寫入es的數據量跟es機器的filesystem cache是差不多的就可以了;其他不用來檢索的數據放hbase里,或者mysql。

2、數據預熱

如果說我們按照方案一的方法做了之后,效率還是不行,存的數據量還是超過os cache的空間,那么我們就可以吧一些比較熱門的數據,比如在電商系統中,像一些熱門的商品,我們可以在后台單獨的寫一個子系統,每隔一段時間,我們就訪問一下,然數據進入到os cache中,這樣用戶來訪問的時候就訪問到的是os cache中的數據,就比較快。

3、冷熱分離

es可以做類似於mysql的水平拆分,就是說將大量的訪問很少,頻率很低的數據,單獨寫一個索引,然后將訪問很頻繁的熱數據單獨寫一個索引,這樣可以確保熱數據在被預熱之后,盡量都讓他們留在filesystem os cache里,別讓冷數據給沖刷掉。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM