MongoDB的PHP驅(qū)動(dòng)方法與技巧
創(chuàng)建索引有時(shí)會(huì)阻塞新的連接
當(dāng)與mongodb復(fù)制集建立連接時(shí),驅(qū)動(dòng)程序首先嘗試連接并驗(yàn)證集群中每個(gè)非 隱藏的節(jié)點(diǎn)。如果一個(gè)節(jié)點(diǎn)是“down”狀態(tài),將跳過。然而,如果一個(gè)節(jié)點(diǎn)是“UP”狀態(tài),但是持有寫鎖,那么驗(yàn)證將沒法執(zhí)行下去,因此該驅(qū)動(dòng)程序?qū)⒈粧炱鹆恕?/p>
在mongodb 2.6版本前,在建立索引時(shí)的通病。所有的在前臺(tái)或后臺(tái)創(chuàng)建索引,在secondary端將在前臺(tái)創(chuàng)建。
在PHP驅(qū)動(dòng)程序的1.5.3版本會(huì)有所改進(jìn),在創(chuàng)建索引時(shí),允許驗(yàn)證到second節(jié)點(diǎn)驗(yàn)證。
減少is_master_interval值
對(duì)于對(duì)可用性要求高的應(yīng)用程序來說,建議檢查默認(rèn)的驅(qū)動(dòng)程序運(yùn)行時(shí)的配置設(shè)置。
mongo.is_master_interval選項(xiàng)控制著在復(fù)制集重新選舉時(shí)驅(qū)動(dòng)如何快速恢復(fù)。
is_master_interval選項(xiàng)默認(rèn)值為15s,設(shè)置驅(qū)動(dòng)發(fā)送“isMaster”請(qǐng)求每個(gè)mongod實(shí)例的時(shí)間間隔。這些請(qǐng)求幫助驅(qū)動(dòng)程序判斷復(fù)制集的拓?fù)浣Y(jié)構(gòu),具體的來說,就是請(qǐng)求檢測(cè)哪個(gè)節(jié)點(diǎn)是primary并可以接收寫操作。
建議將該值設(shè)置為1或2秒,以讓驅(qū)動(dòng)程序在集群選舉或故障轉(zhuǎn)移時(shí),能夠迅速的定位到primary節(jié)點(diǎn)。當(dāng)然啦,這也取決于有多少客戶端以及ping的頻率。
注意,當(dāng)primary節(jié)點(diǎn)發(fā)生變化時(shí),如選舉或故障轉(zhuǎn)移,總是會(huì)有幾秒鐘驅(qū)動(dòng)程序會(huì)收到一個(gè)“MongoConnectionException” 信息 “No candidate servers found”。這些異常需要在你的代碼中進(jìn)行處理,否則會(huì)終止應(yīng)用程序。
理解連接處理方式并配置連接TimeoutMS
PHP驅(qū)動(dòng)程序不使用連接池。因此,建議你每個(gè)PHP進(jìn)程創(chuàng)建一個(gè)連接。但是,如果web應(yīng)用程序有許多PHP工作進(jìn)程,將會(huì)創(chuàng)建很多新的數(shù)據(jù)庫(kù)連接,PHP驅(qū)動(dòng)程序不能共享進(jìn)程之間的連接。因此,當(dāng)網(wǎng)絡(luò)節(jié)點(diǎn)慢,服務(wù)器繁忙時(shí),PHP應(yīng)用程序創(chuàng)建初始數(shù)據(jù)庫(kù)連接時(shí)特別容易受到阻礙。
在這種情況下,建議你自定義 connectionTimeoutMS 選項(xiàng)和注意php.ini中的mongo.ping_interval選項(xiàng)。
connectionTimeoutMS
PHP驅(qū)動(dòng)程序不顯示的定義一個(gè)默認(rèn)的連接超時(shí)。相反,默認(rèn)值由php.ini文件中的default_socket_timeout選項(xiàng)決定,默認(rèn)是60秒。連接將等待60秒斷開,時(shí)間有些長(zhǎng),需要降低些。
強(qiáng)烈建議通過連接字符串的URI選項(xiàng)中顯示設(shè)置connectionTimeoutMS選項(xiàng)。將其設(shè)置為5到30秒之間的值。
mongo.ping_interval
mongo.ping_interval默認(rèn)值為5秒。該選項(xiàng)設(shè)置驅(qū)動(dòng)程序發(fā)送ping請(qǐng)求到每個(gè)mongod實(shí)例發(fā)現(xiàn)“down”節(jié)點(diǎn)的時(shí)間間隔,用于跟蹤驅(qū)動(dòng)程序的服務(wù)器黑名單。告訴驅(qū)動(dòng)程序哪些節(jié)點(diǎn)忽略。
相關(guān)文章
mongodb中ObjectId和ObjectIdr實(shí)現(xiàn)
本文主要介紹了mongodb中ObjectId和ObjectIdr實(shí)現(xiàn)2023-12-12
SpringBoot?集成MongoDB實(shí)現(xiàn)文件上傳功能
這篇文章主要介紹了SpringBoot?集成MongoDB實(shí)現(xiàn)文件上傳,主要通過示例代碼記錄文件上傳的步驟,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
詳解MongoDB中用sharding將副本集分配至服務(wù)器集群的方法
副本集是MongoDB的主從復(fù)制中的重要功能,經(jīng)常被用來作額外的備份,這里我們就來詳解MongoDB中用sharding將副本集分配至服務(wù)器集群的方法,首先還是來回顧一下MongoDB中副本集的基本知識(shí):2016-07-07
關(guān)于Mongodb 認(rèn)證鑒權(quán)你需要知道的一些事
最近因?yàn)閙ongodb被黑了,早先我就疑惑過怎么這東西開啟服務(wù)就能用了,后來找了各方資料,知道MongoDB默認(rèn)是沒有鑒權(quán)的,所以這篇文章主要給大家介紹了關(guān)于Mongodb認(rèn)證鑒權(quán)你需要知道的一些事,需要的朋友可以參考下。2017-10-10
SqlServer與MongoDB結(jié)合使用NHibernate
這篇文章主要為大家詳細(xì)介紹了SqlServer與MongoDB結(jié)合使用NHibernate的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
mongodb replica set 配置高性能多服務(wù)器詳解
mongodb的多服務(wù)器配置,以前寫過一篇文章,是master-slave模式的,master-slave模式,不能自動(dòng)實(shí)現(xiàn)故障轉(zhuǎn)移和恢復(fù)。所以推薦大家使用mongodb的replica set,來實(shí)現(xiàn)多服務(wù)器的高性能。2014-07-07
Mongodb?刪除集合數(shù)據(jù)后釋放磁盤空間的操作步驟
Mongodb當(dāng)集合數(shù)據(jù)占用比較多,對(duì)其進(jìn)行清理后,集合存儲(chǔ)空間下降,但磁盤空間并沒釋放,對(duì)于具有活動(dòng)更新的集合來說,有一些可重用的空間是正常的,過多的可重用空間通常是刪除大量數(shù)據(jù)的結(jié)果,這篇文章主要介紹了Mongodb?刪除集合數(shù)據(jù)后如何釋放磁盤空間,需要的朋友可以參考下2023-11-11

