MongoDB 客戶端鏈接選項

原文保持更新及BUG修正:http://kweny.io/mongodb-clien...java


基於 MongoDB Java Driver 3.8.1 的客戶端配置選項,其它驅動大同小異。git

description

java.lang.Stringgithub

客戶端的描述。該描述用於日誌記錄和 JMX 等位置。算法

默認爲 null。mongodb

applicationName

java.lang.String
Server Version: 3.4segmentfault

應用程序的邏輯名稱。客戶端能夠據此標識應用程序服務器,用於服務器日誌、慢查詢日誌及概要收集。安全

默認爲 null。服務器

minConnectionsPerHost

int網絡

每一個主機的最小鏈接數,這些鏈接在空閒時將保持在鏈接池中。併發

默認爲 0,不能小於 0。

maxConnectionsPerHost

int

每一個主機容許的最大鏈接數,這些鏈接在空閒時將保持在鏈接池中。當鏈接池耗盡後,任何須要鏈接的操做都將被阻塞並等待可用鏈接。

默認爲 100,不能小於 1。

threadsAllowedToBlockForConnectionMultiplier

int

容許阻塞的鏈接線程數乘數。該值和 maxConnectionsPerHost 相乘的結果就是鏈接等待隊列的最大值,超出的線程將當即拋出異常。

如該值爲 5,maxConnectionsPerHost 爲 10,則最多能夠同時有 50 個線程等待鏈接。

默認爲 5,不能小於 1。

maxWaitTime

int

線程從鏈接池中獲取可用鏈接的最長等待時間(毫秒)。

默認爲 120,000(120秒),0 表示不等待,負值意味着無限期等待。

maxConnectionIdleTime

int

鏈接池中鏈接的最大空閒時間(毫秒)。超出空閒時間的鏈接將被關閉,並在必要時由新建鏈接替換。

默認爲 0,表示無限制,不能小於 0。

maxConnectionLifeTime

int

鏈接池中鏈接的最大使用壽命(毫秒)。超出使用壽命的鏈接將被關閉,並在必要時由新建鏈接替換。

默認爲 0,表示無限制,不能小於 0。

connectTimeout

int

鏈接超時時間(毫秒),僅在新建鏈接時使用。

默認爲 10,000(10秒),0 表示無限制,不能小於 0。

socketTimeout

int

socket 超時時間(毫秒),用於 I/O 讀寫操做。

默認爲 0,表示無限制。

socketKeepAlive

boolean

是否啓用 socket 的 keep-alive 功能。

該選項從 MongoDB Java Driver 3.5.0 版開始已經廢棄,如今默認值爲 true,不建議禁用。

heartbeatFrequency

int

心跳檢測頻率(毫秒)。該選項用於設定驅動程序每次嘗試肯定每一個服務器當前狀態的間隔時間。

默認爲 10,000(10秒)。

minHeartbeatFrequency

int

心跳檢測的最小頻率(毫秒)。若是驅動程序須要常常檢查服務器的可用性,那麼距離上次檢測至少等待這麼長時間,以免資源浪費。

默認爲 500。

heartbeatConnectTimeout

int

用於心跳檢測的鏈接超時時間(毫秒)。

默認爲 20,000(20秒)。

heartbeatSocketTimeout

int

用於心跳檢測的 socket 超時時間(毫秒)。

默認爲 20,000(20秒)。

retryWrites

boolean
Server Version: 3.6

設定當因爲網絡錯誤而寫入失敗時,是否進行重試。

sslEnabled

boolean

是否啓用 SSL。

在未設置 socket factory 的狀況下,設置該選項時將同時設置默認的 socket factory,true 時爲 java.net.ssl.SSLSocketFactory.getDefault(),false 時爲 javax.net.SocketFactory.getDefault()

開啓該選項時,若是設置其它 socket factory,則該 factory 必須建立 java.net.ssl.SSLSocket 的實例,不然將拒絕鏈接。

默認爲 false,不啓用。

sslInvalidHostNameAllowed

boolean

啓用 SSL 時是否容許無效的主機名(證書域名檢查)。true 爲容許,即關閉域名檢查。

設爲 true(容許無效主機名)將使應用程序容易受到中間人攻擊。

注意,證書域名檢查須要 Java 7 及以上版本,若是應用程序使用了 SSL 運行在 Java 6 上,則必須將該選項設爲 true(關閉域名檢查)。

默認爲 false,即開啓域名檢查,不容許無效的主機名。

socketFactory

javax.net.SocketFactory

用於創建 socket 的工廠。

默認爲 javax.net.SocketFactory.getDefault()

sslContext

javax.net.ssl.SSLContext

啓用 SSL 時使用的 SSLContext,當 sslEnabled 爲 false 或指定了 socket factory 時,將忽略此選項。

requiredReplicaSetName

java.lang.String

指定必須的副本集名稱。確保鏈接的全部節點都屬於一個指定的副本集。

設置該選項後,客戶端將進行如下行爲——

  • 以副本集模式鏈接,並根據給定的服務器發現副本集的全部成員。
  • 確保全部成員報告的副本集名稱與指定名稱匹配。
  • 若是服務器列表中的任何成員不屬於該副本集,則拒絕全部請求。

默認爲 null。

localThreshold

int

用於服務器選擇的一個參考閾值,單位爲毫秒。若是對於某個操做存在多個合適的服務器,則以該選項的值來肯定一個基於延遲時間(RTT)的延遲窗口範圍(Latency Window)。以延遲最小的服務器爲基準(最小延遲時間),全部延遲時間和最小延遲時間的差值小於該值的服務器,都有資格被隨機選中。

若是該參數設爲 0,則不使用隨機算法,而是選擇延遲時間最小的服務器。

默認爲 15 毫秒,意味着全部有資格被選中的服務器之間的延遲時間只有 15 毫秒之內的差別。

serverSelector

com.mongodb.selector.ServerSelector

服務器選擇器。用於加強標準的服務器選擇規則。

在執行該選擇器篩選出符合要求的服務器列表後,驅動程序將繼續執行如下兩個選擇操做——

  1. 根據 localThreshold 選出延遲窗口範圍內的服務器;
  2. 繼續從延遲窗口範圍內的服務器隨機選擇一個服務器。

要跳過基於延遲窗口的選擇,可使用如下方法——

  • localThreshold 設置爲足夠高的值,以便不排除任何服務器。
  • 使該選擇器返回的列表只包含單個服務器,這將使後續的選擇操做沒有其它服務器可選。

serverSelectionTimeout

int

服務器選擇的超時時間(毫秒),指定驅動程序從集羣中選擇服務器時,沒法成功而放棄並拋出異常的時間。能夠根據須要(如耐心等待或快速返回錯誤)來設置該參數的值。

默認爲 30,000(30秒),這個時間對於在經典的故障恢復階段中選舉出新的主節點來講已經足夠。0 表示無可用服務器,將當即超時;負值意味着無限期等待。

alwaysUseMBeans

boolean

設置驅動程序註冊的 JMX Beans 是否始終爲 MBeans,不管 VM 是否是 Java 6 及更高版本。

當該選項爲 false 時,驅動程序將在 Java 6 或更高版本時使用 MXBeans;Java 5 中使用 MBeans。

默認爲 false。

compressorList

java.util.List<com.mongodb.MongoCompressor>
Server Version: 3.4

用於向 MongoDB 服務器收發消息的壓縮器列表。驅動程序將使用服務器配置支持的列表中的第一個壓縮器。

默認爲空列表。

writeConcern

com.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)。

readConcern

com.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 配合使用。

readPreference

com.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())。

cursorFinalizerEnabled

boolean

是否啓用遊標的 finalize 方法,用於清理客戶端未關閉的 DBCursor 實例。

若是可以確保每次都會調用 DBCursor 的 close 方法,則能夠關閉該選項(設爲 false)。

默認爲 true。

codecRegistry

org.bson.codecs.configuration.CodecRegistry

編解碼器註冊表。編解碼器用於對 Document 進行編碼和解碼。

dbEncoderFactory

com.mongodb.DBEncoderFactory

編碼器工廠。

默認使用驅動程序的標準配置。

dbDecoderFactory

com.mongodb.DBDecoderFactory

解碼器工廠。

默認使用驅動程序的標準配置。

commandListeners

java.util.List<com.mongodb.event.CommandListener>

命令事件監聽器集合。

默認爲空列表。

clusterListeners

java.util.List<com.mongodb.event.ClusterListener>

與集羣相關的事件監聽器集合。

默認爲空列表。

connectionPoolListeners

java.util.List<com.mongodb.event.ConnectionPoolListener>

與鏈接池相關的事件監聽器集合。

默認爲空列表。

serverListeners

java.util.List<com.mongodb.event.ServerListener>

與服務器相關的事件監聽器集合。

默認爲空列表。

serverMonitorListeners

java.util.List<com.mongodb.event.ServerMonitorListener>

與服務器監控相關的事件監聽器集合。

默認爲空列表。


本文版權屬於 K棧。歡迎註明出處轉載本文。本文連接:http://kweny.io/mongodb-clien...

若是您喜歡個人文章,能夠在如下平臺關注我——

clipboard.png

相關文章
相關標籤/搜索