如何对所有MongoDB连接强制slaveOK = true

时间:2013-07-15 16:30:43

标签: php mongodb

所以我最近继承了一大堆php代码,它不是最优的,这里是主要的问题:

  • 它有一个Mongo操作的包装类,比如返回数据库对象,集合对象等......但是实际上并没有在很多地方使用包装类。
  • 在代码的许多地方,广泛使用已弃用的类'mongo'而不是包装类。
  • Mongo群集在1.8上运行,但不能升级。

我的任务是配置一个复制集群,并在从设备上进行负载平衡读取。我把'setSlaveOkay(true)'代码放在包装器类中,理想情况下应该是所有需要的...但是在代码的很多地方直接访问'mongo'和其他类将没有正确的slaveOkay值集。糟糕的代码会出现在很多地方,以至于无法进入并修复每一次事件。

理想情况下,我正在寻找的是:

  • 一种配置从属节点以便暗示slaveokay = true的方法 适用于所有平台的所有连接。
  • 静态属性或 函数到一个mongo类,它将导致所有后续对象 有slaveokay = true

据我所知,这里的人们非常倾向于提供“正确方式”的解决方案,但在这种情况下,建议如“升级到最新的mongo并使用读取首选项”或“创建包装类...... “没用。我继承了代码,我继承了mongo的安装。我需要一个快速而肮脏的修复程序,不会破坏现有的项目...进入代码并更改'mongo'类的500次调用以使用包装器不是一个选项 - 它将引入太多潜在的错误代码 - 并且也无法保证团队中的其他编码人员不会绕过包装类。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

您可以更新到最新的PHP驱动程序并使用读取首选项。这与服务器端无关,除非您使用分片,在这种情况下,您需要MongoDB 2.4+附带的mongos。但是,如果您不使用分片,则不需要2.4群集,因为在客户端处理读取首选项。

我猜你在某处配置了你的连接字符串?如果是这种情况,你可以添加?readPreference = secondaryPrefered。