MongoDB PHP:从Slaves读取并在繁重的读取环境中设置持久连接

时间:2012-11-20 14:50:57

标签: php mongodb mongodb-php

我正在尝试将所有传入的读取查询设置为命中我的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();

然而,我对上述之间存在的差异感到困惑,如果两者都需要,那我就很困惑。

1 个答案:

答案 0 :(得分:7)

SlaveOkay和阅读首选项

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”选项,因为所有连接现在都是持久的。它仍然可以使用,但它不会影响任何东西。