【发布时间】:2012-08-10 01:40:30
【问题描述】:
我们有 4 个分片,每个分片都有 14GB 索引 每个 shard 有一个 master 和 3 个 slave(每个都有 32GB RAM)
我们预计索引大小将在不久的将来增长一倍或三倍。 所以我们考虑将我们的索引合并为 28GB 索引,这样每个分片就有 28GB 的索引,并将每个从属服务器上的 RAM 增加到 48GB。
我们在本地进行了此更改并通过向具有 14GB 和 28GB 索引的每台服务器发送相同的 10K 实际查询来测试服务器,我们发现
对于具有 14GB 索引(48GB RAM)的服务器:搜索时间为 480 毫秒,索引命中数:3.8G
对于具有 28GB 索引(48GB RAM)的服务器:搜索时间为 900 毫秒,索引命中数:7.2G
所以我们看到,将整个索引放在 RAM 中并不能帮助维持搜索时间方面的性能。当索引大小增加一倍时,搜索时间线性增加一倍。
我们原本考虑只保留 4 个分片配置,但现在看来我们必须为每个分片添加另一个分片或另一个从属。
是否有任何其他方式可以配置我们的服务器,以便即使索引大小翻倍或翻三倍也不影响性能?
【问题讨论】:
-
你给JVM多少内存?如果您为 JVM 提供了超过 20G 的内存,这意味着在第一次测试时索引完全在操作系统缓存中,但在第二次测试中没有,并且缓存中的所有索引在性能方面有很大的不同。 .
-
随着索引大小的增长,性能下降是正常的,但由于 Zipf 定律,我希望它是次线性的,所以你的结果让我有点惊讶。
标签: performance indexing solr lucene