Wir sind derzeit in 2017 und Solr Gemeinschaft umbenannt SolrServer
in SolrClient und zur Zeit haben wir 4-Implementierungen:
CloudSolrClient
ConcurrentUpdateSolrClient
HttpSolrClient
LBHttpSolrClient
Die Dokumentation schlägt vor, ConcurrentUpdateSolrClient
zu verwenden, da es alle Aktualisierungsanforderungen in final BlockingQueue<Update> queue;
zwischenspeichert, so dass die Betriebszeit bei Aktualisierungen geringer ist als bei Verwendung von HttpSolrClient
, die sich so verhält - sobald sie eine Aktualisierungsanforderung erhält, wird sie sofort ausgelöst. Natürlich vertrauen wir der Dokumentation, aber es wird so einfach sein, diese Antwort zu bekommen, deshalb habe ich ein paar Perf-Tests gemacht.
Zuerst werde ich jedoch die verschiedenen Operationen der Clients beschreiben. Wenn Sie add
Operation des SolrClient verwenden, gibt es keinen Unterschied, wenn Sie HttpSolrClient
oder ConcurrentUpdateSolrClient
erstellen, da beide Methoden dasselbe tun. ConcurrentUpdateSolrClient
leuchtet nur, wenn Sie Ausdrücklich UpdateRequest
Testergebnisse für die Indizierung wikipedia Titel (code) tun: Meine Maschine ist: Intel i5-4670S 3,1 Ghz 16 Gb RAM
ConcurrentUpdateSolrClient (5 threads, 1000 queue size) - 200 seconds
ConcurrentUpdateSolrClient (5 threads, 10000 queue size) - 150 seconds
ConcurrentUpdateSolrClient (10 threads, 1000 queue size) - 100 seconds
ConcurrentUpdateSolrClient (10 threads, 10000 queue size) - 30 seconds
HttpSolrClient (no bulk) - 7000 seconds
HttpSolrClient (bulk 1000 docs) - 150 seconds
HttpSolrClient (bulk 10000 docs) - 80 seconds
Zusammenfassung:
Wenn Sie Clients auf ähnliche Weise verwenden, z.g: client.add(doc);
als, ConcurrentUpdateSolrClient
mindestens 10-20 mal schneller durchgeführt wird, wegen der Verwendung von Threadpool und Queue (auch bekannt als Bulk-Betrieb)
Wenn Sie HttpSolrClient
verwenden, noch dieses Verhalten nachahmen, indem Sie manuell mehrere Clients, die zusätzliche Threads ausführen und Zwischenspeicher wie List verwenden. Es wird sicherlich die Leistung verbessern, erfordert aber zusätzlichen Code.
Zahlen haben wahrscheinlich sehr wenig Sinn, aber ich hoffe, es gibt einige rohe Vergleich.