2012-03-23 69 views
12

在单台机器上运行多个Solr碎片是否可以提高性能?我期望Lucene是多线程的,但它似乎并没有在我的服务器上使用多于​​16个物理内核的单个内核。我意识到这是依赖于工作负载的,但任何统计数据或基准测试都会非常有用!在单台机器上执行多个Solr碎片可以提高性能吗?

+2

昨天你有没有读过黑客新闻? http://carsabi.com/car-news/2012/03/23/optimizing-solr-7x-your-search-speed/ – aitchnyu 2012-03-25 06:13:01

+3

是的,我写道:)我希望其他人有一些我可以比较的统计数据尽管 – cberner 2012-03-25 18:18:15

+0

@cberner这对索引性能来说是否正确,或者是完全不同的动物?我需要频繁更新我的索引和用户内容,并期待加快速度。 – 2012-11-21 18:00:29

回答

11

我跑了一些benchmarks of our search stack,发现增加更多的Solr碎片(在一台机器上,有16个物理内核)的确提高了大约8个碎片的性能(我得到了6.5倍的加速)。这是一个大约150万个文档的索引,运行复杂的范围查询。

因此,当针对单个索引运行查询时,Solr似乎没有利用多个物理内核。

+0

由于您的索引适合I/O缓存,因此分片改善了延迟。但是这不应该是一个普遍的建议:更大的索引会发生什么?在实时环境中?而且,你不会一直测量,当并发级别增加时会发生什么?你能否再次做你的实验,但有更多的线程发送查询到Solr? (20例如) – jpountz 2012-03-24 23:11:08

+0

我不知道一个更大的索引,但对于实时搜索,我会除了索引性能改善,因为写入将分散在多个分片。我会在下周尝试并进行一些吞吐量测试。我不希望太多差异,因为分片开销<20% – cberner 2012-03-25 02:15:49

0

如果您目前有一个碎片一个单选框,然后分裂这个碎片分成几个碎片:

  • 有可能恶化的吞吐量,
  • 可以改善延迟,通过并行查询执行。

,因为这取决于执行查询是否是CPU或I/O限制,我不能为你提供的统计数据或基准:如果查询执行已经是I /绑定在单一框,然后分裂碎片分成几个Ø碎片甚至会恶化吞吐量。您需要测试自己,只需拍摄一张生产日志,并尝试在两个场景中重播。

+0

看到我的答案上面,它确实似乎提高性能,甚至显着。 – cberner 2012-03-24 22:19:09

相关问题