(mongodb >=1.0.0)
MongoDB\Driver\ReadPreference::__construct — 创建一个新的 ReadPreference
$mode
, ?array $tagSets
= null
, ?array $options
= null
)构造一个新的 MongoDB\Driver\ReadPreference,它是一个不可变的值对象。
mode
值 | 描述 |
---|---|
"primary" |
所有操作都从当前副本集主节点读取。这是 MongoDB 的默认读取首选项。 |
"primaryPreferred" |
在大多数情况下,操作从主节点读取,但如果主节点不可用,则操作从辅助节点读取。 |
"secondary" |
所有操作都从副本集的辅助节点读取。 |
"secondaryPreferred" |
在大多数情况下,操作从辅助节点读取,但如果没有辅助节点可用,则操作从主节点读取。 |
"nearest" |
操作从副本集中网络延迟最小的节点读取,无论节点的类型如何。 |
tagSets
标签集允许您将读取操作目标定位到副本集的特定成员。此参数应为关联数组的数组,每个数组都包含零个或多个键/值对。在为读取操作选择服务器时,驱动程序会尝试选择一个具有所有标签的节点(即键/值对的关联数组)。如果选择失败,驱动程序将尝试后续的集合。空标签集(array()
)将匹配任何节点,并且可以用作回退。
标签与 "primary"
模式不兼容,并且通常仅在为读取操作选择副本集的辅助成员时适用。但是,"nearest"
模式与标签集结合使用时,会选择网络延迟最低的匹配成员。此成员可以是主节点或辅助节点。
options
选项 | 类型 | 描述 |
---|---|---|
hedge | object|array |
指定是否使用 » 对冲读取,MongoDB 4.4+ 及更高版本的分片查询支持此功能。 服务器对冲读取适用于所有非主读取首选项,并且在使用 |
maxStalenessSeconds | int |
指定从辅助节点读取的最大复制延迟或“陈旧性”。当辅助节点的估计陈旧性超过此值时,驱动程序将停止将其用于读取操作。 如果指定,则最大陈旧性必须为大于或等于 默认为 此选项与 |
mode
无效,则抛出 MongoDB\Driver\Exception\InvalidArgumentException。tagSets
或其格式错误(即不是零个或多个文档的数组),则抛出 MongoDB\Driver\Exception\InvalidArgumentException。"maxStalenessSeconds"
选项或其超出范围,则抛出 MongoDB\Driver\Exception\InvalidArgumentException。
版本 | 描述 |
---|---|
PECL mongodb 1.20.0 | 将 int 传递给 mode 参数已弃用。 |
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::SECONDARY_PREFERRED));
/* 首选纽约数据中心的延迟最低的节点。 */
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::NEAREST, [['dc' => 'ny']]));
/* 需要复制延迟在主节点两分钟内的辅助节点 */
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::SECONDARY, null, ['maxStalenessSeconds' => 120]));
/* 显式启用服务器对冲读取 */
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::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) } }