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

Pet*_*gad 7 php mongodb mongodb-php

我正在尝试将所有传入的读取查询设置为在我的mongo服务器上命中slaves.

我在PHP文档中看到了一个引用:

MongoCursor::$slaveOkay = true;
Run Code Online (Sandbox Code Playgroud)

但是,这似乎只是将查询设置为向奴隶发射; 不是真的要做其他事情.我与服务器的连接如下所示:

$mongo = new Mongo("mongodb://my.server:27017", 
                      array("replicaSet" => 'replicaSet', "persist" => "pool")
                  );
Run Code Online (Sandbox Code Playgroud)
  • 当我只想连接到奴隶进行读取时,我是否需要做与持久连接不同的事情?

  • 如何定位查询以仅命中Slave,以便我在主服务器上的写入不会阻止传入的读取请求.

PHP文档向我展示了这个例子:

$db->setSlaveOkay(true);
$c = $db->myCollection;

$cursor = $c->find();
Run Code Online (Sandbox Code Playgroud)

但是我对上面这两者之间存在的差异感到困惑,如果两者都需要的话.

Ste*_*nie 7

SlaveOkay和阅读首选项

SlaveOkay首选项实际上是"次要首选",但仍允许从主要阅读.

MongoDB 2.2和Mongo PHP 1.3.0驱动程序引入了几种新的读取首选模式,所以现在有:

  • primary - 只从主要阅读
  • primaryPreferred - 除非不可用,否则从主要读取
  • secondary - 只读辅助人员
  • secondaryPreferred - 更喜欢从次要读取(等效语义到slaveOK)
  • nearest - 从副本集的最近成员读取(按ping时间)

MongoDB 2.2中的另一个新功能是支持标记集,它允许您通过标记副本集成员来指定自定义读取首选项.这允许您定位特定的辅助.例如,副本集成员可以标记为:{ 'group' : 'reporting' }.

有关PHP驱动程序中读取首选项的更多信息,请参阅PHP.net上Mongo手册:阅读首选项.

持久连接

已经为PHP 1.3.0驱动程序版本重写了连接池,并且所有连接现在都是持久的.

根据更改日志:

删除了"persist"选项,因为所有连接现在都是持久的.它仍然可以使用,但它不会影响任何东西.