PHP Conference Japan 2024

MongoDB\Driver\ReadPreference::__construct

(mongodb >=1.0.0)

MongoDB\Driver\ReadPreference::__construct建立新的讀取偏好設定

說明

final public MongoDB\Driver\ReadPreference::__construct(字串|整數 $mode, ?陣列 $tagSets = null, ?陣列 $options = null)

建構一個新的 MongoDB\Driver\ReadPreference,它是一個不可變的值物件。

參數

mode

讀取偏好模式
說明
"primary"

所有操作皆從目前的複本集主節點讀取。這是 MongoDB 的預設讀取偏好。

"primaryPreferred"

在大多數情況下,操作會從主節點讀取,但如果主節點不可用,操作會從次要成員讀取。

"secondary"

所有操作皆從複本集的次要成員讀取。

"secondaryPreferred"

在大多數情況下,操作會從次要成員讀取,但如果沒有可用的次要成員,操作會從主節點讀取。

"nearest"

操作會從網路延遲最低的複本集成員讀取,不論該成員的類型為何。

tagSets

標籤集允許您將讀取操作指向複本集的特定成員。此參數應為關聯陣列的陣列,每個關聯陣列包含零個或多個鍵值對。當選擇伺服器進行讀取操作時,驅動程式會嘗試選擇具有集合中所有標籤的節點(即鍵值對的關聯陣列)。如果選擇失敗,驅動程式將嘗試後續的集合。空的標籤集 (array()) 將會匹配任何節點,並且可以用作備用選項。

標籤與 "primary" 模式不相容,而且通常僅適用於為讀取操作選擇集合的次要成員時。但是,"nearest" 模式與標籤集合併使用時,會選擇網路延遲最低的匹配成員。此成員可以是主節點或次要成員。

options

options
選項 類型 說明
hedge 物件|陣列

指定是否使用» 對沖讀取,MongoDB 4.4+ 以上版本的分片查詢支援此功能。

伺服器對沖讀取適用於所有非主要讀取偏好,並且在使用 "nearest" 模式時預設啟用。此選項允許透過指定 ['enabled' => true] 明確啟用非主要讀取偏好的伺服器對沖讀取,或透過指定 ['enabled' => false] 明確停用 "nearest" 讀取偏好的伺服器對沖讀取。

maxStalenessSeconds 整數

指定從次要節點讀取的最大複製延遲或「過時時間」。當次要節點的估計過時時間超過此值時,驅動程式將停止使用它進行讀取操作。

如果指定,最大過時時間必須是大於或等於 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 mode 參數傳遞 int 已被 _*棄用*_。
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