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