Jesteśmy obecnie w 2017 roku, a Solr społeczność przemianowany SolrServer
do SolrClient i obecnie mamy 4 implementacje:
CloudSolrClient
ConcurrentUpdateSolrClient
HttpSolrClient
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:
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)
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.
Numery najprawdopodobniej mają bardzo mało sensu, ale mam nadzieję, że daje to pewne surowe porównanie.