PHP Conference Japan 2024

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

读取首选项模式
描述
"primary"

所有操作都从当前副本集主节点读取。这是 MongoDB 的默认读取首选项。

"primaryPreferred"

在大多数情况下,操作从主节点读取,但如果主节点不可用,则操作从辅助节点读取。

"secondary"

所有操作都从副本集的辅助节点读取。

"secondaryPreferred"

在大多数情况下,操作从辅助节点读取,但如果没有辅助节点可用,则操作从主节点读取。

"nearest"

操作从副本集中网络延迟最小的节点读取,无论节点的类型如何。

tagSets

标签集允许您将读取操作目标定位到副本集的特定成员。此参数应为关联数组的数组,每个数组都包含零个或多个键/值对。在为读取操作选择服务器时,驱动程序会尝试选择一个具有所有标签的节点(即键/值对的关联数组)。如果选择失败,驱动程序将尝试后续的集合。空标签集(array())将匹配任何节点,并且可以用作回退。

标签与 "primary" 模式不兼容,并且通常仅在为读取操作选择副本集的辅助成员时适用。但是,"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,这意味着驱动程序在选择读取操作的目标位置时不会考虑辅助节点的延迟。

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

错误/异常

变更日志

版本 描述
PECL mongodb 1.20.0 int 传递给 mode 参数已弃用
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::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)
  }
}
添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top