MongoDB分片不能以最佳方式分发

时间:2013-07-24 21:03:13

标签: mongodb sharding

我正在进行测试MongoDB实现,我试图将1,000,000条记录批量插入集合中,并将其均匀地分布在两个分片之间。我的初步试验看到一个碎片包含995760个记录,另一个碎片只包含4251个记录。我试图预分裂,但没有改变任何东西。我是分片概念的新手,并希望对这个主题有任何帮助。

更新:

我的分片键入了字段“number”,这是一个整数,我的范围是1 - 999,999

状态:

{
"sharded" : true,
"ns" : "test.test_collection",
"count" : 999999,
"numExtents" : 21,
"size" : 43982976,
"storageSize" : 210247680,
"totalIndexSize" : 60396112,
"indexSizes" : {
    "_id_" : 32466896,
    "number_1" : 27929216
},
"avgObjSize" : 43.983019983019986,
"nindexes" : 2,
"nchunks" : 239,
"shards" : {
    "firstset" : {
        "ns" : "test.test_collection",
        "count" : 995754,
        "size" : 43813176,
        "avgObjSize" : 44,
        "storageSize" : 123936768,
        "numExtents" : 11,
        "nindexes" : 2,
        "lastExtentSize" : 37625856,
        "paddingFactor" : 1,
        "systemFlags" : 1,
        "userFlags" : 0,
        "totalIndexSize" : 60118128,
        "indexSizes" : {
            "_id_" : 32319728,
            "number_1" : 27798400
        },
        "ok" : 1
    },
    "secondset" : {
        "ns" : "test.test_collection",
        "count" : 4245,
        "size" : 169800,
        "avgObjSize" : 40,
        "storageSize" : 86310912,
        "numExtents" : 10,
        "nindexes" : 2,
        "lastExtentSize" : 27869184,
        "paddingFactor" : 1,
        "systemFlags" : 1,
        "userFlags" : 0,
        "totalIndexSize" : 277984,
        "indexSizes" : {
            "_id_" : 147168,
            "number_1" : 130816
        },
        "ok" : 1
    }
},
"ok" : 1
}

更新2:

感谢@Sammaye的建议。问题与我的分片键有关。当我对密钥进行哈希处理时,批量插入会均匀地分割记录。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

群集通常需要一些时间才能达到平衡。如果您在一个大插入中输入了所有这些文档,那么它们将首先全部写入主分片,并且一旦达到最大块大小,它将被分成块。然后,块会逐个迁移到另一个碎片,这可能需要一些时间。

从我可以看到你有大约100MB的数据,但429块,这有点奇怪?你设置了什么块大小?太小的块大小肯定会减慢块迁移到另一个碎片的速度。