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一主多从方式会存在 ...
随机推荐
- [PHP] 算法-字符串的全排列的PHP实现
输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 思路: 1.利用递归形成 ...
- mysql常用操作小节
比如要将表user 中的字段 username修改为 name: ); 其他关于表字段信息的修改: 1.添加字段:给表 user 添加字段 password 在 id 后面; ) NOT NULL A ...
- 向Spring容器中注册组件的方法汇总小结
1.通过xml定义 <bean class=""> <property name="" value=""></ ...
- springboot整合netty(二)
目录 前言 正文 代码 1. 新建一个springboot项目,在pom文件中添加netty依赖: 2.新建netty服务 3.netty调用所需的服务类 4 springboot启动类 5.测试 我 ...
- 10个JavaScript常见BUG及修复方法
译者按: JavaScript语言设计太灵活,用起来不免要多加小心掉进坑里面. 原文: Top 10 bugs and their bug fixing 译者: Fundebug 为了保证可读性,本文 ...
- 前端常见算法的JS实现
1.冒泡排序 function bubbleSort(arr){ var i = 0, j = 0; for(i=1; i<arr.length; i++){ for(j=0; j<=ar ...
- elementUI 设置input的只读或禁用
只读:readonly 在data里定义:readonly: true, 然后在input框里加上readonly就可以了. 禁用:disabled 在data里定义:edit: true, 然后在i ...
- CSS超全笔记(适合新手入门)
CSS CSS初识 CSS(Cascading Style Sheets) 美化样式 CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体.大小.对齐方式等 ...
- Android项目实战(四十八):架构之组件化开发
什么要组件化开发? 看一下普通项目的结构 , 一个项目下有多个Module(左侧图黑体目录),但是只有一个application,0个或多个library(在每个medel下的build.gradle ...
- 使用fiddler抓包手机请求数据
1.启动Fiddler,打开菜单栏中的 Tools > Fiddler Options,打开“Fiddler Options”对话框. 2.在Fiddler Options”对话框切换到“Con ...