我们目前在2017年,Solr社区将SolrServer重命名为
SolrClient,目前我们有4个实现:
> CloudSolrClient
> ConcurrentUpdateSolrClient
> HttpSolrClient
> LBHttpSolrClient
文档建议使用ConcurrentUpdateSolrClient,因为它将所有更新请求缓冲到最终的BlockingQueue< Update> queue;,因此更新的操作时间将少于使用HttpSolrClient,其行为与此类似 – 一旦获得更新请求,它立即触发它.当然,我们信任文档,但是很容易得到这个答案,这就是我做一些性能测试的原因.
但是,首先我将描述客户端的不同操作.如果您正在使用SolrClient的添加操作,那么如果您要创建HttpSolrClient或ConcurrentUpdateSolrClient没有区别,因为两种方法都会这样做.如果您明确地执行UpdateRequest,ConcurrentUpdateSolrClient只会闪耀
索引维基百科标题的测试结果(code):
我的机器是: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
摘要:
>如果您以类似的方式使用客户端,例如:client.add(doc);比,ConcurrentUpdateSolrClient执行速度至少快10-20倍,因为使用了ThreadPool和Queue(又称Bulk操作)>如果您正在使用HttpSolrClient,您仍然可以通过手动创建多个客户端,运行其他线程以及使用某些中间存储(如List)来模仿此行为.它肯定会提高性能,但需要额外的代码.>数字很可能没什么意义,但我希望它能给出一些原始的比较.