我正在尝试使用散列分片键:{group_id:"hashed"} 拆分 mongodb 分片集群中的几个巨型 block 。
我使用 mongodb 文档中的以下命令来拆分这些巨型 block :
db.runCommand( { split: "test.people",
bounds : [ { group_id: NumberLong("-5838464104018346494") },
{ group_id: NumberLong("-5557153028469814163") }
] } )
但出现以下错误:
{ "cause" : { }, "ok" : 0, "errmsg" : "split failed" }.
此故障的可能原因是什么?分片键 group_id 的基数为 26231,共有 4521157 个文档。
已检查 this讨论但找不到原因。
P.S : group_id 是 ObjectId。
最佳答案
你的基数方式太小了。当他达到64mb时,一个chunk会自动 split 。
目前,在基数为 26231 的情况下,您的集合在没有巨型 block 的情况下最大不能超过 26231*64mb...而且在此之前您可能会在很长一段时间内遇到问题,除非您有一个完美的分布。
在您的情况下,您没有任何 group_id 值导致 NumberLong("-5838464104018346494") 和 NumberLong("-5557153028469814163") 之间的哈希值...
所以你不能拆分它,因为你的基数太小了。
总而言之,您立即需要一个更好的分片键,这意味着 mongodump 一切,然后使用新的分片键进行 mongorestore。
关于Mongodb分片: Chunk split failed with Hashed Shard Key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30802944/