- 相關(guān)推薦
MongoDB的PHP驅動(dòng)方法與技巧大全
創(chuàng )建索引有時(shí)會(huì )阻塞新的連接
當與mongodb復制集建立連接時(shí),驅動(dòng)程序首先嘗試連接并驗證集群中每個(gè)非 隱藏的節點(diǎn)。如果一個(gè)節點(diǎn)是“down”狀態(tài),將跳過(guò)。然而,如果一個(gè)節點(diǎn)是“UP”狀態(tài),但是持有寫(xiě)鎖,那么驗證將沒(méi)法執行下去,因此該驅動(dòng)程序將被掛起了。
在mongodb 2.6版本前,在建立索引時(shí)的通病。所有的在前臺或后臺創(chuàng )建索引,在secondary端將在前臺創(chuàng )建。
在PHP驅動(dòng)程序的1.5.3版本會(huì )有所改進(jìn),在創(chuàng )建索引時(shí),允許驗證到second節點(diǎn)驗證。
減少is_master_interval值
對于對可用性要求高的應用程序來(lái)說(shuō),建議檢查默認的驅動(dòng)程序運行時(shí)的配置設置。
mongo.is_master_interval選項控制著(zhù)在復制集重新選舉時(shí)驅動(dòng)如何快速恢復。
is_master_interval選項默認值為15s,設置驅動(dòng)發(fā)送“isMaster”請求每個(gè)mongod實(shí)例的時(shí)間間隔。這些請求幫助驅動(dòng)程序判斷復制集的拓撲結構,具體的來(lái)說(shuō),就是請求檢測哪個(gè)節點(diǎn)是primary并可以接收寫(xiě)操作。
建議將該值設置為1或2秒,以讓驅動(dòng)程序在集群選舉或故障轉移時(shí),能夠迅速的定位到primary節點(diǎn)。當然啦,這也取決于有多少客戶(hù)端以及ping的頻率。
注意,當primary節點(diǎn)發(fā)生變化時(shí),如選舉或故障轉移,總是會(huì )有幾秒鐘驅動(dòng)程序會(huì )收到一個(gè)“MongoConnectionException” 信息 “No candidate servers found”。這些異常需要在你的代碼中進(jìn)行處理,否則會(huì )終止應用程序。
理解連接處理方式并配置連接TimeoutMS
PHP驅動(dòng)程序不使用連接池。因此,建議你每個(gè)PHP進(jìn)程創(chuàng )建一個(gè)連接。但是,如果web應用程序有許多PHP工作進(jìn)程,將會(huì )創(chuàng )建很多新的數據庫連接,PHP驅動(dòng)程序不能共享進(jìn)程之間的連接。因此,當網(wǎng)絡(luò )節點(diǎn)慢,服務(wù)器繁忙時(shí),PHP應用程序創(chuàng )建初始數據庫連接時(shí)特別容易受到阻礙。
在這種情況下,建議你自定義 connectionTimeoutMS 選項和注意php.ini中的mongo.ping_interval選項。
connectionTimeoutMS
PHP驅動(dòng)程序不顯示的定義一個(gè)默認的連接超時(shí)。相反,默認值由php.ini文件中的default_socket_timeout選項決定,默認是60秒。連接將等待60秒斷開(kāi),時(shí)間有些長(cháng),需要降低些。
強烈建議通過(guò)連接字符串的URI選項中顯示設置connectionTimeoutMS選項。將其設置為5到30秒之間的值。
mongo.ping_interval
mongo.ping_interval默認值為5秒。該選項設置驅動(dòng)程序發(fā)送ping請求到每個(gè)mongod實(shí)例發(fā)現“down”節點(diǎn)的時(shí)間間隔,用于跟蹤驅動(dòng)程序的服務(wù)器黑名單。告訴驅動(dòng)程序哪些節點(diǎn)忽略。
【MongoDB的PHP驅動(dòng)方法與技巧】相關(guān)文章:
PHP錯誤類(lèi)型及屏蔽方法03-29
PHP處理密碼的幾種方法04-02
PHP開(kāi)發(fā)環(huán)境安裝的方法有哪些04-03
php在新浪云中使用imagick的方法03-15
英語(yǔ)閱讀技巧方法技巧03-19
插花技巧與方法01-21