MongoDB的PHP驅動方法與技巧

來源:互聯網
上載者:User

建立索引有時會阻塞新的串連

當與mongodb複製集建立串連時,驅動程式首先嘗試串連並驗證叢集中每個非 隱藏的節點。如果一個節點是“down”狀態,將跳過。然而,如果一個節點是“UP”狀態,但是持有寫鎖,那麼驗證將沒法執行下去,因此該驅動程式將被掛起了。

在mongodb 2.6版本前,在建立索引時的通病。所有的在前台或後台建立索引,在secondary端將在前台建立。

在PHP驅動程式的1.5.3版本會有所改進,在建立索引時,允許驗證到second節點驗證。

減少is_master_interval值

對於對可用性要求高的應用程式來說,建議檢查預設的驅動程式運行時的配置設定。

mongo.is_master_interval選項控制著在複製集重新選舉時驅動如何快速恢複。

is_master_interval選項預設值為15s,設定驅動發送“isMaster”請求每個mongod執行個體的時間間隔。這些請求協助驅動程式判斷複製集的拓撲結構,具體的來說,就是請求檢測哪個節點是primary並可以接收寫操作。

建議將該值設定為1或2秒,以讓驅動程式在叢集選舉或容錯移轉時,能夠迅速的定位到primary節點。當然啦,這也取決於有多少用戶端以及ping的頻率。

注意,當primary節點發生變化時,如選舉或容錯移轉,總是會有幾秒鐘驅動程式會收到一個“MongoConnectionException” 資訊 “No candidate servers found”。這些異常需要在你的代碼中進行處理,否則會終止應用程式。

理解串連處理方式並配置串連TimeoutMS

PHP驅動程式不使用串連池。因此,建議你每個PHP進程建立一個串連。但是,如果web應用程式有許多PHP背景工作處理序,將會建立很多新的資料庫連接,PHP驅動程式不能共用進程之間的串連。因此,當網路節點慢,伺服器繁忙時,PHP應用程式建立初始資料庫連接時特別容易受到阻礙。

在這種情況下,建議你自訂connectionTimeoutMS 選項和注意php.ini中的mongo.ping_interval選項。

connectionTimeoutMS

PHP驅動程式不顯示的定義一個預設的連線逾時。相反,預設值由php.ini檔案中的default_socket_timeout選項決定,預設是60秒。串連將等待60秒斷開,時間有些長,需要降低些。

強烈建議通過連接字串的URI選項中顯示設定connectionTimeoutMS選項。將其設定為5到30秒之間的值。

mongo.ping_interval

mongo.ping_interval預設值為5秒。該選項設定驅動程式發送ping請求到每個mongod執行個體發現“down”節點的時間間隔,用於跟蹤驅動程式的伺服器黑名單。告訴驅動程式哪些節點忽略。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.