(mongodb >=1.0.0)
MongoDB\Driver\ReadPreference::__construct — Create a new ReadPreference
$mode
, ?array $tagSets
= null
, ?array $options
= null
)Constructs a new MongoDB\Driver\ReadPreference, which is an immutable value object.
mode
Value | Description |
---|---|
"primary" |
All operations read from the current replica set primary. This is the default read preference for MongoDB. |
"primaryPreferred" |
In most situations, operations read from the primary but if it is unavailable, operations read from secondary members. |
"secondary" |
All operations read from the secondary members of the replica set. |
"secondaryPreferred" |
In most situations, operations read from secondary members but if no secondary members are available, operations read from the primary. |
"nearest" |
Operations read from member of the replica set with the least network latency, irrespective of the member's type. |
tagSets
Tag sets allow you to target read operations to specific members of a
replica set. This parameter should be an array of associative arrays, each
of which contain zero or more key/value pairs. When selecting a server for
a read operation, the driver attempt to select a node having all tags in a
set (i.e. the associative array of key/value pairs). If selection fails,
the driver will attempt subsequent sets. An empty tag set
(array()
) will match any node and may be used as a
fallback.
Tags are not compatible with the "primary"
mode and,
in general, only apply when selecting a secondary member of a set for a
read operation. However, the "nearest"
mode, when
combined with a tag set, selects the matching member with the lowest
network latency. This member may be a primary or secondary.
options
Option | Type | Description |
---|---|---|
hedge | object|array |
Specifies whether to use » hedged reads, which are supported by MongoDB 4.4+ for sharded queries.
Server hedged reads are available for all non-primary read preferences
and are enabled by default when using the |
maxStalenessSeconds | int |
Specifies a maximum replication lag, or "staleness", for reads from secondaries. When a secondary's estimated staleness exceeds this value, the driver stops using it for read operations.
If specified, the max staleness must be a signed 32-bit integer
greater than or equal to
Defaults to
This option is not compatible with the |
mode
is invalid.tagSets
is provided for a primary read preference or is malformed (i.e. not an array of zero or more documents)."maxStalenessSeconds"
option is provided for a primary read preference or is out of range.
Version | Beschreibung |
---|---|
PECL mongodb 1.20.0 |
Passing an int for the mode argument
is DEPRECATED.
|
PECL mongodb 1.8.0 |
Added the "hedge" option.
|
PECL mongodb 1.3.0 |
The |
PECL mongodb 1.2.0 |
Added a third |
Beispiel #1 MongoDB\Driver\ReadPreference::__construct() example
<?php
/* Prefer a secondary node but fall back to a primary. */
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::SECONDARY_PREFERRED));
/* Prefer a node in the New York data center with lowest latency. */
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::NEAREST, [['dc' => 'ny']]));
/* Require a secondary node whose replication lag is within two minutes of the primary */
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::SECONDARY, null, ['maxStalenessSeconds' => 120]));
/* Explicitly enable server hedged reads */
var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::SECONDARY, null, ['hedge' => ['enabled' => true]]));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
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) } }