ElasticSearch插入数据优化
2016-09-12 08:48
260 查看
1、多线程程序插入
可以根据服务器情况开启多个线程index,速度可以提高n倍, n>=2。如在上篇博文《将Mysql数据导入到ElasticSearch集群》示例的代码,开启了10个线程。但是可以线程也不是越多越好,要根据你磁盘的io,cpu等而定。
2、设置复制分片数量
如果有多台机器,可以以每台设置n个shards的方式,根据业务情况,可以考虑取消replias(复制分片),等数据插入结束以后再进行更新操作,设置复制分片。此方法可使插入速度提高一倍。但要注意,主分片的数量是不可以更改的。
3、提高ES占用内存
内存适当调大,初始是256M,最大1G, 调大后,最小和最大一样,避免GC, 并根据机器情况,设置内存大小。
原文:http://www.elasticsearch.org/guide/reference/setup/installation.html
4、减少shard刷新间隔
5、设置一个shard的段segment最大数
注意:有时候可能需要多次执行
原文:http://www.elasticsearch.org/guide/reference/api/admin-indices-update-settings.html
原文:http://www.elasticsearch.org/guide/reference/index-modules/merge.html
6、去掉mapping中_all域
Index中默认会有_all的域,这个会给查询带来方便,但是会增加索引时间和索引尺寸
原文:http://www.elasticsearch.org/guide/reference/mapping/all-field.html
7、适当增大节点threadpool参数
可以根据服务器情况开启多个线程index,速度可以提高n倍, n>=2。如在上篇博文《将Mysql数据导入到ElasticSearch集群》示例的代码,开启了10个线程。但是可以线程也不是越多越好,要根据你磁盘的io,cpu等而定。
2、设置复制分片数量
如果有多台机器,可以以每台设置n个shards的方式,根据业务情况,可以考虑取消replias(复制分片),等数据插入结束以后再进行更新操作,设置复制分片。此方法可使插入速度提高一倍。但要注意,主分片的数量是不可以更改的。
curl -XPUT 'http://xxxxx:9400/index_rfm_test/' -d '{ "settings" : { "number_of_shards" : 20, "number_of_replicas" : 0 } }' //数据插入结束,更新复制分片为1 curl -XPUT 'http://xxxxx:9400/index_rfm_test/_settings' -d '{"index":{"number_of_replicas":1}}'
3、提高ES占用内存
内存适当调大,初始是256M,最大1G, 调大后,最小和最大一样,避免GC, 并根据机器情况,设置内存大小。
$ bin/elasticsearch -f -Xmx4g -Xms4g -Des.index.storage.type=memory
原文:http://www.elasticsearch.org/guide/reference/setup/installation.html
4、减少shard刷新间隔
curl -XPUT 'http://xxxxx:9400/index_rfm_test/_settings' -d '{ "index" : { "refresh_interval" : "-1" } }' //完成插入后再修改为初始值 curl -XPUT 'http://xxxxx:9400/index_rfm_test/_settings' -d '{ "index" : { "refresh_interval" : "1s" } }'
5、设置一个shard的段segment最大数
//可以减少段文件数,提高查询速度 curl -XPUT 'http://xxxxx:9400/index_rfm_test/_optimize?max_num_segments=5' //强制merger curl -XPOST 'http://xxxxx:9400/index_rfm_test/_forcemerge?max_num_segments=1&only_expunge_deletes=true'
注意:有时候可能需要多次执行
原文:http://www.elasticsearch.org/guide/reference/api/admin-indices-update-settings.html
原文:http://www.elasticsearch.org/guide/reference/index-modules/merge.html
6、去掉mapping中_all域
Index中默认会有_all的域,这个会给查询带来方便,但是会增加索引时间和索引尺寸
"_all" : {"enabled" : false}
原文:http://www.elasticsearch.org/guide/reference/mapping/all-field.html
7、适当增大节点threadpool参数
curl -XPUT 'http://xxxxx:9400/_cluster/settings' -d '{"transient":{"threadpool.index.queue_size":5000,"threadpool.bulk.queue_size": 5000}}'
相关文章推荐
- 优化MySQL插入数据
- mysql 数据插入优化方法
- 用Java向数据库中插入大量数据时的优化
- 大数据应用之HBase数据插入性能优化实测教程
- postgresql优化数据的批量插入
- 优化MySQL插入数据
- 大数据应用之HBase数据插入性能优化之多线程并行插入测试案例
- android sqlite数据 插入1000条数据优化
- 大批量插入数据时优化SQL语句
- 大数据应用之HBase数据插入性能优化之多线程并行插入测试案例
- mysql 数据插入优化方法
- 并发的批量插入数据的应用,app,db层面的优化
- MySQL在插入90万条数据消耗的时间以及查询90万条数据时的性能优化
- 插入数据的优化
- jdbc插入数据优化
- jdbc插入大量数据时优化处理(转)
- hibernate批量数据插入优化
- 权限迁移_涉及到大量数据插入的优化手段
- 删除一个表中的重复数据同时保留第一次插入那一条以及sql优化
- 大数据应用之HBase数据插入性能优化之多线程并行插入测试案例