php - MongoDB PHP : Reading from Slaves and setting persistent connections with a heavy read environment

标签 php mongodb mongodb-php

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

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

最佳答案

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 :

Removed the "persist" option, as all connections are now persistent. It can still be used, but it doesn't affect anything.

关于php - MongoDB PHP : Reading from Slaves and setting persistent connections with a heavy read environment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13475762/

相关文章:

javascript - 我正在尝试使显示的表格(使用数据表)以 csv 格式下载

php - PHP减去字符串的第一个字符

javascript - 符号不能用ajax发布

json - NodeJS 与 mongoDB JSONFormat 问题

MongoDB 和 PHP - 返回嵌套数组的计数

mongodb - 使用 MongoDB 进行正确的索引和排序

php - 从 mongodb 中删除许多文档

javascript - 将 Excel 的 "41014"日期转换为 PHP 或 JavaScript 中的实际日期

node.js - MongoDB - MongoError : Resulting document after update is larger than 16777216

mysql - 在微型 EC2 实例上安装 MySQL 和 MongoDB