2012-03-03 74 views
2

您是否编写过用于分片的自定义平衡器来平衡不使用MongoDB中的平衡器的块,并且请您解释一下为什么必须这样做的用例?MongoDB中的自定义平衡器

回答

2

我曾经管理过一些自定义平衡脚本暂时有用的情况,例如,在某些分片上存在区域性数据需求或者某些集合不应平衡的情况下。在速度方面没有真正的优势(主要受磁盘和内存中的数据分布限制),事实上,进行自定义平衡的一个原因是让速度变慢。

虽然这是很挑剔的,但通常不值得我的长期经验。您可以使用平衡器窗口进行基于时间的平衡,并且将来可以使用块标记以及将集合标记为“不平衡”的功能,这将使大多数其他任务无需自定义脚本。

https://jira.mongodb.org/browse/SERVER-2545 https://jira.mongodb.org/browse/SERVER-4621一个价格

0

两个答案:

  1. 目标:慢平衡 - 自定义均衡器能写入更慢,增加每个余额轮回之间的时间延迟。这可以用于在您与其他(可能更重要)的应用程序共享吞吐量的情况下降低IOPS /磁盘吞吐量。我可能会建议寻求在守护进程中使用unix'nice',或者设置平衡来使用时间表(请参阅Mongo文档)。

注意:使用MongoDB的版本2.4,默认改变secondaryThrottle验证之前与块迁移前进的数据被写入到次级。如果您只是禁用了辅助程序,这可能会大大减慢块迁移。为了解决这个问题,类型:

use config 
db.settings.update({"_id":"balancer"},{$set:{"_secondaryThrottle":false}}) 
  1. 目标:更快的平衡 - 我们都知道平衡器可以永远需要平衡不同的疯狂块计算,天量级。我没有写这种平衡器,但我可以很容易地看到它是如何成为一个平衡器。假定一次只能有一个块移动。如果我们假定我们有大量的碎片(比如48个),并且每个碎片都有它自己的磁盘/设备,那么这个迁移概念可以通过配对要被迁移的碎片/碎块来加速,并且全部进入平行。

我们不知道的是,这对配置服务器有什么影响。配置服务器的工作方式是否存在假设,如果我们有2个以上的同时移动,会使其中断?听起来好像是该查看配置服务器代码的时候了。或者,如果你/我/我们写了这样一种动物,它是否有用或者只是导致疼痛和死亡,或者甚至更糟,被迫住在密西西比州,我们中的一个人可能会问10Gen。