我正在尝试将所有传入的读取查询设置为命中我的mongo服务器上的从属。
我在PHP文档中看到了对:
的引用MongoCursor::$slaveOkay = true;
但是,这似乎只是将查询设置为向奴隶发射;不是真的要做其他事情。我与服务器的连接如下所示:
$mongo = new Mongo("mongodb://my.server:27017",
array("replicaSet" => 'replicaSet', "persist" => "pool")
);
当我只想连接到奴隶进行读取时,我是否需要做与持久连接不同的事情?
如何定位查询以仅命中Slave,以便我在主服务器上的写操作不会阻止传入的读取请求。
PHP文档向我展示了这个例子:
$db->setSlaveOkay(true);
$c = $db->myCollection;
$cursor = $c->find();
然而,我对上述之间存在的差异感到困惑,如果两者都需要,那我就很困惑。
答案 0 :(得分:7)
SlaveOkay首选项实际上是“次要首选”,但仍允许从主要内容中读取。
MongoDB 2.2和Mongo PHP 1.3.0驱动程序引入了几个新的Read Preference Modes,所以现在有:
primary
- 仅从主primaryPreferred
- 从初级读取,除非它不可用secondary
- 仅读取辅助作品secondaryPreferred
- 更喜欢从次要读取(等效语义到slaveOK)nearest
- 从副本集的最近成员(通过ping时间)读取 MongoDB 2.2中的另一个新功能是支持Tag Sets,它允许您通过标记副本集成员来指定自定义读取首选项。这允许您定位特定的辅助。例如,副本集成员可以使用以下标记:{ 'group' : 'reporting' }
。
有关PHP驱动程序中读取首选项的更多信息,请参阅Mongo manual on PHP.net: Read Preferences。
已经为PHP 1.3.0驱动程序版本重写了连接池,现在所有连接都是持久的。
根据changelog:
删除了“persist”选项,因为所有连接现在都是持久的。它仍然可以使用,但它不会影响任何东西。