如何提高在elasticSearch中插入列表的应用程序的性能?

时间:2016-10-26 09:46:06

标签: elasticsearch jmeter performance-testing

我的列表中有2000个条目,并尝试通过API将此列表插入到elasticsearch中,这只是批量请求。 请查找以下代码。

     for(Car car : carList){
            elasticSearchService.addOrganization(car,"Car");
        }

Code for ElasticSearch Service

        @Autowired
        private Client esClient;

        private void addOrganization(Object object, String modelName){
                Gson gson  = new Gson();
                final String json = gson.toJson(object);
                esClient.prepareIndex("ElasticSearchIndex",modelName).setSource(json).execute().actionGet();
        }

I have made following entry in elasticsearch.yml file
threadpool:
    index:
        size: 250
        queue_size: 1000 

当我们通过JMeter监视应用程序的性能时,我们发现我们的应用程序生成了2000个HTTP请求来连接并将数据放入elasticsearch 这项任务大约需要10秒。我们可以在esClient中建立连接池,还是有办法在elasticsearch服务器上进行配置,以便提高应用程序的性能, 响应时间会减少3秒钟?

1 个答案:

答案 0 :(得分:0)

您说的是批量请求但未使用它们:

将您的代码更改为:

elasticSearchService.addOrganizations(carList,"Car");

您的ElasticSearch服务代码:

@Autowired
private Client esClient;

private void addOrganizations(List<Object> objects, String modelName){
    BulkRequestBuilder bulkRequest = client.prepareBulk();
    objects.forEach(object -> {
        Gson gson  = new Gson();
        final String json = gson.toJson(object);
        bulkRequest.add(esClient.prepareIndex("ElasticSearchIndex",modelName).setSource(json));
    });
    bulkRequest.get();
}

请参阅documentation以获取更多信息。