Mongodb 哈希分片
Mongodb Hashed Sharding
如果我选择 {a:1,b:1,c:1}
作为我的分片键并且在我的查询中我在散列分片策略中过滤 {a:1}
,查询是目标操作还是广播到集群中的每个分片?
如果是定向操作怎么mongodb判断呢?因为 {a:1}
的散列与 {a:1,b:1,c:1}
的散列完全不同
简单的回答是:是的。
这样看:
假设您有以下集合:
//1
{
a: 1,
b: 1,
c: 1,
d: 1
},
//2
{
a: 1,
b: 1,
c: 1,
d: 2
},
//3
{
a: 1,
b: 1,
c: 2,
d: 5
}
根据您的索引,文档 1 和文档 2 必须位于相同的块中(比方说,在 1 号分片上),而文档 3 可以存储在不同的块中(比方说,在 2 号分片上)
现在,如果您搜索 {a: 1},所有三个文档都应该出现。这意味着 mongo 必须将 que 分配给 1 号分片和 2 号分片。
关于你的第二个问题,在 MongoDb 中,你根本无法执行 Compound-Hashed-Index(即使你可以,也比......是的。散列值可能会有所不同)
如果我选择 {a:1,b:1,c:1}
作为我的分片键并且在我的查询中我在散列分片策略中过滤 {a:1}
,查询是目标操作还是广播到集群中的每个分片?
如果是定向操作怎么mongodb判断呢?因为 {a:1}
的散列与 {a:1,b:1,c:1}
简单的回答是:是的。
这样看:
假设您有以下集合:
//1
{
a: 1,
b: 1,
c: 1,
d: 1
},
//2
{
a: 1,
b: 1,
c: 1,
d: 2
},
//3
{
a: 1,
b: 1,
c: 2,
d: 5
}
根据您的索引,文档 1 和文档 2 必须位于相同的块中(比方说,在 1 号分片上),而文档 3 可以存储在不同的块中(比方说,在 2 号分片上)
现在,如果您搜索 {a: 1},所有三个文档都应该出现。这意味着 mongo 必须将 que 分配给 1 号分片和 2 号分片。
关于你的第二个问题,在 MongoDb 中,你根本无法执行 Compound-Hashed-Index(即使你可以,也比......是的。散列值可能会有所不同)