有啥区别:ConcurrentUpdateSolrServer vs HttpSolrServer vs CommonsHttpSolrServer?

Posted

技术标签:

【中文标题】有啥区别:ConcurrentUpdateSolrServer vs HttpSolrServer vs CommonsHttpSolrServer?【英文标题】:What's the difference: ConcurrentUpdateSolrServer vs HttpSolrServer vs CommonsHttpSolrServer?有什么区别:ConcurrentUpdateSolrServer vs HttpSolrServer vs CommonsHttpSolrServer? 【发布时间】:2014-07-01 14:11:19 【问题描述】:

SolrServer的以下实现有什么区别:

    ConcurrentUpdateSolrServer HttpSolrServer CommonsHttpSolrServer(注意:现在是否已弃用?)

如documentation中提到的:

仅建议将 ConcurrentUpdateSolrServer 与 /update 请求一起使用。 HttpSolrServer 类更适合查询接口。

ConcurrentUpdateSolrServer 的文档建议使用它进行更新,使用 HttpSolrServer 进行查询。为什么是这样?

目前我使用HttpSolrServer 进行所有操作,使用ConcurrentUpdateSolrServer 进行更新会显着提高性能吗?

【问题讨论】:

【参考方案1】:

我们目前是 2017 年,Solr 社区将 SolrServer 重命名为 SolrClient,目前我们有 4 个实现:

    CloudSolrClient ConcurrentUpdateSolrClient HttpSolrClient LBHttpSolrClient

文档建议使用ConcurrentUpdateSolrClient,因为它将所有更新请求缓冲到final BlockingQueue<Update> queue;,因此更新的操作时间将少于使用HttpSolrClient,它的行为是这样的 - 一旦它收到更新请求就立即开火。当然,我们相信文档,但很容易得到这个答案,这就是我进行性能测试的原因。

但是,首先我将描述客户端的不同操作。如果你使用 SolrClient 的add 操作,创建HttpSolrClientConcurrentUpdateSolrClient 没有区别,因为这两种方法都会做同样的事情。 ConcurrentUpdateSolrClient 仅在您明确执行 UpdateRequest 时才会发光

索引***标题的测试结果 (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)来模仿这种行为。它肯定会提高性能,但需要额外的代码。

    数字很可能没有什么意义,但我希望它能提供一些原始的比较。

【讨论】:

以上是关于有啥区别:ConcurrentUpdateSolrServer vs HttpSolrServer vs CommonsHttpSolrServer?的主要内容,如果未能解决你的问题,请参考以下文章

三维和四维有啥区别?,三维和四维有啥区别?区别大不大啊?

Html5与Html有啥区别吗?Css3与Css有啥区别

java中接口和类有啥区别java中接口和类有啥区别

退还跟退回有啥区别?退回和退还有啥不同

VBS和JAVA和C++,有啥区别,有啥差距

发布和自动发布有啥区别,有啥方法可以创建用户定义的自动发布池? [复制]