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

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" ?

>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="LogLevel" value="trace" />
<add key="LogPath" value="E:\Tools\mongdb\FrmMongDB\FrmMongDB\logs" /> <!--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 + "\n\r\t");
} 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 + "\n\r\t");
}
return result;
}

 

 

以上是插入和读代替码。

后面执行效果例如以下

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenVvbWluZzEyMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />

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

源代码在这里提供下载

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

c# 链接mongDB集群实战开发3的更多相关文章

  1. t持久化与集群部署开发详解

    Quartz.net持久化与集群部署开发详解 序言 我前边有几篇文章有介绍过quartz的基本使用语法与类库.但是他的执行计划都是被写在本地的xml文件中.无法做集群部署,我让它看起来脆弱不堪,那是我 ...

  2. 《跟老男孩学Linux运维:Web集群实战》读书笔记

    Linux 介绍 Linux 安装 Linux 调优 Web 基础 Nginx 应用 LNMP 应用 PHP 缓存加速 Nginx 调优 MySQL 应用 NFS 网络文件共享 Nginx 反向代理与 ...

  3. Zookeeper Monitor集群监控开发

    随着线上越来越多的系统依赖Zookeeper集群.以至于Zookeeper集群的执行状况越来越重要.可是眼下还没有什么好用的Zookeeper集群监控系统(淘宝开源了一个Zookeeper监控系统,可 ...

  4. redis3.0 集群实战1 -- 安装和配置

    本文主要是在centos7上安装和配置redis集群实战 参考: http://hot66hot.iteye.com/blog/2050676 集群教程: http://redisdoc.com/to ...

  5. MySQL/MariaDB数据库的Galera高可用性集群实战

      MySQL/MariaDB数据库的Galera高可用性集群实战 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Galera Cluster概述 1>.什么是Gale ...

  6. Haproxy+keepalived高可用集群实战

    1.1  Haproxy+keepalived高可用集群实战 随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS.Haproxy.Nginx等,各方面性能不亚于硬件负载均衡 ...

  7. 利用Redis实现集群或开发环境下SnowFlake自动配置机器号

    前言: SnowFlake 雪花ID 算法是推特公司推出的著名分布式ID生成算法.利用预先分配好的机器ID,工作区ID,机器时间可以生成全局唯一的随时间趋势递增的Long类型ID.长度在17-19位. ...

  8. 基于Ambari Server部署HDP集群实战案例

    基于Ambari Server部署HDP集群实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.部署Ambari Server端 博主推荐阅读: https://www.c ...

  9. Jenkins链接Kubernetes集群

    Jenkins CI/CD介绍 持续构建与发布是我们工作中必不可少的一个步骤,目前大多公司都采用Jenkins集群来搭建符合需求的CI/CD流程,然而传统的Jenkins Slave一主多从方式会存在 ...

随机推荐

  1. [android] 内容观察者

    拦截短信,比如当发短信的时候,就把短信读取出来,当系统的短信发生变化的时候,大叫一声,把数据发送到公共的消息邮箱里面,我们的应用通过内容观察者观察公共的消息邮箱 获取ContentResolver对象 ...

  2. sudo: cd: command not found

    事件起因 今天在aws ubutun上忽然发现的一个问题,执行sudo cd 时出现 sudo: cd: command not found 原因 shell shell是一个命令解析器 所谓shel ...

  3. 买or不买?如何测试博彩公司赔率是否合理?

    世界杯期间,烧烤店.酒吧都热闹起来了,柔柔我的朋友圈也热闹起来了,有酱紫的: 还有酱紫的: 然后还有酱紫的: 酱紫的: 当然天台也是一如既然的热闹: 似乎人人都在输钱,那真正的赢家在哪里呢?博彩业的真 ...

  4. Java 学习笔记 执行外部命令 包装类 枚举类型

    执行外部命令 Runtime只能通过静态方法getRuntime获得,可以用来执行外部的命令 Runtime runtime = Runtime.getRuntime(); runtime.exec( ...

  5. Java高并发 -- J.U.C.组件扩展

    Java高并发 -- J.U.C.组件扩展 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 FutureTask Future模式,核心思想是异步调用.和同步调用的区别 ...

  6. 有序列表ol,无序列表ul,定义列表dl

    ====================非常重要=================无序列表ul中有一个type属性四个属性值type="disc" 实心圆点(默认) type=&q ...

  7. es6 语法 (iterator和for...of循环)

    Iterator遍历器 遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据 ...

  8. nginx 转将http跳转到https

    #websoceket 使用map map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream abc. ...

  9. 2018-05-09 5分钟入门CTS-尝鲜中文版TypeScript

    知乎原链 本文为中文代码示例之5分钟入门TypeScript的CTS版本. CTS作者是@htwx(github). 它实现了关键词和标准库的所有命名汉化. 本文并未使用附带的vscode相关插件(包 ...

  10. 腾讯.NET&PHP面试题

    在整个面试过程中,作为面试者的你,角色就是小怪兽,面试官的角色则是奥特曼,更不幸的是,作为小怪兽的你是孤身一人,而奥特曼却往往有好几个助攻,你总是被虐得不要不要的~ 作为复读一年才考上专科的我,遗憾的 ...