MongoDB分片未优化分布

MongoDB分片未优化分布,mongodb,sharding,Mongodb,Sharding,我正在开发一个测试MongoDB实现,我试图将1000000条记录批量插入到一个集合中,并使其均匀分布在两个碎片之间。我最初的测试看到一个碎片包含995760条记录,另一个碎片只包含4251条记录。我试图预先拆分,但这并没有改变任何事情。我对切分的概念还不熟悉,如果能在这个问题上得到任何帮助,我将不胜感激 更新: 我的切分键位于字段“number”上,该字段是一个整数,范围为1-999999 地位: { "sharded" : true, "ns" : "test.test_collection

我正在开发一个测试MongoDB实现,我试图将1000000条记录批量插入到一个集合中,并使其均匀分布在两个碎片之间。我最初的测试看到一个碎片包含995760条记录,另一个碎片只包含4251条记录。我试图预先拆分,但这并没有改变任何事情。我对切分的概念还不熟悉,如果能在这个问题上得到任何帮助,我将不胜感激

更新:

我的切分键位于字段“number”上,该字段是一个整数,范围为1-999999

地位:

{
"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的建议。这个问题与我的碎片钥匙有关。当我散列键时,大容量插入平均分割记录。谢谢你的帮助

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


据我所见,你有大约100MB的数据,但有429个数据块,这有点奇怪?您将块大小设置为多少?块大小太小肯定会减慢块到另一个碎片的迁移。

我们需要很多信息,您可以从使用
status()进行编辑开始。
?另外告诉我们你的切分键是什么我注意到的一件事是,你的切分键是montonic,这意味着它从1到999999,这可能意味着切分正在按它的方式工作,切分1已满,因此已溢出到切分2。如果您尝试使用散列键,它会改变数据的分布吗?当您说散列切分键时,我假设您是指对已散列的键进行散列,以获得均匀的排列?或者,您的意思是,在分片设置中有一个标志,允许您激活散列?有一个标志,您可以设置为现在实际散列密钥:,很高兴能够提供帮助:)