Mongo DB:使用最小/最大哈希键作为下限/上限分割块

时间:2014-11-27 14:29:01

标签: mongodb

这可能是一个有明显答案的愚蠢问题,但是如何将具有最小/最大散列键的块拆分为下限/上限?

例如,我想要拆分这个块:

{
    "_id" : "database-name.collectionName-_id_5232174760913548110",
    "lastmod" : Timestamp(5, 1),
    "lastmodEpoch" : ObjectId("5474796988a23861ead5dc60"),
    "ns" : "database-name.collectionName",
    "min" : {
        "_id" : NumberLong("5232174760913548110")
    },
    "max" : {
        "_id" : { "$maxKey" : 1 }
    },
    "shard" : "dimA"
}

我尝试将它拆分为:

db.adminCommand( {
    split: "database-name.collectionName",
    bounds: [{_id: NumberLong("5232174760913548110")}, {{_id: {"$maxKey" : 1}}}] } )

,但因错误消息“从给定的上限和下限找不到块”而失败。

该命令适用于不是最大/最小键的块,所以我认为我不应该使用{_id: {"$maxKey" : 1}}作为上限。

有什么想法吗?

谢谢,

尼娜。

1 个答案:

答案 0 :(得分:1)

这基本上只是关于如何显示$maxKey与如何将它传递到shell以在命令中使用它。最简单的方法是展示一个工作示例,所以这是我的测试集合的原始布局(foo.bar):

foo.bar
        shard key: { "_id" : "hashed" }
        chunks:
            shard0000   3
        { "_id" : { "$minKey" : 1 } } -->> { "_id" : NumberLong("-4097713469691957209") } on : shard0000 Timestamp(1, 3) 
        { "_id" : NumberLong("-4097713469691957209") } -->> { "_id" : NumberLong("1468066378930898747") } on : shard0000 Timestamp(1, 4) 
        { "_id" : NumberLong("1468066378930898747") } -->> { "_id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 2)

要拆分最后一个块,只需执行此操作:

db.adminCommand( {
    split: "foo.bar",
    bounds: [{_id: NumberLong("1468066378930898747")}, {_id: MaxKey}] } )
{ "ok" : 1 }

现在,为了证明它发生了,布局看起来像这样:

foo.bar
        shard key: { "_id" : "hashed" }
        chunks:
            shard0000   4
        { "_id" : { "$minKey" : 1 } } -->> { "_id" : NumberLong("-4097713469691957209") } on : shard0000 Timestamp(1, 3) 
        { "_id" : NumberLong("-4097713469691957209") } -->> { "_id" : NumberLong("1468066378930898747") } on : shard0000 Timestamp(1, 4) 
        { "_id" : NumberLong("1468066378930898747") } -->> { "_id" : NumberLong("5350365356528563634") } on : shard0000 Timestamp(1, 5) 
        { "_id" : NumberLong("5350365356528563634") } -->> { "_id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 6)