標籤:ruby tutorials mongodb client 資料庫連接
在Ruby的MongoDB2.4.3驅動版本中,通過建立一個Mongo::Client對象來構建一個Ruby的資料庫連接。Mongo::Client構造器提供兩種構造方式:一是通過提供主機列表和一些選擇性參數,另外還有通過一個串連URI。建立好的資料庫連接預設串連到admin資料庫。
1.使用Mongo::Client建立資料庫用戶端串連
1.1. 單伺服器模式建立資料庫連接
在單伺服器模式下建立資料庫連接,只需提供一個主機串連參數。另外,還可以通過消除自動探索步驟強制將叢集拓撲轉換為單機模式。可以通過下述三種方式建立單伺服器模式下的資料庫連接
Mongo::Client.new([‘127.0.0.1:27017‘],:database=>‘mydb‘)
Mongo::Client.new([‘127.0.0.1:27017‘],:database=>‘mydb‘,:connect=>:direct)
Mongo::Client.new(‘mongodb://127.0.0.1:27017/mydb‘)
1.2. 複本集模式建立資料庫連接
通過傳遞一個或多個主機地址參數和複本集名字,可以建立一個到複本集的資料庫連接。即使在建立時沒有完全提供複本集的所有資訊,MongoDB的磁碟機的自動探索模式可以找到複本集中的所有成員。棄置站台集中的資料庫連接可以通過下面的形式建立:
Mongo::Client.new([‘127.0.0.1:27017‘,‘127.0.0.1:27018‘],:database=>‘mydb‘,:replica_set=>‘myapp‘)
Mongo::Client.new(‘mongdb://127.0.0.1:27017,127.0.0.1:27018/mydb?replicaSet=myapp‘)
1.3. 共用叢集模式建立資料庫連接
通過傳遞一個或多的Mongos 主機,來建立一個共用叢集模式。自動探索模式可以限定伺服器是mongos執行個體,但如果你關閉了自動探索模式,就要將shared參數傳遞到串連中來實現叢集模式資料庫連接的建立。通過以下三種例子可以建立資料庫連接:
Mongo::Client.new([‘127.0.0.1:27017‘],:database=>‘mydb‘)
Mongo::Client.new([‘127.0.0.1:27017‘],:database=>‘mydb‘,:connect=>:shared)
Mongo::Client.new(‘mongodb://127.0.0.1:27017/mydb?connect=shared‘)
2. 資料庫用戶端串連參數選項
在使用Mongo::Client時,可以通過多個不同的選擇性參數來配置驅動的行為,可以通過在構造器中配置這些參數或者將它們通過URI提供給Mongo::Client.
鑒於URI的參數設定方式需要使用駝峰格式,這不是Ruby的標準格式。下面的表格中列出了URI格式的參數配置選項,以及相對應的使用Ruby構造器的參數選項。使用上述兩種參數設定方式時需要注意URI參數設定中的選項時間單位是毫秒,而在Ruby構造器中對應的是float類型的秒。
3. URI參數及對應Ruby參數
| URI選項 |
Ruby選項 |
| replicaSet=String |
:replica_set=>String |
| connect=String |
:connect=>Symbol |
| ssl=Boolean |
:ssl=>true|false |
| connectTimeoutMS=Integer |
:connect_timeout=>Float |
| socketTimeoutMS=Integer |
:socket_timeout=>Float |
| serverSelectionTimeoutMS=Integer |
:server_selection_timeout=>Float |
| localThresholdMS=Integer |
:local_threshold=>Float |
| maxPoolSize=Integer |
:max_pool_size=>Integer |
| minPoolSize=Integer |
:min_pool_size=>Integer |
| waitQueueTimeoutMS=Integer |
:wait_queue_timeout=>Float |
| w=Integer|String |
{ :write=>{:w=>Integer|String}} |
| wtimeoutMS=Integer |
{ :write=>{:wtimeout=>Float}} |
| journal=Boolean |
{ :write=>{:j=>true|false}} |
| fsync=Boolean |
{ :write =>{:fsync=>true|false}} |
| readPreference=String |
{ :read=>{:mode=>Symbol}} |
| readPreferenceTags=String |
{ :read=>{:tag_sets=>Array<String> }} |
| authSource=String |
:auth_source=>String |
| authMechanism=String |
:auth_meth=>Symbol |
| authMechanismProperties=Strings |
{ :auth_mech_properties=>{:service_realm=>String,:canonicalize_host_name=>true|false,:service_name=>String}} |
4. 下面會詳細講解Ruby中每個選項的作用,預設值和類型
| 參數 |
參數描述 |
參數類型 |
預設值 |
| :replica_set |
當使用複本集模式時,該參數用於設定複本集的名字,且可以在啟用自動探索模式時通過名字過濾伺服器 |
String |
none |
| :ssl |
通知用戶端通過SSL串連到伺服器 |
Boolean |
false |
| :ssl_cert |
用於設定認證檔案路徑,該認證用於識別評鑑到MongoDB串連是否有效。如果設定了該選項,將會比:ssl_cret_string的值和:ssl_sret_object的值具有更高的使用優先順序 |
String |
none |
| :ssl_cert_string |
該string欄位包含了使用PEM編碼的用於鑒別串連有效性的認證資訊。如果設定了該參數,它比:ssl_cret_object的值具有更高的使用優先順序 |
String |
none |
| :ssl_cert_object |
使用OpenSSL::X509::Certificate認證鑒別到MongoDB的串連 |
OpenSSL::X509::Certificate |
none |
| :ssl_key |
鑒別串連有效性的私密金鑰檔案。雖然秘鑰檔案與憑證存放區在同一個檔案,但是兩個需要被精確匹配。如果設定了該參數,它比:ssl_key_string和:ssl_key_object具有更高的使用優先順序 |
String |
none |
| :ssl_key_string |
包含用於鑒別串連有效性的使用PEM編碼的私密金鑰字串資訊。如果設定了這個參數,它比:ssl_key_object具有更高的使用優先順序 |
String |
none |
| :ssl_key_object |
鑒別串連有效性的私密金鑰對象 |
OpenSSL::PKey |
none |
| :ssl_key_pass_phrase |
私密金鑰的密碼資訊 |
String |
none |
| :ssl_ca_cert |
一組把授權認證串連起來的認證資訊的儲存路徑,這些授權認證用於從串連的另一端驗證認證會否通過。參數:ssl_verfiy的使用需要設定:ssl_ca_cret,:ssl_ca_cret_string,:ssl_ca_cret_object三個參數中的一個。 |
String |
none |
| :ssl_ca_cert_string |
包含一組把授權認證串連起來的認證資訊的字串,這些授權認證用於從串連的另一端驗證認證會否通過。參數:ssl_verfiy的使用需要設定:ssl_ca_cret,:ssl_ca_cret_string,:ssl_ca_cret_object三個參數中的一個。 |
String |
none |
| :ssl_ca_cert_object |
代表了把授權認證串連起來的認證資訊的OpenSSL::X509::Certificate數組,這些授權認證用於從串連的另一端驗證認證會否通過。參數:ssl_verfiy的使用需要設定:ssl_ca_cret,:ssl_ca_cret_string,:ssl_ca_cret_object三個參數中的一個。 |
Array<OpenSSL::X509::Certificate> |
none |
| :ssl_verify |
用於設定是否進行對等認證驗證 |
Boolean |
false |
| :connect_timeout |
建立一個socket串連,拋出異常之前的等待時間(秒) |
Float |
10秒 |
| :socket_timeout |
在一個socket執行操作拋出異常之前的等待時間(秒) |
Float |
5秒 |
| :max_pool_size |
單個伺服器的串連池的最大串連數 |
Integer |
5 |
| :min_pool_size |
單個伺服器的串連池的最小串連數 |
Integer |
1 |
| :wait_queue_timeout |
等待串連池中串連變為有效狀態的等待時間 |
Float |
1 |
| :write |
具體設定與寫相關的Hash類型的參數。其值可以為:w,:wtimeout,:j,:fsync 如{ :write =>{ :w=>2}} |
Hash |
{:w=>1} |
| :read |
Hash類型的參數,用於具體設定首選讀模式以及對於選定伺服器的標籤集合。其值可以設定為:mode和:tag_sets。例如{ :read=>{ :mode=>secondary,:tag_sets=>["berlin"]}} |
Hash |
{:mode =>:primary} |
| :auth_source |
具體設定了授權源資訊 |
String |
2.6及其之後版本,如果提供了授權認證,則預設為admin;否則的話就是當前的資料庫 |
| :auth_mech |
具體設定使用的授權機制。可以是下述值的其中之一::mongodb_cr,:mongodb_x509,:plain,:scram |
Symbol |
MongoDB3.0後的版本,如果使用者提供了資格認證但是又沒有設定:auth_mech屬性,則預設為:scram。2.6版本之前,預設為:mongodb_cr |
| :auth_mech_properties |
提供了額外的授權機制屬性 |
Hash |
none |
| :user |
認證使用的使用者名稱稱
|
String |
none |
| :password |
認證使用的使用者密碼 |
String |
none |
| :connect |
覆蓋驅動的自動探索特性,並且強制將叢集拓撲結構轉變為一個特定的類型。包括::direct,:replica_set或者:shared |
Symbol |
none |
| :heartbeat_frequency |
多個監視器非同步重新整理伺服器狀態的時間(秒) |
Float |
30 |
| :database |
需要串連的資料庫名字 |
String |
admin |
| :server_selection_timeout |
選定一個合適的伺服器去執行某些操作,在拋出異常之前的等待時間 |
Float |
30 |
| :local_threshold |
設定了最近的伺服器和可以被選中的伺服器之間切換的最大延遲時間 |
Float |
0.015 |
5. 逾時相關參數的設定細節
本文出自 “techFuture” 部落格,謝絕轉載!
Ruby操作MongoDB(進階)-建立資料庫用戶端串連