7

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

我在 PHP 文档中看到了对以下内容的引用:

MongoCursor::$slaveOkay = true;

但是,这似乎只是设置了要向从属设备发送的查询;不是真的做任何其他事情。我与服务器的连接如下所示:

$mongo = new Mongo("mongodb://my.server:27017", 
                      array("replicaSet" => 'replicaSet', "persist" => "pool")
                  );
  • 当我只想连接到从站进行读取时,我是否需要对持久连接做任何不同的事情?

  • 如何将查询定位到仅命中从属设备,以便我在主服务器上的写入不会阻塞传入的读取请求。

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

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

$cursor = $c->find();

但是,我对上述两者之间的差异以及是否需要两者感到困惑。

4

1 回答 1

7

SlaveOkay 和读取首选项

SlaveOkay 首选项实际上是“次要首选”,但仍允许从主要读取。

MongoDB 2.2 和 Mongo PHP 1.3.0 驱动程序引入了几种新的读取偏好模式,因此现在有:

  • primary- 只从主要读取
  • primaryPreferred- 从主数据库读取,除非它不可用
  • secondary- 只从二级读取
  • secondaryPreferred- 更喜欢从辅助读取(与 slaveOK 等效的语义)
  • nearest- 从副本集中最近的成员读取(按 ping 时间)

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

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

持久连接

连接池已针对 PHP 1.3.0 驱动程序版本进行了重写,所有连接现在都是持久的。

根据变更日志

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

于 2012-11-20T19:39:55.947 回答