該子產品可以控制索引資料的存儲方式,索引可以存儲在記憶體和磁盤上。使用記憶體方式可以得到更好的性能,但受限于實際的可用的實體記憶體大小。
store level throttling
Elasticsearch中的segments merge采用異步的方式,但系統低IO的情況下還是會影響索引和查詢操作。想要解決這種問題,Elasticsearch提供兩種方式(索引級别和節點 級别)的配置。 節點級别配置: indices.store.throttle.type:merge indices.store.throttle.max_bytes_per_sec:5mb //預設20mb 如上設定之後,該節點上的segments merge不會超過5mb/s 索引級别設定: index.store.throttle.type:node index.store.throttle.max_bytes_per_sec:10mb 如上設定是基于 索引的,可以跨多個節點。
檔案系統的存儲類型
索引的存儲類型有幾種,可以使用index.store.type: niofs進行配置,在建立索引的時候也可以動态指定。
simple fs:對應Lucene中的SimpleFsDirectory。 這種實作的并發性能較差,多線程會出現瓶頸。當索引需要持久化最好使用niofs。
nio fs:對應Lucene中的NIOFSDirectory。這種方式可以多個線程并發地讀同一個檔案。
mmapfs:對應Lucene中MMapDirectory。這種方式将映射的檔案加載到虛拟位址空間。在使用該類型之前,請确定是否有足夠的虛拟記憶體。在linux環境下可以使用一下指令進行調整:
sysctl -w vm.max_map_count=262144
希望永久生效可以使用在 /etc/sysctl.conf中配置vm.max_map_count
hybrid mmap / nio fs:預設類型,這種方式使用以上兩種方式,為了減少對系統的影響,目前Lucene隻在term directory和doc values檔案映射到記憶體中。其他的情況都是用Lucene的NIOFSDirectory。
memory:對應Lucene中的RamIndexStore。将索引存放在Jvm堆空間之外記憶體中。
【參考】http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-store.html