摘要:原文保持更新及修正基于的客戶端配置選項(xiàng),其它驅(qū)動(dòng)大同小異。連接池中連接的最大使用壽命毫秒。設(shè)置該選項(xiàng)后,客戶端將進(jìn)行以下行為以副本集模式連接,并根據(jù)給定的服務(wù)器發(fā)現(xiàn)副本集的所有成員。該選項(xiàng)可以和配合使用。編解碼器用于對(duì)進(jìn)行編碼和解碼。
原文保持更新及BUG修正:http://kweny.io/mongodb-clien...
基于 MongoDB Java Driver 3.8.1 的客戶端配置選項(xiàng),其它驅(qū)動(dòng)大同小異。
descriptionjava.lang.String
客戶端的描述。該描述用于日志記錄和 JMX 等位置。
默認(rèn)為 null。
applicationNamejava.lang.String
Server Version: 3.4
應(yīng)用程序的邏輯名稱??蛻舳丝梢該?jù)此標(biāo)識(shí)應(yīng)用程序服務(wù)器,用于服務(wù)器日志、慢查詢?nèi)罩炯案乓占?/p>
默認(rèn)為 null。
minConnectionsPerHostint
每個(gè)主機(jī)的最小連接數(shù),這些連接在空閑時(shí)將保持在連接池中。
默認(rèn)為 0,不能小于 0。
maxConnectionsPerHostint
每個(gè)主機(jī)允許的最大連接數(shù),這些連接在空閑時(shí)將保持在連接池中。當(dāng)連接池耗盡后,任何需要連接的操作都將被阻塞并等待可用連接。
默認(rèn)為 100,不能小于 1。
threadsAllowedToBlockForConnectionMultiplierint
允許阻塞的連接線程數(shù)乘數(shù)。該值和 maxConnectionsPerHost 相乘的結(jié)果就是連接等待隊(duì)列的最大值,超出的線程將立即拋出異常。
如該值為 5,maxConnectionsPerHost 為 10,則最多可以同時(shí)有 50 個(gè)線程等待連接。
默認(rèn)為 5,不能小于 1。
maxWaitTimeint
線程從連接池中獲取可用連接的最長等待時(shí)間(毫秒)。
默認(rèn)為 120,000(120秒),0 表示不等待,負(fù)值意味著無限期等待。
maxConnectionIdleTimeint
連接池中連接的最大空閑時(shí)間(毫秒)。超出空閑時(shí)間的連接將被關(guān)閉,并在必要時(shí)由新建連接替換。
默認(rèn)為 0,表示無限制,不能小于 0。
maxConnectionLifeTimeint
連接池中連接的最大使用壽命(毫秒)。超出使用壽命的連接將被關(guān)閉,并在必要時(shí)由新建連接替換。
默認(rèn)為 0,表示無限制,不能小于 0。
connectTimeoutint
連接超時(shí)時(shí)間(毫秒),僅在新建連接時(shí)使用。
默認(rèn)為 10,000(10秒),0 表示無限制,不能小于 0。
socketTimeoutint
socket 超時(shí)時(shí)間(毫秒),用于 I/O 讀寫操作。
默認(rèn)為 0,表示無限制。
boolean
是否啟用 socket 的 keep-alive 功能。
該選項(xiàng)從 MongoDB Java Driver 3.5.0 版開始已經(jīng)廢棄,現(xiàn)在默認(rèn)值為 true,不建議禁用。
heartbeatFrequencyint
心跳檢測頻率(毫秒)。該選項(xiàng)用于設(shè)定驅(qū)動(dòng)程序每次嘗試確定每個(gè)服務(wù)器當(dāng)前狀態(tài)的間隔時(shí)間。
默認(rèn)為 10,000(10秒)。
minHeartbeatFrequencyint
心跳檢測的最小頻率(毫秒)。如果驅(qū)動(dòng)程序需要經(jīng)常檢查服務(wù)器的可用性,那么距離上次檢測至少等待這么長時(shí)間,以避免資源浪費(fèi)。
默認(rèn)為 500。
heartbeatConnectTimeoutint
用于心跳檢測的連接超時(shí)時(shí)間(毫秒)。
默認(rèn)為 20,000(20秒)。
heartbeatSocketTimeoutint
用于心跳檢測的 socket 超時(shí)時(shí)間(毫秒)。
默認(rèn)為 20,000(20秒)。
retryWritesboolean
Server Version: 3.6
設(shè)定當(dāng)由于網(wǎng)絡(luò)錯(cuò)誤而寫入失敗時(shí),是否進(jìn)行重試。
sslEnabledboolean
是否啟用 SSL。
在未設(shè)置 socket factory 的情況下,設(shè)置該選項(xiàng)時(shí)將同時(shí)設(shè)置默認(rèn)的 socket factory,true 時(shí)為 java.net.ssl.SSLSocketFactory.getDefault(),false 時(shí)為 javax.net.SocketFactory.getDefault()。
開啟該選項(xiàng)時(shí),如果設(shè)置其它 socket factory,則該 factory 必須創(chuàng)建 java.net.ssl.SSLSocket 的實(shí)例,否則將拒絕連接。
默認(rèn)為 false,不啟用。
sslInvalidHostNameAllowedboolean
啟用 SSL 時(shí)是否允許無效的主機(jī)名(證書域名檢查)。true 為允許,即關(guān)閉域名檢查。
設(shè)為 true(允許無效主機(jī)名)將使應(yīng)用程序容易受到中間人攻擊。
注意,證書域名檢查需要 Java 7 及以上版本,如果應(yīng)用程序使用了 SSL 運(yùn)行在 Java 6 上,則必須將該選項(xiàng)設(shè)為 true(關(guān)閉域名檢查)。
默認(rèn)為 false,即開啟域名檢查,不允許無效的主機(jī)名。
socketFactoryjavax.net.SocketFactory
用于建立 socket 的工廠。
默認(rèn)為 javax.net.SocketFactory.getDefault()。
sslContextjavax.net.ssl.SSLContext
啟用 SSL 時(shí)使用的 SSLContext,當(dāng) sslEnabled 為 false 或指定了 socket factory 時(shí),將忽略此選項(xiàng)。
requiredReplicaSetNamejava.lang.String
指定必須的副本集名稱。確保連接的所有節(jié)點(diǎn)都屬于一個(gè)指定的副本集。
設(shè)置該選項(xiàng)后,客戶端將進(jìn)行以下行為——
以副本集模式連接,并根據(jù)給定的服務(wù)器發(fā)現(xiàn)副本集的所有成員。
確保所有成員報(bào)告的副本集名稱與指定名稱匹配。
如果服務(wù)器列表中的任何成員不屬于該副本集,則拒絕所有請(qǐng)求。
默認(rèn)為 null。
localThresholdint
用于服務(wù)器選擇的一個(gè)參考閾值,單位為毫秒。如果對(duì)于某個(gè)操作存在多個(gè)合適的服務(wù)器,則以該選項(xiàng)的值來確定一個(gè)基于延遲時(shí)間(RTT)的延遲窗口范圍(Latency Window)。以延遲最小的服務(wù)器為基準(zhǔn)(最小延遲時(shí)間),所有延遲時(shí)間和最小延遲時(shí)間的差值小于該值的服務(wù)器,都有資格被隨機(jī)選中。
如果該參數(shù)設(shè)為 0,則不使用隨機(jī)算法,而是選擇延遲時(shí)間最小的服務(wù)器。
默認(rèn)為 15 毫秒,意味著所有有資格被選中的服務(wù)器之間的延遲時(shí)間只有 15 毫秒以內(nèi)的差異。
serverSelectorcom.mongodb.selector.ServerSelector
服務(wù)器選擇器。用于增強(qiáng)標(biāo)準(zhǔn)的服務(wù)器選擇規(guī)則。
在執(zhí)行該選擇器篩選出符合要求的服務(wù)器列表后,驅(qū)動(dòng)程序?qū)⒗^續(xù)執(zhí)行以下兩個(gè)選擇操作——
根據(jù) localThreshold 選出延遲窗口范圍內(nèi)的服務(wù)器;
繼續(xù)從延遲窗口范圍內(nèi)的服務(wù)器隨機(jī)選擇一個(gè)服務(wù)器。
要跳過基于延遲窗口的選擇,可以使用以下方法——
將 localThreshold 設(shè)置為足夠高的值,以便不排除任何服務(wù)器。
使該選擇器返回的列表只包含單個(gè)服務(wù)器,這將使后續(xù)的選擇操作沒有其它服務(wù)器可選。
serverSelectionTimeoutint
服務(wù)器選擇的超時(shí)時(shí)間(毫秒),指定驅(qū)動(dòng)程序從集群中選擇服務(wù)器時(shí),無法成功而放棄并拋出異常的時(shí)間??梢愿鶕?jù)需要(如耐心等待或快速返回錯(cuò)誤)來設(shè)置該參數(shù)的值。
默認(rèn)為 30,000(30秒),這個(gè)時(shí)間對(duì)于在經(jīng)典的故障恢復(fù)階段中選舉出新的主節(jié)點(diǎn)來說已經(jīng)足夠。0 表示無可用服務(wù)器,將立即超時(shí);負(fù)值意味著無限期等待。
alwaysUseMBeansboolean
設(shè)置驅(qū)動(dòng)程序注冊的 JMX Beans 是否始終為 MBeans,無論 VM 是不是 Java 6 及更高版本。
當(dāng)該選項(xiàng)為 false 時(shí),驅(qū)動(dòng)程序?qū)⒃?Java 6 或更高版本時(shí)使用 MXBeans;Java 5 中使用 MBeans。
默認(rèn)為 false。
compressorListjava.util.List
Server Version: 3.4
用于向 MongoDB 服務(wù)器收發(fā)消息的壓縮器列表。驅(qū)動(dòng)程序?qū)⑹褂梅?wù)器配置支持的列表中的第一個(gè)壓縮器。
默認(rèn)為空列表。
writeConcerncom.mongodb.WriteConcern
寫入策略,用于控制寫入安全的級(jí)別,以保障寫操作的可靠性??蛇x配置如下——
w - 該選項(xiàng)要求寫入確認(rèn)操作已經(jīng)傳遞到指定數(shù)量的節(jié)點(diǎn)或指定標(biāo)簽的節(jié)點(diǎn)。有以下可選值——
w:0 (Unacknowledged) - 寫入操作調(diào)用后立刻返回,無法知道寫入是否成功。性能最好,但可靠性最差,不推薦使用。此外還有一個(gè) w:-1 (error ignored) 級(jí)別,基本和 w:0 差不多,不同的是 w:0 對(duì)于網(wǎng)絡(luò)錯(cuò)誤會(huì)返回異常,而 w:-1 不會(huì)捕獲任何異常。
w:1 (Acknowledged) - 等待實(shí)際寫入操作完成后才返回響應(yīng),如果寫入發(fā)生錯(cuò)誤,可以捕獲到并進(jìn)行處理。該級(jí)別具備基本的可靠性,是目前的默認(rèn)設(shè)置。
w:2 (Replica Acknowledged) - 當(dāng) secondary 節(jié)點(diǎn)從 primary 節(jié)點(diǎn)完成了復(fù)制之后返回響應(yīng)。其中的數(shù)字 2 表示完成復(fù)制操作的節(jié)點(diǎn)數(shù)目,可以是其它 >=2 的數(shù)字,如 w:3 表示至少要有 3 個(gè)節(jié)點(diǎn)有數(shù)據(jù)。
w:majority - 和 w:2 一樣,secondary 節(jié)點(diǎn)從 primary 節(jié)點(diǎn)完成數(shù)據(jù)復(fù)制后返回響應(yīng)。不同的是這里并不指定具體的節(jié)點(diǎn)數(shù)量,而是使用 majority 表示“大多數(shù)”,即超過一半(>1/2)的節(jié)點(diǎn)數(shù)。
tag set - 指定副本集成員的標(biāo)簽,要求寫入確認(rèn)已經(jīng)傳遞到指定 tag 標(biāo)記的副本集成員后返回響應(yīng)。
wtimeout - 寫入超時(shí)時(shí)間(毫秒)。用于設(shè)定一個(gè)時(shí)間限制,當(dāng)寫入過程持續(xù)超過該時(shí)間后則認(rèn)為寫入失敗。該選項(xiàng)僅適用于集群環(huán)境,當(dāng)指定 w 值大于 1 時(shí)生效。數(shù)據(jù)需要寫入指定數(shù)量的節(jié)點(diǎn)才算成功,但如果有節(jié)點(diǎn)發(fā)生故障,可能導(dǎo)致這個(gè)數(shù)量無法達(dá)到,從而無法進(jìn)行響應(yīng),通過設(shè)定這個(gè)超時(shí)時(shí)間,可以防止寫入操作被無限制阻塞。該參數(shù)可以設(shè)置為 0,表示無限期。
journal - 寫入操作記錄到 Journal Log 持久化之后才向客戶端返回響應(yīng)。該選項(xiàng)要求服務(wù)端開啟 journaling 功能,不能與 fsync 結(jié)合使用。要記錄到 Journal Log 必須等到下一次提交,可以通過增加 Journal Log 的提交頻率來降低延遲。
默認(rèn)為 w:1(com.mongodb.WriteConcern.ACKNOWLEDGED)。
readConcerncom.mongodb.ReadConcern
Server Version: 3.2
讀取策略(隔離級(jí)別),決定集群環(huán)境中如何返回?cái)?shù)據(jù)——
local - 直接從本地讀取,不考慮數(shù)據(jù)是否已經(jīng)在集群的其它節(jié)點(diǎn)同步,默認(rèn)值。
majority - 只讀取成功寫入大多數(shù)節(jié)點(diǎn)的數(shù)據(jù)。
linearizable - Server Version: 3.4 版本引入。和 majority 類似,但修復(fù)了 majority 的一些 bug,但比 majority 在性能上的損耗更大。linearizable 對(duì)于同一文檔的并發(fā)讀、寫操作時(shí)線性的。
snapshot - Server Version: 4.0 版本引入。MongoDB 從 4.0 開始支持副本集多文檔事務(wù),同時(shí)提供了 snapshot 隔離級(jí)別,在事務(wù)開始時(shí)創(chuàng)建一個(gè) WiredTiger snapshot(快照),保存當(dāng)時(shí)整個(gè)引擎所有事務(wù)的狀態(tài),確定哪些事務(wù)對(duì)當(dāng)前可見,哪些不可見,然后在整個(gè)事務(wù)過程中使用這個(gè)快照提供事務(wù)讀。
該選項(xiàng)可用于解決“臟讀”的問題,如從 primary 節(jié)點(diǎn)上讀取了某條數(shù)據(jù),但這條數(shù)據(jù)并沒有同步到大多數(shù)節(jié)點(diǎn),然后 primary 節(jié)點(diǎn)故障,重新恢復(fù)后 primary 節(jié)點(diǎn)會(huì)將未同步到大多數(shù)節(jié)點(diǎn)的數(shù)據(jù)回滾掉,導(dǎo)致之前讀取的數(shù)據(jù)成了“臟數(shù)據(jù)”。
而將 readConcern 的級(jí)別設(shè)置為 majority,則可以保證讀取到的數(shù)據(jù)已經(jīng)寫入大多數(shù)節(jié)點(diǎn),這些數(shù)據(jù)不會(huì)發(fā)生回滾,也就避免了“臟讀”的問題。需要注意的是,該級(jí)別能保證讀取到的數(shù)據(jù)不會(huì)發(fā)生回滾,但并不能保證讀到的數(shù)據(jù)是最新的。
該選項(xiàng)可以和 readPreference 配合使用。
readPreferencecom.mongodb.ReadPreference
用于查詢、Map-Reduce、聚合、計(jì)數(shù)的讀取首選項(xiàng)。
MongoDB 有 5 種 ReadPreference 模式——
primary - 主節(jié)點(diǎn),默認(rèn)模式,只從 primary 節(jié)點(diǎn)讀取,如果 primary 節(jié)點(diǎn)不可用,則報(bào)錯(cuò)或拋出異常。
primaryPreferred - 首選主節(jié)點(diǎn),優(yōu)先從 primary 節(jié)點(diǎn)讀取,如果 primary 節(jié)點(diǎn)不可用(如故障轉(zhuǎn)移),則從 secondary 節(jié)點(diǎn)讀取。
secondary - 從節(jié)點(diǎn),只從 secondary 節(jié)點(diǎn)讀取,如果 secondary 節(jié)點(diǎn)不可用,則報(bào)錯(cuò)或拋出異常。
secondaryPreferred - 優(yōu)先從 secondary 節(jié)點(diǎn)讀取,如果沒有可用的 secondary 節(jié)點(diǎn),則從 primary 節(jié)點(diǎn)讀取。
nearest - 最近節(jié)點(diǎn),根據(jù)網(wǎng)絡(luò)距離從最近的節(jié)點(diǎn)讀取,可能是 primary 節(jié)點(diǎn)或 secondary 節(jié)點(diǎn)。
默認(rèn)為 primary(com.mongodb.ReadPreference.primary())。
cursorFinalizerEnabledboolean
是否啟用游標(biāo)的 finalize 方法,用于清理客戶端未關(guān)閉的 DBCursor 實(shí)例。
如果能夠確保每次都會(huì)調(diào)用 DBCursor 的 close 方法,則可以關(guān)閉該選項(xiàng)(設(shè)為 false)。
默認(rèn)為 true。
codecRegistryorg.bson.codecs.configuration.CodecRegistry
編解碼器注冊表。編解碼器用于對(duì) Document 進(jìn)行編碼和解碼。
dbEncoderFactorycom.mongodb.DBEncoderFactory
編碼器工廠。
默認(rèn)使用驅(qū)動(dòng)程序的標(biāo)準(zhǔn)配置。
dbDecoderFactorycom.mongodb.DBDecoderFactory
解碼器工廠。
默認(rèn)使用驅(qū)動(dòng)程序的標(biāo)準(zhǔn)配置。
commandListenersjava.util.List
命令事件監(jiān)聽器集合。
默認(rèn)為空列表。
clusterListenersjava.util.List
與集群相關(guān)的事件監(jiān)聽器集合。
默認(rèn)為空列表。
connectionPoolListenersjava.util.List
與連接池相關(guān)的事件監(jiān)聽器集合。
默認(rèn)為空列表。
serverListenersjava.util.List
與服務(wù)器相關(guān)的事件監(jiān)聽器集合。
默認(rèn)為空列表。
serverMonitorListenersjava.util.List
與服務(wù)器監(jiān)控相關(guān)的事件監(jiān)聽器集合。
默認(rèn)為空列表。
本文版權(quán)屬于 K棧。歡迎注明出處轉(zhuǎn)載本文。本文鏈接:http://kweny.io/mongodb-clien...
如果您喜歡我的文章,可以在以下平臺(tái)關(guān)注我——
個(gè)人主頁:http://kweny.io
GitHub:https://github.com/kweny
簡書:https://www.jianshu.com/u/b9a...
知乎:https://zhihu.com/people/kweny
思否:https://segmentfault.com/u/kweny
微博:https://weibo.com/kweny
公眾號(hào):K棧IO(KwenyIO)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/19388.html
摘要:然而,只提供了最簡單的客戶端選項(xiàng),且不支持多數(shù)據(jù)源配置。由此而生,除了支持完整的客戶端選項(xiàng)及多數(shù)據(jù)源配置之外,還提供了一些其它的實(shí)用功能。配置示例多數(shù)據(jù)源進(jìn)行多數(shù)據(jù)源配置時(shí),需要明確指定各數(shù)據(jù)源的名稱。 最近在制作一個(gè) spring boot 小應(yīng)用時(shí)使用了 MongoDB,鑒于官方庫的簡陋配置,決定自己造個(gè)輪子,源碼發(fā)布在 GitHub Carefree MongoDB,jar 已在...
摘要:背景在視頻學(xué)習(xí)開發(fā)中使用到了這個(gè)數(shù)據(jù)庫,視頻中安裝在本地也能通過命令訪問到本地?cái)?shù)據(jù)庫。在練習(xí)中將安裝到了云服務(wù)器上,通過外網(wǎng)來訪問這個(gè)的時(shí)候卻超時(shí)了。使用對(duì)性能沒有影響并且可以防范類似于的攻擊。參見配置以獲得更多信息。 背景:在視頻學(xué)習(xí)vue開發(fā)中使用到了mongodb這個(gè)數(shù)據(jù)庫,視頻中安裝在本地也能通過mongo命令訪問到本地?cái)?shù)據(jù)庫。在練習(xí)中將mongodb安裝到了云服務(wù)器上,通過外...
摘要:簡介在我的前一篇小文中小書提到了可以更換會(huì)話儲(chǔ)存那么這篇文章我們就來講講在進(jìn)行會(huì)話管理的時(shí)候如何將會(huì)話數(shù)據(jù)保存在外部數(shù)據(jù)庫中本文中我們使用用作會(huì)話儲(chǔ)存數(shù)據(jù)庫本文中使用的模塊以及版本號(hào)一覽模塊名稱版本號(hào)特性支持支持所有版本的支持支持 簡介 在我的前一篇小文中express-session小書提到了express-session可以更換會(huì)話儲(chǔ)存. 那么這篇文章我們就來講講express在進(jìn)...
摘要:簡介在我的前一篇小文中小書提到了可以更換會(huì)話儲(chǔ)存那么這篇文章我們就來講講在進(jìn)行會(huì)話管理的時(shí)候如何將會(huì)話數(shù)據(jù)保存在外部數(shù)據(jù)庫中本文中我們使用用作會(huì)話儲(chǔ)存數(shù)據(jù)庫本文中使用的模塊以及版本號(hào)一覽模塊名稱版本號(hào)特性支持支持所有版本的支持支持 簡介 在我的前一篇小文中express-session小書提到了express-session可以更換會(huì)話儲(chǔ)存. 那么這篇文章我們就來講講express在進(jìn)...
摘要:添加完后,重啟數(shù)據(jù)庫服務(wù),帶參數(shù)啟動(dòng)這樣就會(huì)開啟安全檢查。要給具體的數(shù)據(jù)庫設(shè)置專用的管理員,先用命令切換到對(duì)應(yīng)的數(shù)據(jù)庫,在調(diào)用函數(shù)來添加賬戶就行。登錄客戶端之后,切換到數(shù)據(jù)庫,再調(diào)用函數(shù)來關(guān)閉服務(wù)。 下面操作都是centos Linux系統(tǒng)下完成。1.啟動(dòng):使用MongoDB bin目錄下的mongod命令來啟動(dòng)mongodb服務(wù)器:mongod --dbpath=/home/mong...
閱讀 6013·2021-11-24 10:25
閱讀 2913·2021-11-16 11:44
閱讀 3962·2021-10-11 11:09
閱讀 3232·2021-09-02 15:41
閱讀 3314·2019-08-30 14:14
閱讀 2378·2019-08-29 14:10
閱讀 2411·2019-08-29 11:03
閱讀 1194·2019-08-26 13:47