本文檔描述定義的URI格式之間,以及應用程式和MongoDB執行個體的串連,參考官方MongoDB的驅動。
原文 :http://docs.mongodb.org/manual/reference/connection-string/#connections-connection-options
標準連接字串格式
本節描述的標準格式串連MongoDBURI用於串連MongoDB資料庫伺服器。所有官方MongoDB的格式都是相同的驅動程式。對於驅動和驅動的連結文檔的列表,看到MongoDB驅動和用戶端庫(MongoDB Drivers and Client Libraries)
以下是標準的連結方式
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
參數說明:
mongodb://字串連結的標準格式
username:password@
可選的,一般預設是沒有名稱和密碼的,只有在MongoDB伺服器使用了身分識別驗證時才出現。
/database
可選的,如果連結的字串中包含了驗證身份的使用者名稱和密碼,則資料庫是必須要有的。若沒有包含資料庫名稱,預設是連結admin的資料庫
?options
連結特定選項。如果沒有指定連結特定的資料庫名稱,必須在主機名稱後面加"/",並且在optin的前面以問號形式開頭"?".
執行個體:
mongodb://db1.example.net,db2.example.net:2500/?replicaSet=test
繼續尋找發現了另一篇文章。只做重點翻譯:
內部認證
當你只需要一個使用者,它在連接字串中指定這是可能的。
var connectionString ="mongodb://user1:password1@localhost/test";var mongoClient = newMongoClient(connectionString); 注意: 如果你不指定一個資料庫連接字串,預設的資料庫是“admin”資料庫.
看到這裡心裡狂喜,終於可以進行設定檔的設定了,但是發現c#的驅動並不支援這樣的編寫,於是又是一個失落。
連結原理:
連結資料庫,官方提供了兩種安全執行緒的方式,一個是MongoClient, 另一個是MongoServer,都是安全執行緒的,自動進行鎖定的。
利用服務端類連結資料庫
// Create server settings to passconnection string, timeout, etc.
MongoServerSettingssettings =newMongoServerSettings();
settings.Server = new MongoServerAddress("localhost",27017);
// Create server object tocommunicate with our server
MongoServer server = new MongoServer(settings);
// Get our databaseinstance to reach collections and data
var database = server.GetDatabase("MessageDB");
用戶端類連結資料庫的執行個體
var client = new MongoClient("mongodb://localhost:27017");var server = client.GetServer();var database = server.GetDatabase("foo");var collection = database.GetCollection("bar");
以上的兩種連結方式我都做個測試。並且都可以用。這是一般更傾向於用戶端的連結方式。
通過尋找Api,發現用戶端的類的構造方法還有其他的
public MongoClient(); public MongoClient(MongoClientSettingssettings); public MongoClient(MongoUrl url); public MongoClient(stringconnectionString);
我們通常用的是string字串的連結,這次對MongoClientSettings進行的深度的尋找調用發MongoClientSettings 是可以進行更多的參數設定的,和Option類似,於是找到瞭解決方案,通過設定檔對MongoClientSettings進行參數設定。
預設情況下,最大連結池是100,最小是0,資料庫連結是本地的。下面我們看測試
MongoClientSettings settingsclient = newMongoClientSettings();//執行個體化用戶端設定類
紅色劃線部分是預設的參數,當我們不填寫任何參數,驅動程式是進行預設的參數設定的。
通過用戶端類的參數設定可以發現已經有所不同了。
那代碼是如何編寫的呢
#region 讀取設定檔資訊 //擷取連結池大小 int connectionPool =Convert.ToInt32(ConfigurationManager.AppSettings["connectionPool"]); int minpool =Convert.ToInt32(ConfigurationManager.AppSettings["minpool"]); string hostname =ConfigurationManager.AppSettings["hostname"]; Int32 port =Convert.ToInt32(ConfigurationManager.AppSettings["port"]); string database =ConfigurationManager.AppSettings["database"]; #endregion if (String.IsNullOrEmpty(ConnectionString)) { throw newArgumentNullException("Connection string not found."); } #region 用戶端類設定 MongoServerAddress ipaddress = newMongoServerAddress(hostname, port);//設定伺服器的ip和連接埠 MongoClientSettings settingsclient= new MongoClientSettings();//執行個體化用戶端設定類 settingsclient.Server =ipaddress;//連接埠賦值 settingsclient.MaxConnectionPoolSize = connectionPool; settingsclient.MinConnectionPoolSize = minpool; settingsclient.ConnectionMode =0;//連結模式設定 // MongoUrl url=newMongoUrl(ConnectionString); MongoClient client = newMongoClient(settingsclient);//調用用戶端類建構函式設定參數 MongoServer server =client.GetServer();//服務端擷取用戶端參數 DB =server.GetDatabase(database);//擷取資料庫名稱 #endregion
剛開始我也是不知道如何進行參數賦值,只是在一步步的操作中發現參數是有類型的,一些類型是一些引用類,就需要執行個體化賦值。所以才有最後看起來很多的參數。
設定檔中的資訊
<addkey="connectionPool" value="1000"/><!--串連池設定--> <add key="hostname"value="192.168.24.249"/> <add key="port"value="27017"/> <add key="database"value="DB3"/> <add key="minpool"value="300"/> </appSettings>
當然了用戶端的方式寫出來了。服務端也就容易的很多了
#region 服務端連結設定 MongoServerSettings mongoSetting =new MongoServerSettings(); //mongoSetting.Server = newMongoServerAddress(ConnectionString, connectionPool); mongoSetting.MaxConnectionPoolSize= connectionPool;//設定最大串連池 mongoSetting.Server = newMongoServerAddress(hostname, port); MongoServer server =MongoServer.Create(mongoSetting);//建立串連資料檔案 DB = server.GetDatabase(database); #endregion
認識:
由於該資料庫的參考資料比較少,所以多數資料還是外文,剛開始看到很是驚訝,如此多的英語能看的明白麼。但是只要心境平靜,一切都是可以的。通過基本的尋找和一些外文論壇瞭解的基本的設定。很像SQL的設定,但是又不同,需要進行代碼設定,這是這個代碼的參數可以寫在設定檔中。這次的資料尋找我深刻認識到,英語是非常非常重要的工具,如果你想更深入的瞭解,英語是必不可少的利器。