MongoDB\Driver\ReadPreference::__construct

(mongodb >=1.0.0)

MongoDB\Driver\ReadPreference::__construct创建一个新的 ReadPreference

描述

final public MongoDB\Driver\ReadPreference::__construct(string|int $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

options
选项 类型 描述
hedge object|array

指定是否使用 » 对冲读取,这在 MongoDB 4.4+ 中针对分片查询受支持。

服务器对冲读取适用于所有非主节点读取首选项,并且在使用 "nearest" 模式时默认启用。此选项允许通过指定 ['enabled' => true] 来明确为非主节点读取首选项启用服务器对冲读取,或通过指定 ['enabled' => false] 来明确为 "nearest" 读取首选项禁用服务器对冲读取。

maxStalenessSeconds int

指定从从节点读取的最大复制延迟或“陈旧性”。当从节点的估计陈旧性超过此值时,驱动程序将停止将其用于读取操作。

如果指定,最大陈旧性必须是一个大于或等于 MongoDB\Driver\ReadPreference::SMALLEST_MAX_STALENESS_SECONDS 的带符号的 32 位整数。

默认为 MongoDB\Driver\ReadPreference::NO_MAX_STALENESS,这意味着驱动程序在选择读取操作的目标位置时不会考虑从节点的延迟。

此选项与 MongoDB\Driver\ReadPreference::RP_PRIMARY 模式不兼容。指定最大陈旧性还要求部署中的所有 MongoDB 实例使用 MongoDB 3.4+。如果部署中的任何 MongoDB 实例的服务器版本较旧,则将在执行时抛出异常。

错误/异常

变更日志

版本 描述
PECL mongodb 1.8.0 添加了 "hedge" 选项。
PECL mongodb 1.3.0

mode 参数现在接受字符串值,这与 MongoDB\Driver\Manager::__construct()"readPreference" URI 选项一致。

PECL mongodb 1.2.0

添加了第三个 options 参数,它支持 "maxStalenessSeconds" 选项。

示例

示例 #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)
  }
}
添加笔记

用户贡献的笔记

此页面没有用户贡献的笔记。
To Top