所以我们有一个大收集,大约有1亿条记录。我们需要进行分片,然后进行一些测试。我发现在对分片集合运行查询时性能会下降,即使只有一个分片也是如此。
我开始使用mongos并将mongod添加到shardcluster(所以基本上只有1个服务器)。当我使用大约230000个返回值执行.explain()查询时,响应时间大约为800毫秒,这与我直接在mongod服务器上查询时相同。 我为这个特定的集合启用了分片,响应时间仍然相同(800毫秒)。 现在,我为群集启用共享并添加分片键,对于mongos的完全相同的查询,响应时间增加到1400毫秒。当我直接在mongod上查询时,响应时间仍然是800ms。此外,对未分片的集合的所有其他查询在mongos和mongod上显示相同的响应时间,但是一旦对集合进行分片,响应时间会显着增加(几乎翻倍)。
发生了什么以及为什么响应时间明显变得更糟?这让我们回到了碎片。我们需要2个分片来获得与单个大服务器相同的性能,这不应该是分片的本质......