Java 什么';区别是什么:ConcurrentUpdateSolrServer与HttpSolrServer与CommonHttpSolrServer?
以下实现之间的区别是什么:Java 什么';区别是什么:ConcurrentUpdateSolrServer与HttpSolrServer与CommonHttpSolrServer?,java,solr,lucene,solrj,information-retrieval,Java,Solr,Lucene,Solrj,Information Retrieval,以下实现之间的区别是什么: ConcurrentUpdateSolrServer HttpSolrServer CommonHttpSolrServer(注意:现在是否已弃用?) 如报告中所述: 建议仅将ConcurrentUpdateSolrServer与/update请求一起使用。HttpSolrServer类更适合查询接口 ConcurrentUpdateSolrServer的文档建议使用它进行更新,使用HttpSolrServer进行查询。为什么会这样 目前我正在使用HttpSolrSe
ConcurrentUpdateSolrServer
HttpSolrServer
CommonHttpSolrServer
(注意:现在是否已弃用?)目前我正在使用
HttpSolrServer
进行所有更新,使用ConcurrentUpdateSolrServer
进行更新是否会显著提高性能?我们目前正在2017年,Solr社区将SolrServer
重命名为,目前我们有4个实现:
CloudSolrClient
ConcurrentUpdateSolrClient
HttpSolrClient
LBHttpSolrClient
ConcurrentUpdateSolrClient
,因为它将所有更新请求缓冲到最终阻塞队列中代码>,因此更新操作时间将少于使用HttpSolrClient
,其行为如下-一旦收到更新请求,就会立即触发更新。当然,我们相信文档,但是得到这个答案很容易,这就是为什么我做了一些性能测试
然而,首先我将描述客户机的不同操作。如果您正在使用SolrClient的add
操作,那么创建HttpSolrClient
或ConcurrentUpdateSolrClient
没有区别,因为这两种方法都会执行相同的操作ConcurrentUpdateSolrClient
仅当您明确执行UpdateRequest
索引wikipedia标题()的测试结果:
我的机器是: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倍,因为使用了线程池和队列(也称为批量操作)
如果您使用的是HttpSolrClient
,您仍然可以通过手动创建多个客户端、运行其他线程和使用一些中间存储(如List)来模拟这种行为。它肯定会提高性能,但需要额外的代码
数字很可能没有什么意义,但我希望它能提供一些原始的比较