Elasticsearch 緩存原理

Elasticsearch緩存原理

一. 數據預加載

Elasticsearch在啓動時會打開並讀取硬盤上的部分index segment文件,並緩存數據至內存中,後續的搜索操作都會在內存中進行。如果待搜索的數據不在內存中,則會打開相應的index segment文件,並讀取數據至內存。這種預加載的做法有助於提高Elasticsearch對外提供服務的響應速度,畢竟減少了打開index semgent的IO操作次數。

有兩種方案能設置預加載中需要打開的segment文件:

  1. 【全局配置】 在config/elasticsearch.yml中添加index.store.preload,這是一個數組,裏面存放了需要預加載的文件的後綴。後綴的類別和含義如下:
    1. nvd: 該文件中存儲了影響相關度分數的因素。
    2. dvd: 存儲了文檔的數據。
    3. tim: 文檔字典。
    4. doc: 發佈清單
    5. dim: 點數據
      支持通配符*,如果寫成["*"],則可以將所有的數據全部緩存到內存。
index.store.preload: ["nvd", "dvd"]
  1. 【局部配置】在創建index時,指定該index需要預加載的文件。注意,不得在創建完index後更新(新增)index.store.preload,否則報錯:
    Can’t update non dynamic settings… index.store.preload屬於靜態配置。
PUT /my_index
{
  "settings": {
    "index.store.preload": ["nvd", "dvd"]
  }
}

有些人嚐到甜頭後,打算在預加載時儘可能的把熱門數據放到內存中,但值得注意的是,數據預加載也有其缺陷。如果預加載的數據量過大,比如幾乎佔滿了服務器分配給Elasticsearch的最大堆內存,而後續進行冷門數據搜索時,搜索的內容恰好不在內存中,則不得不從Disk上打開index segment,此時爲了避免內存溢出,ES會丟棄一部分舊的數據,斷開部分index_segement文件的IO流,騰出空間存儲新的數據,那麼熱門數據就丟失了。而熱門數據的查詢概率比冷門數據大得多,導致後續搜索數據時,需要進行更多的IO操作,這樣反而得不償失。

二. 緩存

Elasticsearch的緩存主要分成三類: Node Query Cache, Shard Query Cache, Fielddata Cache。 尚未寫完…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章