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
Performance 同一台机器上的Solr sharding是否有用?_Performance_Solr - Fatal编程技术网

Performance 同一台机器上的Solr sharding是否有用?

Performance 同一台机器上的Solr sharding是否有用?,performance,solr,Performance,Solr,我有一台12核、2.4GHz和64GB RAM的服务器。我有8个碎片,在同一台机器上每个大约400GB大小。总索引占用4TB SSD的3TB空间 我正在使用一些solr复杂的操作,如高亮显示、刻面、分组,查询性能非常慢(几秒到几分钟) 如果我增加碎片的数量,会提高性能吗?在不拆分多台机器上的碎片的情况下,是否仍有办法提高性能?根据使用情况,增加碎片的数量可能会降低性能。使用分片会带来开销,例如,每个分片可能必须检索N个文档才能满足“给我N行”的要求(因为一个分片可能包含结果集中的所有文档)。对于

我有一台12核、2.4GHz和64GB RAM的服务器。我有8个碎片,在同一台机器上每个大约400GB大小。总索引占用4TB SSD的3TB空间

我正在使用一些solr复杂的操作,如高亮显示、刻面、分组,查询性能非常慢(几秒到几分钟)


如果我增加碎片的数量,会提高性能吗?在不拆分多台机器上的碎片的情况下,是否仍有办法提高性能?

根据使用情况,增加碎片的数量可能会降低性能。使用分片会带来开销,例如,每个分片可能必须检索N个文档才能满足“给我N行”的要求(因为一个分片可能包含结果集中的所有文档)。对于facet,必须在每个shard上生成facet,然后在回答查询的shard上加入facet,从而创建另一个开销因素

您可能还想查看缓存性能,看看是否每次都弹出缓存(…请记住,每个碎片都有一个缓存)

对于您的需求,唯一可用的答案是“试试看”(尝试不同的尺寸)。如果可能的话,我会尽量避免创建人工的局部碎片。切分对于跨多台服务器而不是在一台服务器内部分发索引非常有用(虽然也有这样的用例,但据我所知,切分并不影响性能)


请参阅和

SSD对Solr所需的随机IO有极大的帮助,但它们并不神奇。假设你也更新了你的碎片,我觉得3TB索引的64GB内存似乎动力不足。我猜您的大部分内存都用于运行Solr实例


我们有一个多TB的Solr设置,磁盘缓存的可用内存相对较少。我们运行了一些测试,发现当从磁盘缓存中索引的0.5%降至0.1%时,性能大幅下降。设置的限制可能会有所不同,但如果您的机箱的可用内存非常少(我会挥手挥手,说10GB),我猜添加相对适量的RAM(比如说32或64GB)会有很大帮助。

在同一台机器上分片不会给您带来任何性能优势,因为64Gb的RAM将在所有碎片上共享。为了获得最佳查询性能,您需要将整个索引存储在内存中(理想情况)。在单独的计算机上部署每个碎片应该可以提高查询性能。

谢谢。但是,如果我有很多小碎片,那么它们很容易放入RAM(这提高了性能),而不是有一个不适合RAM的大碎片?在同一台本地机器上进行碎片分割对于一些用例来说是一种有效的策略,由于Lucene的核心部分是单线程的,所以本地分片允许您充分利用多个CPU核心。