设为首页 加入收藏

TOP

c#链接mongDB集群实战开发3
2014-11-23 23:56:14 来源: 作者: 【 】 浏览:10
Tags:链接 mongDB 集群 实战 开发

c# 链接mongDB集群

一 了解mongdb

二 部署集群

三 C#链接mongdb 完成测试

C#链接mongdb 完成测试

此章节继续我们上一章节将的我们开始用程序去链接mondbdb,大家都知道我们链接sqlserver其实用的是微软自己写的驱动。它已经封装了一些对象,要我们去链接。但是我们链接mondbdb 同样需要一些对象,这个mongdb官网有说明,可以自己去看看或者直接下载我的这里下载 或者在第一章节有些伙伴们已经下载好了

开发驱动文件夹 在 mongo-csharp-driver-master\mongo-csharp-driver-master\src SRC下面看到驱动项目这里注意,我下载是vs2012的项目,同学们可以根据自己的需要替换net framework 版本

打开项目之后看到 如图所示

\

编译项目得到

MongoDB.Bson.dll

MongoDB.Driver.dll

创建项目,项目配置文件如下

< xml version="1.0" encoding="utf-8"  >

     
        
    
  
    
    
    
    
    
    
    
    
  

LogLevel 为自定义 日记级别 ,这个后面看我的代码

LogPath 为日志路径

MongReplicaSetName 为副本集名称,其实就是建立集群的时候取的名字。

MongoServerAddress 为集群机器ip列表,我这里是自己的机器开了不同的端口来区别,你可以改成局域网ip

TimeOut 超时时间,默认貌似是3秒,我这里设置60秒方便调试

链接集群主要代码

 /// 
        /// 取得数据库连接字符串
        /// 
        /// App.Config文件中AppSettings节中 AppSettings 对应的name
        /// 数据库连接字符串
        private static MongoServer GetConnStr()
        {
            List servers = 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();//设置副本集名称

            int TimeOut =ConvertUtil.ParseInt(ConfigurationManager.AppSettings["TimeOut"].Trim());//设置副本集名称

            set.ConnectTimeout = new TimeSpan(0, 0, 0, TimeOut, 0);//设置超时时间为5秒

            set.ReadPreference = new ReadPreference(ReadPreferenceMode.SecondaryPreferred);

            MongoClient client = new MongoClient(set);

            return client.GetServer();
        }
set.ReadPreference = new ReadPreference(ReadPreferenceMode.SecondaryPreferred); 这句代码可以根据自己需要修改。

其他没有什么注意的地方

数据插入mongdb代码

    /// 
        /// MongDB 批量insert语句
        /// 
        /// 对象类型
        /// 数据库名称
        /// 表名称
        /// 对象
        /// 返回错误
        /// 
        public static IEnumerable Execute(string _databaseName, string _collectionName, IEnumerable entitys, out string errorMsg)
        {
            errorMsg = string.Empty;
            //取得数据库连接
            IEnumerable result = null;

            try
            {
                if (null == entitys)
                    return null;
                //获取连接的服务器集群
                _server = GetConnStr();

                //获取数据库或者创建数据库(不存在的话)。
                MongoDatabase database = _server.GetDatabase(_databaseName);

                using (_server.RequestStart(database))//开始连接数据库。
                {
                    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数据代码

/// 
        /// 如果不清楚具体的数量,一般不要用这个函数。
        /// 
        /// 
        /// 
        /// 
        public static List GetAll(string _databaseName, string collectionName,out string errorMsg)
        {
            errorMsg = string.Empty;
            List result = new List();
            try
            {
                //获取连接的服务器集群
                _server = GetConnStr();

                //获取数据库或者创建数据库(不存在的话)。
                MongoDatabase database = _server.GetDatabase(_databaseName);
               
                using (_server.RequestStart(database))//开始连接数据库。
                {
                    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;
        } 

以上是插入和读取代码。

后面运行效果如下

\

我这里插入了10w条数据 人然后读取10w条数据。效率比sqlserver是快很多。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MongoDB(NoSQL)入门 下一篇mssql数据库游标批量修改符合条件..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: