手册
PHP Manual

读取首选项

MongoDB 2.2 和 1.3.0 版本的驱动增加了支持 » 读取首选项, 允许你指定怎样查询MongoDB复制集. 读取首选项可能被指定在连接上,或者库上,或者是集合上. 首选项规定默认要自上而下的继承 (举个例子 MongoCollection 将继承相应的 MongoDB 实例的读取首选项).

读取首选项是模式和标签集相结合的. 模式决定mongod的优先权, 而 » 标签集 为mongod实例合格指定了标准。只有那些ping附近的mongd实例时间在15毫秒内的Mongod实例是合格的。

读取首选项模式

Warning

所有的读取首选项都可能返回从节点比主节点延时的的数据,除非你选择MongoClient::RP_PRIMARY。如果你不使用MongoClient::RP_PRIMARY.模式,请确保你的应用可以容忍过时的数据。

标签集

» 标签集允许你自定义参数,把读操作指向特定的节点。标签集使得下面两种情况成为可能,读操作指向特定的数据节点或者指定的mongod实例给指定类型的操作使用,例如记录日志或者分析日志。

你可以指定标签集用下面的读取首选项模式:

你不能指定标签集用 MongoClient::RP_PRIMARY 读取首选项模式。只有选择了一个从节点,标签才能用,除非是最近模式。

特殊的读取首选项

读取首选项可能指定连接URI给 MongoClient::__construct(), 使用查询串语法或者使用标签集的数组语法传递给核心类的设置方法。

当某个读取首选项使用了查询串, 标签集的 readPreferenceTags值应该是逗号分隔开的一串冒号连接的键值对。

Note:

每一个查询串定义的标签集将使用 readPreferenceTags 名称. 不像php接收URL查询串的方式,readPreferenceTags连续的值相互不覆盖。驱动将按照顺序获得标签集。

Warning

如果驱动找不到一个匹配的标签集,读取会失败! 你有责任提供合适的回退,像空的 readPreferenceTags 值指定“没有标签集首选项”.

Example #1 查询串语法的读取首选项URI链接

<?php
// Prefer the nearest server with no tag preference
$uri  'mongodb://rs1.example.com,rs2.example.com/';
$uri .= '?readPreference=nearest';
$m = new MongoClient($uri, array('replicaSet' => 'rs'));

// Pick the nearest server in the "east" data center
$uri  'mongodb://rs1.example.com,rs2.example.com/';
$uri .= '?readPreference=nearest';
$uri .= '&readPreferenceTags=dc:east';
$m = new MongoClient($uri, array('replicaSet' => 'rs'));

// Prefer the nearest server in the "east" data center also used for reporting,
// but fall back to a server in the "west" data center
$uri  'mongodb://rs1.example.com,rs2.example.com/';
$uri .= '?readPreference=nearest';
$uri .= '&readPreferenceTags=dc:east,use:reporting';
$uri .= '&readPreferenceTags=dc:west';
$m = new MongoClient($uri, array('replicaSet' => 'rs'));

// Prefer the nearest server in the "east" data center, then a server in the
// "west" data center, and finally fall back to no tag set preference
$uri  'mongodb://rs1.example.com,rs2.example.com/';
$uri .= '?readPreference=nearest';
$uri .= '&readPreferenceTags=dc:east';
$uri .= '&readPreferenceTags=dc:west';
$uri .= '&readPreferenceTags=';
$m = new MongoClient($uri, array('replicaSet' => 'rs'));
?>

Example #2 Setting read preferences with array syntax for tag sets

<?php

$m 
= new MongoClient('mongodb://rs1.example.com,rs2.example.com', array(
    
'replicaSet' => 'rs',
));

// Prefer the nearest server with no tag preference
$m->setReadPreference(MongoClient::RP_NEAREST, array());

// Pick the nearest server in the "east" data center
$m->setReadPreference(MongoClient::RP_NEAREST, array(
    array(
'dc' => 'east'),
));

// Prefer the nearest server in the "east" data center also used for reporting,
// but fall back to a server in the "west" data center
$m->setReadPreference(MongoClient::RP_NEAREST, array(
    array(
'dc' => 'east''use' => 'reporting'),
    array(
'dc' => 'west'),
));

// Prefer the nearest server in the "east" data center, then a server in the
// "west" data center, and finally fall back to no tag set preference
$m->setReadPreference(MongoClient::RP_NEAREST, array(
    array(
'dc' => 'east'),
    array(
'dc' => 'west'),
    array(),
));
?>


手册
PHP Manual