1. 批量提交
Elasticsearch提供了bulk API支持批量操作,当我们有大量的写任务时,可以使用bulk来进行批量写入。每次提交的数据量为多少时,能达到最优的性能,主要受到文件大小、网络情况、数据类型、集群状态等因素影响。
通用的策略如下:
bulk默认设置批量提交的数据量不能超过100M。数据条数一般是根据文档的大小和服务器性能而定的,但是单次批处理的数据大小应从5MB~15MB
逐渐增加,当性能没有提升时,把这个数据量作为最大值。
2. 优化存储设备
Elasticsearch是一种密集使用磁盘的应用,在段合并的时候会频繁操作磁盘,所以磁盘要求较高,当磁盘速度提升之后,
集群的整体性能会大幅度提高。
磁盘的选择,提供以下几点建议:
使用固态硬盘(Solid State Disk)替代机械硬盘。SSD与机械磁盘相比,具有高效的读写速度和稳定性。
使用RAID 0。RAID0条带化存储,可以提升磁盘读写效率。
在Elasticsearch的服务器上挂载多块硬盘。使用多块硬盘同时进行读写操作提升效率,在配置文件elasticsearch中设置多个存储路径
避免使用NFS(Network File System)等远程存储设备,网络 的延迟对性能的影响是很大的。
3. 合理使用合并
Lucene以段的形式存储数据。当有新的数据写入索引时,Lucene就会自动创建一个新的段。随着数据量的变化,段的数量会越来越多,消耗的多文件句柄数及CPU就越多,查询效率就会下降。
由于Lucene段合并的计算量庞大,会消耗大量的I/O,