该模块可以控制索引数据的存储方式,索引可以存储在内存和磁盘上。使用内存方式可以得到更好的性能,但受限于实际的可用的物理内存大小。
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环境下可以使用一下命令进行调整:
1
2 1sysctl -w vm.max_map_count=262144
2
希望永久生效可以使用在
/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