2016-10-26 2 views
0

Ich habe 2000 Einträge in meiner Liste und versuche diese Liste in elasticsearch per API einzufügen, was nichts anderes als eine Massenanfrage ist. Nachstehend finden Sie den Code für das gleiche.Wie verbessert man die Leistung der Anwendung zum Einfügen von Liste in 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 

Wie wir Leistung der Anwendung durch JMeter Überwachung sind, fanden wir, dass unsere Anwendung 2000 HTTP-Anfragen generiert verbinden und stellen Daten in Elasticsearch , die ca. 10 Sekunden für dieses task.Can nimmt wir in Connection esClient machen Oder gibt es eine Möglichkeit, eine Konfiguration auf dem elasticsearch-Server vorzunehmen, damit die Leistung der Anwendung verbessert werden kann und die Reaktionszeit bis auf 3 Sekunden reduziert wird?

+0

Haben Sie versucht, zu indexieren? hast du die Daten mit Shard verteilt (ganze Daten sind für einen schnelleren Zugriff verteilt)? Haben Sie mehrere Knoten bereitgestellt (mit denselben Daten - Redundanz und schnellerer Zugriff)? Es scheint wie Tuning-Frage. Sie müssen diese Frage an Ihren Ingenieur stellen. –

+0

Wir haben versucht, den Threadpool wie oben erwähnt zu erhöhen, aber keine Verbesserung der Performance und sogar eine Erhöhung/Verringerung der Shards liefert keine guten Ergebnisse. – Vrushali

+0

Ich würde vorschlagen, dass Sie die Last in Schritten wie 100, 200, 300, 400 ... 900, 1000 setzen .... 2000 usw. (in einem einzigen Test, wenn Sie möchten, verwenden Sie Stepping ThreadGroup, https://jmeter-plugins.org/wiki/SteppingThreadGroup/). Sie werden also eine klare Vorstellung davon haben, bei welcher Last die Antwortzeiten die Schwellenwerte überschreiten (wie 3 Sekunden, wie Sie bereits erwähnt haben). Auf dieser Grundlage können Sie entscheiden, ob Sie die Infrastruktur skalieren oder die vorhandene Bereitstellung erneut überprüfen. –

Antwort

0

Sie sind von Bulk-Anfragen zu sprechen, aber nicht mit ihnen:

Code ändern zu:

elasticSearchService.addOrganizations(carList,"Car"); 

Und Ihre Elasticsearch Servicecode an:

@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 Mehr haben Information.

+0

Danke Pandawan. Dieser Code funktionierte für meine Anwendung. – Vrushali

Verwandte Themen