MongoDB预分割复合分片键的块

时间:2014-06-18 07:58:16

标签: mongodb sharding

在我的mongodb设置中,我有一个复合分片键{"region" : 1, "foo" : 1, "bar" : 1},我知道值区域可以是,并且每个区域应该在一个块上。

因此,我希望仅根据区域密钥进行预分割。分片状态应该如下:

{ "region": { "$minKey" : 1 }, "foo": { "$minKey" : 1 }, "bar": { "$minKey" : 1 } } -> { "region": region1, "foo": { "$minKey" : 1 }, "bar": { "$minKey" : 1 } } on: shard1
{ "region": region1, "foo": { "$minKey" : 1 }, "bar": { "$minKey" : 1 } } -> { "region": region2, "foo": { "$minKey" : 1 }, "bar": { "$minKey" : 1 } } on: shard2
{ "region": region2, "foo": { "$minKey" : 1 }, "bar": { "$minKey" : 1 } } -> { "region": { "$maxKey" : 1 }, "foo": { "$minKey" : 1 }, "bar": { "$minKey" : 1 } } on: shard3

我已经尝试了一些方法来实现这一目标,但没有任何效果:

  • db.runCommand( { split : "mydb.mycollection" , middle : { "region" : "region1" } } );将返回错误,因为完整的分片键必须是分割的一部分。
  • db.runCommand( { split : "mydb.mycollection" , middle : { "region" : "region1", "foo" : { "$minKey" : 1 }, "bar" : { "$minKey" : 1 } } } );db.runCommand( { split : "mydb.mycollection" , middle : { "region" : "region1", "foo" : "$minKey" , "bar" : "$minKey" } } );会将minKey解释为String并在该基础上拆分,这是错误的。

如何最终在单个字段基础上使用复合分片键拆分块?!

干杯。

0 个答案:

没有答案