0

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

  • 它有一个用于 Mongo 操作的包装类,例如返回数据库对象、集合对象等……但包装类实际上并没有在很多地方使用。
  • 在代码的许多地方,与包装类相反,广泛使用了已弃用的类“mongo”。
  • Mongo 集群在 1.8 上运行,但它不是升级的选项。

我的任务是配置一个复制集群并在从属服务器之间实现负载平衡读取。我将'setSlaveOkay(true)'代码放在包装类中,理想情况下应该是所有需要的......但是在代码中很多地方直接访问'mongo'和其他类将没有正确的slaveOkay设置的值。错误代码出现在很多地方,以至于进入并修复每一次出现都会让人望而却步。

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

  • 一种配置从节点的方法,以便对所有平台上的所有连接都隐含 slaveokay=true。
  • mongo 类的静态属性或函数,这将导致所有后续对象具有 slaveokay=true

我知道这里的人们强烈倾向于提供“以正确的方式”完成的解决方案,但是在这种情况下,诸如“升级到最新的 mongo 并使用读取首选项”或“创建包装类......”之类的建议将没用。我继承了代码,我继承了 mongo 安装。我需要一个不会破坏现有项目的快速而肮脏的修复...进入代码并更改 'mongo' 类的 500 次调用以使用包装器不是一种选择 - 它会在代码 - 而且也不能保证团队中的其他编码人员将停止规避包装类。

谢谢你的时间。

4

1 回答 1

1

You can update to the latest PHP driver and use read preferences. This has nothing to do with the server side, unless you are using sharding, in which case you need a mongos that comes with MongoDB 2.4+. But if you're not using sharding, you don't need a 2.4 cluster as read preferences are handled on the client side.

I would guess you have your connection string configured somewhere? If that's the case, you can just add ?readPreference=secondaryPrefered.

于 2013-07-15T17:34:07.710 回答