2012-05-31 62 views
0

我已经创建了蒙戈集合的复合片键: {catalog_id:1,CATEGORY_ID:1}查询复合键分片蒙戈

现在,如果我只是被保证是唯一catalog_id查询集合,查询是否会转到所有碎片?

+0

它可能会碰到一个碎片或几种。它的catalog_id在所有的服务器上,那么是的,所有的服务器都可能被查询。 –

+0

在我的情况catalog_id是唯一 – Rahul

+0

顺便说一句,如果catalog_id保证是独一无二的,你为什么要创建复合片键?这是因为你想要{catalog_id:1,category_id:1}上的索引吗? – matulef

回答

0

在蒙戈分贝,如果你有多个字段一个复合索引,你可以用它来对字段的子集开始查询。所以,如果你有

a,b,c 

的指数,你可以使用它在

a 
a,b 
a,b,c 

不知道查询,如果shardng的工作方式相同。

1

一般情况下,查询会去到任何碎片包含相关区块范围为查询。在你的情况下,如果catalog_id确实是唯一的,那么你将不会有多个块在相同的catalog_id范围内(例如,你将不会有一个块范围{catalog_id:12,category:“a”}到{catalog_id:12,类别: “M”},并用范围中的另一组块{catalog_id:12,类别: “N”}到{catalog_id:12,类别: “Z”},因为你只能有一个单一的文件与{catalog_id:12},块范围基于现有的文档创建)。

所以你的情况,查询应该去一个碎片。