MongoDB 分片未最佳分布

标签 mongodb sharding

我正在研究一个测试 MongoDB 实现,我试图将 1,000,000 条记录批量插入到一个集合中,并让它在两个分片之间均匀分布。我最初的试验看到一个分片包含 995760 条记录,而另一个分片仅包含 4251 条记录。我试图预拆分,但这并没有改变任何东西。我是分片概念的新手,非常感谢有关该主题的任何帮助。

更新:

我在“数字”字段中的分片键是一个整数,范围从 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 的建议。这个问题与我的分片键有关。当我散列 key 时,批量插入平均分割记录。感谢所有的帮助!

最佳答案

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

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

关于MongoDB 分片未最佳分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17844760/

相关文章:

linux - Mongodb升级问题

node.js - mongodb:将上一个管道结果的数组引用到下一个管道

php - 将字段名称列入白名单以防止恶意数据操纵?

elasticsearch - 截至ES 7.8,每个Elasticsearch索引的默认分片和副本数是多少?

python - 使用 Python 水平扩展或分片 Python-RQ 或 Redis

node.js - Mongodb 增加了 db.currentOp() 问题

node.js - Mongoose 请求未被其他文档引用的文档

node.js - 如何获取具有不同值(其中其他值最低)的 (Node.js) MongoDB 文档?

mongodb - 是否有 RDBMS 进行自动缩放、分片、重新平衡?