Mongodb分片:使用Hashed Shard Key进行分块失败

Ati*_*ish 7 sharding mongodb

我正在尝试使用散列分片键分割mongodb分片群集中的几个jumbo块:{group_id:"hashed"}.

我使用mongodb docs中的以下命令来拆分这些巨型块:

db.runCommand( { split: "test.people",
                  bounds : [ { group_id: NumberLong("-5838464104018346494") },
                             { group_id: NumberLong("-5557153028469814163") }
             ] } )
Run Code Online (Sandbox Code Playgroud)

但是得到以下错误:

{ "cause" : { }, "ok" : 0, "errmsg" : "split failed" }.
Run Code Online (Sandbox Code Playgroud)

这次失败的可能原因是什么?分片键group_id的基数为26231,总共4521157个文档.

检查了这个讨论,但无法找到原因.

PS:group_id是ObjectId.

Max*_*net 0

你的基数太小了。当他达到 64mb 时,一大块将自动分裂。

目前,基数为 26231,在没有巨型块的情况下,您的集合不能大于 26231*64mb 最大值...并且您可能会在此之前很长一段时间遇到问题,除非您有一个完美的分布。

在您的情况下,您没有任何 group_id 值,从而导致 NumberLong("-5838464104018346494") 和 NumberLong("-5557153028469814163") 之间的哈希值...

所以你不能分割它,因为你的基数太小了。

总而言之,您立即需要一个更好的分片键,这意味着 mongodump 所有内容,然后使用新的分片键进行 mongorestore。