Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';区别是什么:ConcurrentUpdateSolrServer与HttpSolrServer与CommonHttpSolrServer?_Java_Solr_Lucene_Solrj_Information Retrieval - Fatal编程技术网

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
    (注意:现在是否已弃用?)
  • 如报告中所述:

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

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


    目前我正在使用
    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)来模拟这种行为。它肯定会提高性能,但需要额外的代码

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