2014-05-13 5 views
5

Was sind die Unterschiede zwischen den folgenden Implementierungen von SolrServer:Was ist der Unterschied: ConcurrentUpdateSolrServer vs HttpSolrServer vs CommonsHttpSolrServer?

  1. ConcurrentUpdateSolrServer
  2. HttpSolrServer
  3. CommonsHttpSolrServer (Anmerkung: Ist das veraltet jetzt) ​​

Wie in der documentation erwähnt:

Es wird nur empfohlen, ConcurrentUpdateSolrServer mit/update -Anforderungen zu verwenden. Die Klasse HttpSolrServer ist besser für die Query-Schnittstelle geeignet.

Die Dokumentation für ConcurrentUpdateSolrServer schlägt vor, es für Updates und HttpSolrServer für Abfragen zu verwenden. Warum ist das?

Im Moment verwende ich HttpSolrServer für alles, wird die Verwendung von ConcurrentUpdateSolrServer für Updates zu erheblichen Leistungsverbesserungen führen?

Antwort

2

Wir sind derzeit in 2017 und Solr Gemeinschaft umbenannt SolrServer in SolrClient und zur Zeit haben wir 4-Implementierungen:

  1. CloudSolrClient
  2. ConcurrentUpdateSolrClient
  3. HttpSolrClient
  4. 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:

  1. 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)

  2. 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.

  3. Zahlen haben wahrscheinlich sehr wenig Sinn, aber ich hoffe, es gibt einige rohe Vergleich.