在我的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并在该基础上拆分,这是错误的。如何最终在单个字段基础上使用复合分片键拆分块?!
干杯。