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)
但是我对上面这两者之间存在的差异感到困惑,如果两者都需要的话.
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"选项,因为所有连接现在都是持久的.它仍然可以使用,但它不会影响任何东西.