(mongodb >=1.0.0)
MongoDB\Driver\ReadPreference::__construct — 建立新的讀取偏好設定
$mode
, ?陣列 $tagSets
= null
, ?陣列 $options
= null
)建構一個新的 MongoDB\Driver\ReadPreference,它是一個不可變的值物件。
mode
值 | 說明 |
---|---|
"primary" |
所有操作皆從目前的複本集主節點讀取。這是 MongoDB 的預設讀取偏好。 |
"primaryPreferred" |
在大多數情況下,操作會從主節點讀取,但如果主節點不可用,操作會從次要成員讀取。 |
"secondary" |
所有操作皆從複本集的次要成員讀取。 |
"secondaryPreferred" |
在大多數情況下,操作會從次要成員讀取,但如果沒有可用的次要成員,操作會從主節點讀取。 |
"nearest" |
操作會從網路延遲最低的複本集成員讀取,不論該成員的類型為何。 |
tagSets
標籤集允許您將讀取操作指向複本集的特定成員。此參數應為關聯陣列的陣列,每個關聯陣列包含零個或多個鍵值對。當選擇伺服器進行讀取操作時,驅動程式會嘗試選擇具有集合中所有標籤的節點(即鍵值對的關聯陣列)。如果選擇失敗,驅動程式將嘗試後續的集合。空的標籤集 (array()
) 將會匹配任何節點,並且可以用作備用選項。
標籤與 "primary"
模式不相容,而且通常僅適用於為讀取操作選擇集合的次要成員時。但是,"nearest"
模式與標籤集合併使用時,會選擇網路延遲最低的匹配成員。此成員可以是主節點或次要成員。
options
選項 | 類型 | 說明 |
---|---|---|
hedge | 物件|陣列 |
指定是否使用» 對沖讀取,MongoDB 4.4+ 以上版本的分片查詢支援此功能。 伺服器對沖讀取適用於所有非主要讀取偏好,並且在使用 |
maxStalenessSeconds | 整數 |
指定從次要節點讀取的最大複製延遲或「過時時間」。當次要節點的估計過時時間超過此值時,驅動程式將停止使用它進行讀取操作。 如果指定,最大過時時間必須是大於或等於 預設為 此選項與 |
mode
無效,則會擲出 MongoDB\Driver\Exception\InvalidArgumentException 例外。tagSets
,或者其格式錯誤(例如,不是零個或多個文件的陣列),則會擲出 MongoDB\Driver\Exception\InvalidArgumentException 例外。"maxStalenessSeconds"
選項,或者其值超出範圍,則會擲出 MongoDB\Driver\Exception\InvalidArgumentException 例外。
版本 | 說明 |
---|---|
PECL mongodb 1.20.0 | 為 mode 參數傳遞 int 已被 _*棄用*_。 |
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) } }