不使用';t是否在分片MongoDB环境中包含分片密钥?

不使用';t是否在分片MongoDB环境中包含分片密钥?,mongodb,sharding,Mongodb,Sharding,标题说明了一切。假设您有一个分片MongoDB环境,并且用户提供了一个不包含分片密钥的查询。查询的实际性能如何?在后台会发生什么?如果查询是在分片集合上进行的,则查询是在所有分片上进行的;如果查询是在非共享集合上进行的,则mongoDB会在同一分片上获取所有数据 我在MongoDB上添加了shard FAQ的链接 性能取决于许多因素,但是,在这种情况下,MongoDB的默认操作是执行全局分散和聚集操作,从而将查询发送到所有碎片,然后合并重复项以获得最终结果 回到性能上来,它通常取决于每个碎片上的

标题说明了一切。假设您有一个分片MongoDB环境,并且用户提供了一个不包含分片密钥的查询。查询的实际性能如何?在后台会发生什么?

如果查询是在分片集合上进行的,则查询是在所有分片上进行的;如果查询是在非共享集合上进行的,则mongoDB会在同一分片上获取所有数据

我在MongoDB上添加了shard FAQ的链接


性能取决于许多因素,但是,在这种情况下,MongoDB的默认操作是执行全局分散和聚集操作,从而将查询发送到所有碎片,然后合并重复项以获得最终结果

回到性能上来,它通常取决于每个碎片上的索引,以及它们的数据集的独立优化,以及它们所持有的数据集的范围

然而,在切分中处理是并行的,这意味着它们都得到了查询,“master”
mongod
将在它们进入时合并,因此性能不应该是:转到切分1,获得它,然后是切分2;相反,它应该是:转到所有碎片,每个碎片返回其结果,主碎片合并并返回

下面是一个很好的演示(带有漂亮的图片),介绍了切分查询在某些情况下是如何工作的: