Gol*_*Jam 6 java lucene solr information-retrieval solrj
SolrServer的以下实现之间有什么区别:
ConcurrentUpdateSolrServerHttpSolrServerCommonsHttpSolrServer (注意:这现在已经弃用了吗?)如文档中所述:
建议仅将ConcurrentUpdateSolrServer与/ update请求一起使用.HttpSolrServer类更适合查询接口.
ConcurrentUpdateSolrServer的文档建议将其用于更新,将HttpSolrServer用于查询.为什么是这样?
目前我正在使用HttpSolrServer所有内容,使用ConcurrentUpdateSolrServer更新会导致显着的性能提升吗?
我们目前在 2017 年,Solr 社区更名SolrServer为SolrClient,目前我们有 4 个实现:
CloudSolrClient ConcurrentUpdateSolrClientHttpSolrClientLBHttpSolrClient文档建议使用ConcurrentUpdateSolrClient,因为它将所有更新请求缓冲到final BlockingQueue<Update> queue;,因此更新的操作时间将少于使用HttpSolrClient,其行为如下 - 一旦收到更新请求,它就会立即触发它。当然,我们信任文档,但得到这个答案很容易,这就是我做了一些性能测试的原因。
不过,首先我将描述客户端的不同操作。如果您使用addSolrClient 的操作,则创建HttpSolrClient或没有什么区别ConcurrentUpdateSolrClient,因为两种方法都会执行相同的操作。ConcurrentUpdateSolrClient只有当你明确地做时才会发光UpdateRequest
索引维基百科标题的测试结果(代码):我的机器是: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
Run Code Online (Sandbox Code Playgroud)
概括:
如果您以类似的方式使用客户端,例如:client.add(doc);由于ConcurrentUpdateSolrClient使用了 ThreadPool 和 Queue(又名批量操作),执行速度至少快 10-20 倍
如果您正在使用HttpSolrClient,您仍然可以通过手动创建多个客户端、运行其他线程并使用一些中间存储(例如 List)来模仿此行为。它肯定会提高性能,但需要额外的代码。
数字很可能没有什么意义,但我希望它能提供一些原始的比较。
| 归档时间: |
|
| 查看次数: |
1573 次 |
| 最近记录: |