ElasticSearch写入优化

  • 问题

在作数据同步的时候,因为数据大小的 缘由,会发现写入到ES的速度会很慢。那该怎么办呢,只能优化啦!服务器

  • 分片

通常ES推荐的JVM堆的大小是30到32G,也就是说分片的最大容量限制在30G左右。用200G的数据为例,咱们应该分配7到8个分片,保证大小够用的状况下,容量要略微富余一点。性能

  • translog

因为进来的数据,会先写入到buffer中,同时会将操做的记录记录到translog。当每次refresh以后,translog的记录才会被清除。因此translog的优化也会对ES的写入有很大影响。测试

  • 副本

看到不少资料说,在批量插入的时候,若是将副本数量设置为0,会大幅缩短ES的写入时间。可是通过本身测验,我发现速度并无变快,并且不设置副本,数据将存放在内存,致使内存会愈来愈大,会影响怎么服务的性能。所以,这里我并无修改副本的数量配置来优化。优化

  • 批量

再写入的时候尽可能批量写入。TransportClient提供了BulkRequestBuilder和BulkProcessor。我推荐使用BulkProcessor,实现能够看个人这篇博客:http://www.javashuo.com/article/p-ceqkwvad-c.html 同时要注意BulkProcessor最好设置成单例,这样能够下降cpu的使用率!ui

注意点:.net

今天的经验告诉我:不要一味的追求处理速度,进行大批量操做的时候,注意本身服务器的内存,CPU以及GC状况,若是没注意可能就爆CPU或者内存了哦!处理速度和资源使用状况二者如何平衡,须要本身不断的进行测试来得到最佳的平衡点!blog

相关文章
相关标签/搜索