為什么 Elasticsearch 需要堆內存來存儲數據


  為什么 Elasticsearch 需要堆內存來存儲數據呢?為什么它不能只用磁盤空間呢?這其中有幾個原因,但最主要的一個是,Lucene 需要在內存中存儲一些信息,以便知道在磁盤的什么位置進行查找。例如,Lucene 的倒排索引由術語字典和術語索引組成,術語字典將術語按排序順序歸入磁盤上的區塊,術語索引用於快速查找術語字典。該術語索引將術語前綴與磁盤上區塊(包含具有該前綴的術語)起始位置的偏移量建立映射。術語字典在磁盤上,但是術語索引直到最近還在堆上。

  索引需要多少內存?通常情況下,每 GB 索引需要幾 MB 內存。這並不算多,但隨着用戶在節點上安裝 TB 數越來越大的磁盤,索引很快就需要 10-20 GB 的堆內存來存儲這些 TB 量級的索引。鑒於 Elastic 的建議,不要超過 30 GB,不然就沒有給聚合等其他堆內存消耗者留下太多空間,而且,如果 JVM 沒有為集群管理操作留出足夠的空間,就會導致穩定性問題。


免責聲明!

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



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