(mongodb >=1.0.0)
MongoDB\Driver\ReadPreference::__construct — 创建一个新的 ReadPreference
$mode
, ?array $tagSets
= null
, ?array $options
= null
)构造一个新的 MongoDB\Driver\ReadPreference,它是一个不可变的值对象。
mode
值 | 描述 |
---|---|
MongoDB\Driver\ReadPreference::RP_PRIMARY 或 "primary" |
所有操作都从当前副本集主节点读取。这是 MongoDB 的默认读取首选项。 |
MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED 或 "primaryPreferred" |
在大多数情况下,操作从主节点读取,但如果主节点不可用,则操作从从节点读取。 |
MongoDB\Driver\ReadPreference::RP_SECONDARY 或 "secondary" |
所有操作都从副本集的从节点读取。 |
MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED 或 "secondaryPreferred" |
在大多数情况下,操作从从节点读取,但如果没有任何从节点可用,则操作从主节点读取。 |
MongoDB\Driver\ReadPreference::RP_NEAREST 或 "nearest" |
操作从网络延迟最低的副本集成员读取,与成员类型无关。 |
tagSets
标签集允许您将读取操作定位到副本集的特定成员。此参数应该是一个关联数组的数组,每个数组都包含零个或多个键值对。在为读取操作选择服务器时,驱动程序将尝试选择一个拥有标签集中所有标签的节点(即键值对的关联数组)。如果选择失败,驱动程序将尝试后续的集合。一个空标签集 (array()
) 将匹配任何节点,并且可以用作后备。
标签与 MongoDB\Driver\ReadPreference::RP_PRIMARY
模式不兼容,并且通常只在为读取操作选择副本集的从节点时应用。但是,MongoDB\Driver\ReadPreference::RP_NEAREST
模式与标签集结合使用时,会选择网络延迟最低的匹配成员。此成员可能是主节点或从节点。
options
选项 | 类型 | 描述 |
---|---|---|
hedge | object|array |
指定是否使用 » 对冲读取,这在 MongoDB 4.4+ 中针对分片查询受支持。 服务器对冲读取适用于所有非主节点读取首选项,并且在使用 |
maxStalenessSeconds | int |
指定从从节点读取的最大复制延迟或“陈旧性”。当从节点的估计陈旧性超过此值时,驱动程序将停止将其用于读取操作。 如果指定,最大陈旧性必须是一个大于或等于 默认为 此选项与 |
mode
无效,则抛出 MongoDB\Driver\Exception\InvalidArgumentException。tagSets
或 tagSets
格式不正确(即不是零个或多个文档的数组),则抛出 MongoDB\Driver\Exception\InvalidArgumentException。"maxStalenessSeconds"
选项或其范围超出,则抛出 MongoDB\Driver\Exception\InvalidArgumentException。
版本 | 描述 |
---|---|
PECL mongodb 1.8.0 | 添加了 "hedge" 选项。 |
PECL mongodb 1.3.0 |
|
PECL mongodb 1.2.0 |
添加了第三个 |
示例 #1 MongoDB\Driver\ReadPreference::__construct() 示例
<?php
/* 优先使用从节点,但回退到主节点。 */
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED));
/* 优先使用纽约数据中心中网络延迟最低的节点。 */
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_NEAREST, [['dc' => 'ny']]));
/* 要求一个复制延迟在主节点两分钟内的从节点 */
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY, null, ['maxStalenessSeconds' => 120]));
/* 明确启用服务器对冲读取 */
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY, null, ['hedge' => ['enabled' => true]]));
?>
上面的示例将输出
object(MongoDB\Driver\ReadPreference)#1 (1) { ["mode"]=> string(18) "secondaryPreferred" } object(MongoDB\Driver\ReadPreference)#1 (2) { ["mode"]=> string(7) "nearest" ["tags"]=> array(1) { [0]=> object(stdClass)#2 (1) { ["dc"]=> string(2) "ny" } } } object(MongoDB\Driver\ReadPreference)#1 (2) { ["mode"]=> string(9) "secondary" ["maxStalenessSeconds"]=> int(120) } object(MongoDB\Driver\ReadPreference)#1 (2) { ["mode"]=> string(9) "secondary" ["hedge"]=> object(stdClass)#1 (1) { ["enabled"]=> bool(true) } }