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(即使你可以,也比......是的。散列值可能会有所不同)