【问题标题】:Indexing speed performances with and without Solrcloud使用和不使用 Solrcloud 时的索引速度性能
【发布时间】:2015-05-06 03:54:32
【问题描述】:

我已经完成了 2 次性能测试来衡量索引速度与 235280 个文档的集合:

第一次测试:1个solr实例没有 SolrCloud:索引速度= 6191 doc/s

第二次测试:4个solr实例(4个分片)链接 SolrCloud:索引速度= 4506 doc/s

我使用 8 个 CPU。

所以,我对这些结果有一些疑问:

Q1: 通常,solr 实例的数量会提高还是降低索引速度?

Q2: SolrCloud 会降低索引速度吗?

Q3: 为什么我使用 SolrCloud 时性能会下降?我错过了什么(设置?)?

编辑:

我使用 CSV 更新处理程序来索引我的收藏。

【问题讨论】:

  • 你有多少个分片?你如何索引(Tika、数据导入、自定义)?
  • 在第一次测试中,我没有使用 SolrCloud (1 shard)。在第二个测试中,我有 4 个分片(实例为 1 个分片)。我使用 CSV 更新处理程序索引我的收藏。
  • 您将查询并行发送到多少台服务器?如果它是一个单一的 - 将消息转发到正确的分片领导者会有开销。无论如何,我认为这不能解释这种退化。您是在具有 4 个不同实例的同一台机器上执行此操作吗?4 个内核?还是不同的机器?

标签: solr solrcloud


【解决方案1】:

根据我执行的性能测试,在 Solr 云基础架构中的多个节点之间共享提高了我的索引性能。在多个节点中复制分片以处理故障转移确实会降低索引性能,原因很明显。还可以考虑批量索引而不是进行单次更新。

您可以阅读http://wiki.apache.org/lucene-java/ImproveIndexingSpeed 了解更多信息。

【讨论】:

    【解决方案2】:

    Solr 中有许多设置以及可能影响索引性能的硬件规格。除了投入更多机器的明显解决方案之外,调整 Solr 更像是一门艺术而不是科学。这是我的经验,所以请持保留态度。通常,您应该会看到每秒 6K 到 8K 的索引性能。

    硬件规格:4 x 40 核(超线程),256GB RAM 和 SSD

    我也使用 updateCSV API 来导入文档。

    我的基线矩阵是用其中一台机器(1 个分片)测量的。 我的 SolrCloud 矩阵是用所有 4 个来测量的(4 个分片,每个集合 1 个副本)。


    对于大型集合 (82GB),我看到了 3.68 倍的吞吐量。

    对于中等收集 (7GB),2.17 倍。

    对于小型集合 (1.29GB),1.17x。


    所以回答你的问题:

    Q1:通常每个集合拥有的 Solr 节点越多,索引速度就越快。它可能会在某个时候达到稳定状态,但索引性能肯定不会降低。也许您的集合太小而无法证明 SolrCloud 水平扩展开销是合理的?

    Q2:不,SolrCloud 不应降低索引速度。

    Q3:这真的取决于你如何设置它。我看到只有默认设置的性能提升。但以下是我遇到的更能提升性能的事情:

    • 不要在 updateCSV API 调用中设置 commit=true
    • 如果系统利用率低,每个集合使用的分片数量可以多于活动 Solr 节点的数量。
    • solr.hdfs.blockcache.slab.count 应该在可用系统内存的 10% 到 20% 之间。
    • autoCommit 一般应该是 15 秒。

    【讨论】:

      猜你喜欢
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      相关资源
      最近更新 更多