PHP8 MongoDB連接處理和持久性

2024-04-08 10:15 更新
注意: 在 Unix 平臺上,MongoDB 驅(qū)動程序?qū)κ褂?fork() 系統(tǒng)調(diào)用,而不調(diào)用 exec()。建議用戶不要 在分叉中重用 MongoDB\Driver\Manager 實例 子進程。

連接和拓撲持久性(PHP 版本從 1.2.0 開始)

自 1.2.0 以來的所有驅(qū)動程序版本都保留了  libmongoc 客戶端對象 PHP 工作進程,允許它重用數(shù)據(jù)庫連接, 身份驗證狀態(tài)和拓撲信息 多個請求。

當 MongoDB\Driver\Manager::__construct() 為 調(diào)用時,從其參數(shù)(即 URI 字符串和數(shù)組)創(chuàng)建哈希 選項)。驅(qū)動程序?qū)L試查找以前持久化的 ? libmongoc 客戶端對象 那個哈希。如果找不到哈希的現(xiàn)有客戶端,則新客戶端 將被創(chuàng)建并保留以備將來使用??梢越么诵袨?通過驅(qū)動程序選項。"disableClientPersistence"

每個客戶端都包含自己的數(shù)據(jù)庫連接和服務(wù)器視圖 拓撲(例如獨立、副本集、分片集群)。通過持久化 客戶端在PHP請求之間,驅(qū)動程序能夠復用已建立的 數(shù)據(jù)庫連接,并消除了對每個請求的“發(fā)現(xiàn)服務(wù)器拓撲”的需要。

請看以下示例:

<?php

$managers = [
    new MongoDB\Driver\Manager('mongodb://127.0.0.1'),
    new MongoDB\Driver\Manager('mongodb://127.0.0.1'),
    new MongoDB\Driver\Manager('mongodb://127.0.0.1:27017'),
    new MongoDB\Driver\Manager('mongodb://rs1.example.com,rs2.example.com/', ['replicaSet' => 'myReplicaSet']),
];

foreach ($managers as $manager) {
    $manager->executeCommand('test', new MongoDB\Driver\Command(['ping' => 1]));
}

?>

前兩個 Manager 對象將共享相同的  libmongoc 客戶端,因為 它們的構(gòu)造函數(shù)參數(shù)是相同的。第三個和第四個對象將 每個都使用自己的客戶端??偣矊?chuàng)建三個客戶端,并且 執(zhí)行此腳本的 PHP 工作線程將打開兩個與 和 的連接,以及每個 和 的一個連接。 如果驅(qū)動程序在發(fā)出命令后發(fā)現(xiàn)副本集的其他成員,它將打開與 那些服務(wù)器也是如此。127.0.0.1rs1.example.comrs2.example.comhello

如果同一個工作線程在第二個請求中再次執(zhí)行腳本,則三個 客戶端將被重用,并且不會建立新的連接。根據(jù) 上一個請求是多久前送達的,驅(qū)動程序可能需要發(fā)出 用于更新其視圖的其他命令 拓撲。hello

套接字持久性(PHP 1.2.0 之前的版本)

1.2.0 之前的 PHP 驅(qū)動程序版本使用 PHP 的 Streams API 數(shù)據(jù)庫連接,使用 ? libmongoc 中的 API 指定 用于套接字通信的自定義處理程序;但是,新的 libmongoc 客戶端是 為每個 MongoDB\Driver\Manager 創(chuàng)建。因此, 驅(qū)動程序保留單個數(shù)據(jù)庫連接,但不保留身份驗證 狀態(tài)或拓撲信息。這意味著驅(qū)動程序需要發(fā)出 每個請求開頭的命令,用于驗證和 ? 發(fā)現(xiàn)服務(wù)器拓撲。

數(shù)據(jù)庫連接由派生自服務(wù)器的哈希值持久化 host、port 和用于構(gòu)造 MongoDB\Driver\Manager 的 URI 字符串。構(gòu)造函數(shù)的數(shù)組 選項不包含在此哈希中。

注意: 驅(qū)動程序 >= 1.1.8 和 < 1.2.0 的版本不會保留套接字 用于 SSL 連接。參見 ? PHPC-720 其他信息。

盡管它在持久SSL連接和拓撲結(jié)構(gòu)方面存在缺點 信息,此版本的驅(qū)動程序支持所有 SSL 上下文選項,因為它使用 PHP 的 Streams API。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號