zoukankan      html  css  js  c++  java
  • c# 链接mongDB集群实战开发3

    版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/zuoming120/article/details/25702295

    c# 链接mongDB集群

    了解mongdb

    二  部署集群

    C#链接mongdb 完毕測试

    C#链接mongdb 完毕測试

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

    开发驱动目录 在  mongo-csharp-driver-mastermongo-csharp-driver-mastersrc   SRC以下看到驱动项目这里注意,我下载是vs2012的项目,同学们能够依据自己的须要替换net framework  版本号

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

    编译项目得到

    MongoDB.Bson.dll

    MongoDB.Driver.dll

    创建项目。项目配置文件例如以下

     

    <?

    xml version="1.0" encoding="utf-8" ?

    > <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <add key="LogLevel" value="trace" /> <add key="LogPath" value="E:ToolsmongdbFrmMongDBFrmMongDBlogs" /> <!--MongDb配置begin--> <add key="MongReplicaSetName" value="zuomm"/><!--设置副本集名称--> <add key="MongoServerAddress" value="127.0.0.1:1111|127.0.0.1:2222|127.0.0.1:3333"/><!--mongdb集群列表--> <add key="TimeOut" value="60"/><!--mongdb集群链接超时时间--> <!--MongDb配置end--> </appSettings> </configuration>

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

    LogPath 为日志路径

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

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

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

    链接集群主要代码

     
     /// <summary>
            /// 取得数据库连接字符串
            /// </summary>
            /// <param name="connName">App.Config文件里AppSettings节中 AppSettings 相应的name</param>
            /// <returns>数据库连接字符串</returns>
            private static MongoServer GetConnStr()
            {
                List<MongoServerAddress> servers = new List<MongoServerAddress>();
                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代码


     

        /// <summary>
            /// MongDB 批量insert语句
            /// </summary>
            /// <typeparam name="T">对象类型</typeparam>
            /// <param name="_databaseName">数据库名称</param>
            /// <param name="_collectionName">表名称</param>
            /// <param name="entitys">对象</param>
            /// <param name="errorMsg">返回错误</param>
            /// <returns></returns>
            public static IEnumerable<SafeModeResult> Execute<T>(string _databaseName, string _collectionName, IEnumerable<T> entitys, out string errorMsg)
            {
                errorMsg = string.Empty;
                //取得数据库连接
                IEnumerable<SafeModeResult> result = null;
    
                try
                {
                    if (null == entitys)
                        return null;
                    //获取连接的服务器集群
                    _server = GetConnStr();
    
                    //获取数据库或者创建数据库(不存在的话)。
                    MongoDatabase database = _server.GetDatabase(_databaseName);
    
                    using (_server.RequestStart(database))//開始连接数据库。

    { MongoCollection<T> myCollection = database.GetCollection<T>(_collectionName); result = myCollection.InsertBatch<T>(entitys); } } catch (Exception ex) { errorMsg = ex.ToString(); } finally { } //记录日志 if (!string.IsNullOrEmpty(errorMsg)) { LogUtil.Error("CommonLib.DbAccess.MongDBAccess", "Execute", errorMsg + " "); } return result; }


    读取mongdb数据代码 

    /// <summary>
            /// 假设不清楚详细的数量,一般不要用这个函数。
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="collectionName"></param>
            /// <returns></returns>
            public static List<T> GetAll<T>(string _databaseName, string collectionName,out string errorMsg)
            {
                errorMsg = string.Empty;
                List<T> result = new List<T>();
                try
                {
                    //获取连接的服务器集群
                    _server = GetConnStr();
    
                    //获取数据库或者创建数据库(不存在的话)。

    MongoDatabase database = _server.GetDatabase(_databaseName); using (_server.RequestStart(database))//開始连接数据库。 { MongoCollection<T> myCollection = database.GetCollection<T>(collectionName); result.AddRange(myCollection.FindAll()); } } catch (Exception ex ) { errorMsg = ex.ToString(); } //记录日志 if (!string.IsNullOrEmpty(errorMsg)) { LogUtil.Error("CommonLib.DbAccess.MongDBAccess", "GetAll", errorMsg + " "); } return result; }


     

    以上是插入和读代替码。

    后面执行效果例如以下

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

    源代码在这里提供下载

    http://download.csdn.net/detail/zuoming120/7339897

  • 相关阅读:
    Discuz利用百度ping把我们网站自动提交到百度
    正则表达式速查表1
    thinkphp 新浪新闻采集代码演示
    php采集一网站的精美图片
    百度知道的php爬虫
    新浪新闻采集程序
    mysql pid文件丢失解决办法
    js位运算-按位非
    mysql表损坏解决方案
    h5新API之WebStorage解决页面数据通信问题
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10762506.html
Copyright © 2011-2022 走看看