如果块中只有一个文档并且大于最大块大小,MongoDB如何迁移块

时间:2013-08-05 22:03:10

标签: mongodb amazon-ec2 ubuntu-12.04 sharding

我最近开始为一家拥有大型mongoDB实例的公司工作。选择的文档密钥存在一些问题,特别是单个文档可能会永远继续增长。经过数百万次更改后,单个文档可以达到130MB +。

我们正在使用MongoDB 2.2.1。我想要做的是修复平衡,因为平衡器在循环中试图迁移一些大块。它失败是因为块大小大于默认的最大允许块大小(64MB)。块也不能拆分,因为它包含单个文档。

真正的解决方法是更改​​文档密钥(创建一个新的数据库实例并迁移到它),但这需要花费很长时间才能完成,我想进行短期修复以帮助平衡。我唯一能想到的是将默认的块大小从64MB增加到160MB,这样我们的一些巨大的块就可以迁移了。

我的问题是,是否更好:

  1. 将最大块大小增加到160MB,手动移动块,然后减小最大块大小。 (大文档ID将在此时恢复为不可迁移)。
  2. 永久性地将最大块大小增加到160MB并保留在那里直到我们可以迁移到新密钥。 (据我所知,增加块大小会对IO造成一些非常大的影响)
  3. 别的什么?

1 个答案:

答案 0 :(得分:1)

单个文档永远不会超过16MB,但共享相同分片键的一组文档当然可以超过16MB。

我不明白为什么你要移动那么大的块,它应该在目前的碎片上完全没问题。现在,我建议使用方案1,因为它影响最小,但你当然应该修复分片键,这样你就不会有共享相同密钥的文件大于64MB。