c# 链接mongDB集群实战开发3
版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/zuoming120/article/details/25702295
c# 链接mongDB集群
一 了解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是快非常多。
源代码在这里提供下载
c# 链接mongDB集群实战开发3的更多相关文章
- t持久化与集群部署开发详解
Quartz.net持久化与集群部署开发详解 序言 我前边有几篇文章有介绍过quartz的基本使用语法与类库.但是他的执行计划都是被写在本地的xml文件中.无法做集群部署,我让它看起来脆弱不堪,那是我 ...
- 《跟老男孩学Linux运维:Web集群实战》读书笔记
Linux 介绍 Linux 安装 Linux 调优 Web 基础 Nginx 应用 LNMP 应用 PHP 缓存加速 Nginx 调优 MySQL 应用 NFS 网络文件共享 Nginx 反向代理与 ...
- Zookeeper Monitor集群监控开发
随着线上越来越多的系统依赖Zookeeper集群.以至于Zookeeper集群的执行状况越来越重要.可是眼下还没有什么好用的Zookeeper集群监控系统(淘宝开源了一个Zookeeper监控系统,可 ...
- redis3.0 集群实战1 -- 安装和配置
本文主要是在centos7上安装和配置redis集群实战 参考: http://hot66hot.iteye.com/blog/2050676 集群教程: http://redisdoc.com/to ...
- MySQL/MariaDB数据库的Galera高可用性集群实战
MySQL/MariaDB数据库的Galera高可用性集群实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Galera Cluster概述 1>.什么是Gale ...
- Haproxy+keepalived高可用集群实战
1.1 Haproxy+keepalived高可用集群实战 随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS.Haproxy.Nginx等,各方面性能不亚于硬件负载均衡 ...
- 利用Redis实现集群或开发环境下SnowFlake自动配置机器号
前言: SnowFlake 雪花ID 算法是推特公司推出的著名分布式ID生成算法.利用预先分配好的机器ID,工作区ID,机器时间可以生成全局唯一的随时间趋势递增的Long类型ID.长度在17-19位. ...
- 基于Ambari Server部署HDP集群实战案例
基于Ambari Server部署HDP集群实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.部署Ambari Server端 博主推荐阅读: https://www.c ...
- Jenkins链接Kubernetes集群
Jenkins CI/CD介绍 持续构建与发布是我们工作中必不可少的一个步骤,目前大多公司都采用Jenkins集群来搭建符合需求的CI/CD流程,然而传统的Jenkins Slave一主多从方式会存在 ...
随机推荐
- [android] 内容观察者
拦截短信,比如当发短信的时候,就把短信读取出来,当系统的短信发生变化的时候,大叫一声,把数据发送到公共的消息邮箱里面,我们的应用通过内容观察者观察公共的消息邮箱 获取ContentResolver对象 ...
- 新浪IP库地址
新浪IP库地址 http://int.dpool.sina.com.cn/iplookup/iplookup.php
- linux下允许和禁止root远程登录的方法
1.vi /etc/ssh/sshd_config,将PermitRootLogin的值改成yes,并保存 PermitRootLogin yes 另外需要添加 AllowUsers root SA ...
- OSI 七层,TCP 四层 , TCP 五层模型介绍
以 TCP 四层模型为例,介绍对应的物理设备 传输层: 四层交换机,四层路由器 网络层: 路由器,三层交换机 数据链路层: 网桥,以太网交换机,网卡 物理层: 中继器,集线器,双绞线 各层功能介绍 物 ...
- MySQL数据库锁类型
锁概念 : 当高并发访问同一个资源时,可能会导致数据不一致,需要一种机制将用户访问数据的顺序进行规范化,以保证数据库数据的一致性.锁就是其中的一种机制. 一个栗子 :以买火车票为例,火车票可面向广大消 ...
- HTML空格符号 nbsp; ensp; emsp; 介绍以及实现中文对齐的方法
一:不同空格符合的区别 半角的不断行的空白格(推荐使用) 半角的空格 全角的空格 详细的含义: :这是我们使用最多的空格,也就是按下space键产生的空格.在HTML中,如果你用空格 ...
- HDU 1847 Good Luck in CET-4 Everybody!(找规律版巴什博奕)
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- springboot 常用配置文件
1.连接数据库 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId> ...
- Link Between SAP SD, MM & FI
Link Between SAP SD, MM & FI 1. In SAP you will always get integration with other modules. SD wi ...
- iOS------Xcode 的clang 扫描器可以检测出所有的内存泄露吗
在苹果没有出ARC(自动内存管理机制)时,我们几乎有一半的开发时间都耗费在这么管理内存上.后来苹果很人性的出了ARC,虽然在很大程度上,帮助我们开发者节省了精力和时间.但是我们在开发过程中,由于种种原 ...