Mongodb 查询复合密钥分片Mongo
我已经为mongo集合创建了一个复合碎片密钥: {目录id:1,类别id:1}Mongodb 查询复合密钥分片Mongo,mongodb,sharding,composite-key,Mongodb,Sharding,Composite Key,我已经为mongo集合创建了一个复合碎片密钥: {目录id:1,类别id:1} 现在,如果我仅通过保证唯一的catalog_id查询集合,查询是否会转到所有碎片?在mongo db中,如果您在多个字段上有一个复合索引,您可以使用它来查询字段的开始子集。所以如果你有一个索引 a,b,c 您可以在查询中使用它 a a,b a,b,c 不确定shardng是否以同样的方式工作。通常,查询将转到包含该查询相关区块范围的任何碎片。在您的例子中,如果catalog_id确实保证是唯一的,那么对于相同的c
现在,如果我仅通过保证唯一的catalog_id查询集合,查询是否会转到所有碎片?在mongo db中,如果您在多个字段上有一个复合索引,您可以使用它来查询字段的开始子集。所以如果你有一个索引
a,b,c
您可以在查询中使用它
a
a,b
a,b,c
不确定shardng是否以同样的方式工作。通常,查询将转到包含该查询相关区块范围的任何碎片。在您的例子中,如果catalog_id确实保证是唯一的,那么对于相同的catalog_id范围,您就不会有多个块(例如,您不会有一个块的范围为{catalog_id:12,category:“a”}到{catalog_id:12,category:“m”},另一个块的范围为{catalog_id:12,category:“n”}到{catalog_id:12,category:“z”},因为您只能有一个具有{catalog_id:12}的文档,并且区块范围是基于现有文档创建的)
因此,在您的情况下,查询应该转到单个碎片 它可能击中一个或几个碎片。如果catalog_id在所有服务器上,那么是的,所有服务器都可能被查询。在我的情况下catalog_id是唯一的,顺便说一句,如果catalog_id保证是唯一的,为什么要创建复合碎片密钥?是不是因为你想在{catalog_id:1,category_id:1}上建立索引?