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 = array() )

Создает новый MongoDB\Driver\ReadPreference, который является неизменяемым объектом значения.

Список параметров

mode

Режим предпочтения чтения
Значение Описание
MongoDB\Driver\ReadPreference::RP_PRIMARY or "primary"

Все операции считывается из текущего первичного узла набора реплик. Это предпочтение чтения по умолчанию для MongoDB.

MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED or "primaryPreferred"

В большинстве ситуаций операции считываются из первичного узла, но если он недоступен, операции считываются из вторичных узлов.

MongoDB\Driver\ReadPreference::RP_SECONDARY или "secondary"

Все операции считываются из вторичных узлов набора реплик.

MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED или "secondaryPreferred"

В большинстве ситуаций операции считываются из вторичных членов, но если вторичные члены недоступны, операции считываются из первичного узла.

MongoDB\Driver\ReadPreference::RP_NEAREST or "nearest"

Операции считываются из члена набора репилк с наименьшей задержкой сети, независимо от типа члена.

tagSets

Наборы тегов позволяют настраивать операции чтения для определенных членов набора реплик. Этот параметр должен быть массивом ассоциативных массивов, каждый из которых содержит ноль или несколько пар ключ-значение. При выборе сервера для операции чтения драйвер пытается выбрать узел, имеющий все теги в наборе (т.е. ассоциативный массив пар ключ-значение). Если выбор не удался, the driver will attempt subsequent sets. Пустой набор тегов (array()) будет соответствовать любому узлу и может использоваться как резервный.

Теги не совместимы с режимом MongoDB\Driver\ReadPreference::RP_PRIMARY, и, как правило, применяется только при выборе вторичного члена набора для операции чтения. Однако режим MongoDB\Driver\ReadPreference::RP_NEAREST в сочетании с набором тегов, выбирает соответствующий член с наименьшей задержкой сети. Этот член может быть первичным или вторичным.

options

options
Опция Тип Описание
hedge object|array

Указывает, использовать ли » хеджированные чтения, которые поддерживаются MongoDB 4.4+ для закрытых запросов.

Хеджированные чтения с сервера доступны для всех неосновных предпочтений чтения и включаются по умолчанию при использовании режима "nearest". Этот параметр позволяет явно разрешить чтение с хеджированием на сервере для неосновных предпочтений чтения, указав ['enabled' => true], или явно отключив серверное чтение с хеджированием для предпочтения чтения "nearest", указав ['enabled' => false].

maxStalenessSeconds int

Определяет максимальное отставание репликации или "staleness", для чтения из вторичных узлов. Когда оцениваемая staleness вторичных узлов превышает это значение, драйвер прекращает использовать ее для операций чтения.

Если указано, максимальный staleness должен быть 32-битным числом без знака, большим или равным MongoDB\Driver\ReadPreference::SMALLEST_MAX_STALENESS_SECONDS.

По умолчанию используется MongoDB\Driver\ReadPreference::NO_MAX_STALENESS, что означает, что драйвер не будет учитывать отставания вторичных узлов при выборе направления для операции чтения.

Этот параметр несовместим с режимом MongoDB\Driver\ReadPreference::RP_PRIMARY. Указание максимальной staleness также требует, чтобы все экземпляры MongoDB в развертывании использовали MongoDB 3.4+. Исключение будет выброшено во время выполнения, если экземпляры MongoDB в развертывании имеют более старую версию.

Ошибки

Список изменений

Версия Описание
PECL mongodb 1.8.0 Добавлен параметр "hedge".
PECL mongodb 1.3.0

Аргумент mode теперь принимает строковое значение, которое соответствует URI-опции "readPreference" для MongoDB\Driver\Manager::__construct().

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_SECONDARYnull, ['maxStalenessSeconds' => 120]));

/* Явно включить хеджирование чтения на сервере */
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARYnull, ['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)
  }
}