2014-05-13 24 views
5

Jakie są różnice między następującymi implementacjach SolrServer:Jaka jest różnica: ConcurrentUpdateSolrServer vs HttpSolrServer vs CommonsHttpSolrServer?

  1. ConcurrentUpdateSolrServer
  2. HttpSolrServer
  3. CommonsHttpSolrServer (Uwaga: Czy to już przestarzała)

Jak wspomniano w documentation:

Zalecane jest używanie tylko ConcurrentUpdateSolrServer z żądaniami aktualizacji. Klasa HttpSolrServer lepiej pasuje do interfejsu zapytań.

Dokumentacja dla ConcurrentUpdateSolrServer sugeruje używanie go do aktualizacji i HttpSolrServer do zapytań. Dlaczego to?

W tej chwili używam HttpSolrServer do wszystkiego, czy użycie aktualizacji ConcurrentUpdateSolrServer spowoduje znaczącą poprawę wydajności?

Odpowiedz

2

Jesteśmy obecnie w 2017 roku, a Solr społeczność przemianowany SolrServer do SolrClient i obecnie mamy 4 implementacje:

  1. CloudSolrClient
  2. ConcurrentUpdateSolrClient
  3. HttpSolrClient
  4. LBHttpSolrClient

Dokumentacja sugeruje użycie ConcurrentUpdateSolrClient, ponieważ buforuje wszystkie żądania aktualizacji do final BlockingQueue<Update> queue;, więc czas działania na aktualizacjach będzie mniejszy niż przy użyciu HttpSolrClient, który zachowuje się w ten sposób - natychmiast po otrzymaniu żądania aktualizacji natychmiast uruchamia się. Oczywiście ufamy dokumentacji, ale tak łatwo będzie uzyskać tę odpowiedź, dlatego wykonałem kilka testów perfekcyjnych.

Najpierw jednak opiszę różne operacje klientów. Jeśli używasz funkcji SolrClient w wersji add, nie ma różnicy, czy utworzysz HttpSolrClient lub ConcurrentUpdateSolrClient, ponieważ obie metody będą robić to samo. ConcurrentUpdateSolrClient świeci tylko jeśli jawnie robi UpdateRequest

wyniki testów dla tytułów indeksowanie wikipedia (code): mój komputer jest: 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 

Podsumowanie:

  1. Jeśli używasz klientów w podobny sposób, np.g: client.add(doc); niż ConcurrentUpdateSolrClient wykonywania co najmniej 10-20 razy szybciej, ze względu na wykorzystanie puli wątków i kolejki (praca aka Bulk)

  2. Jeśli używasz HttpSolrClient, nadal mógłby naśladować to zachowanie, poprzez ręczne tworzenie kilku klientów, którzy uruchamiają dodatkowe wątki i korzystają z pośredniego magazynu, takiego jak List. Z pewnością poprawi to wydajność, ale wymaga dodatkowego kodu.

  3. Numery najprawdopodobniej mają bardzo mało sensu, ale mam nadzieję, że daje to pewne surowe porównanie.

Powiązane problemy