我在集群配置中使用Mongo (shell版本2.6.12)。现在,我有一些收藏品切分,并希望切碎另一个收藏。此集合中已经包含数据。一旦我运行命令对集合进行切分并给出它的关键,集群将获取现有数据并将其分散到集群中的多个系统中,还是将现有数据保存在一台服务器上,然后将任何新数据传播到其他系统?
发布于 2018-05-18 21:27:24
当您分割现有的集合时,MongoDB将根据数据大小将碎片键的值拆分为块范围,并根据块分布开始在碎片之间重新平衡。重新平衡一个大型的集合可能需要非常多的资源,因此您应该考虑到时间和对您的生产部署的影响。
在MongoDB 2.6中(2016年10月生命结束),均衡器一次只能执行一次块迁移。在MongoDB 3.4或更高版本中,平衡器可以执行并行块迁移,但每个碎片一次最多只能参与一个迁移。与MongoDB 3.6一样,这意味着具有n个碎片的切分集群最多可以执行n/2 (四舍五入)同时的块迁移。
分割大型现有集合的一种更快的方法是基于碎片键的当前数据分发版进行空集合中的预分割块,然后将现有数据转储并恢复到这个新的切分集合中。预拆分方法通过创建适当的块范围来最小化重新平衡活动,从而在insert上分发数据。
自从MongoDB 2.6以来,性能有了很大的提高,所以我强烈建议升级到受支持的MongoDB版本(最好是MongoDB 3.4或更高版本)。
https://dba.stackexchange.com/questions/207196
复制相似问题