c# 鏈接mongDB集群 一 了解mongdb 二 部署集群 三 C#鏈接mongdb 完成測試 C#鏈接mongdb 完成測試 此章節(jié)繼續(xù)我們上一章節(jié)將的我們開始用程序去鏈接mondbdb,大家都知道我們鏈接sqlserver其實(shí)用的是微軟自己寫的驅(qū)動。它已經(jīng)封裝了一些對象,要我們?nèi)ユ溄印5?/p>
c# 鏈接mongDB集群
一 了解mongdb
二 部署集群
三 C#鏈接mongdb 完成測試
C#鏈接mongdb 完成測試
此章節(jié)繼續(xù)我們上一章節(jié)將的我們開始用程序去鏈接mondbdb,大家都知道我們鏈接sqlserver其實(shí)用的是微軟自己寫的驅(qū)動。它已經(jīng)封裝了一些對象,要我們?nèi)ユ溄?。但是我們鏈接mondbdb 同樣需要一些對象,這個mongdb官網(wǎng)有說明,可以自己去看看或者直接下載我的這里下載 或者在第一章節(jié)有些伙伴們已經(jīng)下載好了
開發(fā)驅(qū)動文件夾 在 mongo-csharp-driver-master\mongo-csharp-driver-master\src SRC下面看到驅(qū)動項(xiàng)目這里注意,我下載是vs2012的項(xiàng)目,同學(xué)們可以根據(jù)自己的需要替換net framework 版本
打開項(xiàng)目之后看到 如圖所示
編譯項(xiàng)目得到
MongoDB.Bson.dll
MongoDB.Driver.dll
創(chuàng)建項(xiàng)目,項(xiàng)目配置文件如下
LogLevel 為自定義 日記級別 ,這個后面看我的代碼
LogPath 為日志路徑
MongReplicaSetName 為副本集名稱,其實(shí)就是建立集群的時候取的名字。
MongoServerAddress 為集群機(jī)器ip列表,我這里是自己的機(jī)器開了不同的端口來區(qū)別,你可以改成局域網(wǎng)ip
TimeOut 超時時間,默認(rèn)貌似是3秒,我這里設(shè)置60秒方便調(diào)試
鏈接集群主要代碼
////// 取得數(shù)據(jù)庫連接字符串 /// /// App.Config文件中AppSettings節(jié)中 AppSettings 對應(yīng)的name ///數(shù)據(jù)庫連接字符串 private static MongoServer GetConnStr() { Listservers = new List (); string reg = @"^(?'server'\d{1,}.\d{1,}.\d{1,}.\d{1,}):(?'port'\d{1,})$"; string[] ServerList = ConfigurationManager.AppSettings["MongoServerAddress"].Trim().Split('|'); foreach (string server in ServerList) { MatchCollection mc = Regex.Matches(server, reg); if (mc != null && mc.Count > 0) servers.Add(new MongoServerAddress(mc[0].Groups["server"].ToString(), Convert.ToInt32(mc[0].Groups["port"].ToString()))); } if (servers == null || servers.Count < 1) return null; MongoClientSettings set = new MongoClientSettings(); set.Servers = servers; set.ReplicaSetName = ConfigurationManager.AppSettings["MongReplicaSetName"].Trim();//設(shè)置副本集名稱 int TimeOut =ConvertUtil.ParseInt(ConfigurationManager.AppSettings["TimeOut"].Trim());//設(shè)置副本集名稱 set.ConnectTimeout = new TimeSpan(0, 0, 0, TimeOut, 0);//設(shè)置超時時間為5秒 set.ReadPreference = new ReadPreference(ReadPreferenceMode.SecondaryPreferred); MongoClient client = new MongoClient(set); return client.GetServer(); } set.ReadPreference = new ReadPreference(ReadPreferenceMode.SecondaryPreferred); 這句代碼可以根據(jù)自己需要修改。
其他沒有什么注意的地方
數(shù)據(jù)插入mongdb代碼
////// MongDB 批量insert語句 /// ///對象類型 /// 數(shù)據(jù)庫名稱 /// 表名稱 /// 對象 /// 返回錯誤 ///public static IEnumerable Execute (string _databaseName, string _collectionName, IEnumerable entitys, out string errorMsg) { errorMsg = string.Empty; //取得數(shù)據(jù)庫連接 IEnumerable result = null; try { if (null == entitys) return null; //獲取連接的服務(wù)器集群 _server = GetConnStr(); //獲取數(shù)據(jù)庫或者創(chuàng)建數(shù)據(jù)庫(不存在的話)。 MongoDatabase database = _server.GetDatabase(_databaseName); using (_server.RequestStart(database))//開始連接數(shù)據(jù)庫。 { MongoCollection myCollection = database.GetCollection (_collectionName); result = myCollection.InsertBatch (entitys); } } catch (Exception ex) { errorMsg = ex.ToString(); } finally { } //記錄日志 if (!string.IsNullOrEmpty(errorMsg)) { LogUtil.Error("CommonLib.DbAccess.MongDBAccess", "Execute", errorMsg + "\n\r\t"); } return result; }
讀取mongdb數(shù)據(jù)代碼
////// 如果不清楚具體的數(shù)量,一般不要用這個函數(shù)。 /// ////// /// public static List GetAll (string _databaseName, string collectionName,out string errorMsg) { errorMsg = string.Empty; List result = new List (); try { //獲取連接的服務(wù)器集群 _server = GetConnStr(); //獲取數(shù)據(jù)庫或者創(chuàng)建數(shù)據(jù)庫(不存在的話)。 MongoDatabase database = _server.GetDatabase(_databaseName); using (_server.RequestStart(database))//開始連接數(shù)據(jù)庫。 { MongoCollection myCollection = database.GetCollection (collectionName); result.AddRange(myCollection.FindAll()); } } catch (Exception ex ) { errorMsg = ex.ToString(); } //記錄日志 if (!string.IsNullOrEmpty(errorMsg)) { LogUtil.Error("CommonLib.DbAccess.MongDBAccess", "GetAll", errorMsg + "\n\r\t"); } return result; }
以上是插入和讀取代碼。
后面運(yùn)行效果如下
我這里插入了10w條數(shù)據(jù) 人然后讀取10w條數(shù)據(jù)。效率比sqlserver是快很多。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com