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一主多从方式会存在 ...
随机推荐
- http协议、web服务器、并发服务器(下)
Web静态服务器-5-非堵塞模式 单进程非堵塞模型 import socket import time def main(): tcp_socket_server = socket.socket(so ...
- Android Studio 学习(三) 广播
动态注册监听网络变化 创建intentFilter 并addAction 代表了监听哪个广播 然后使用registerReceiver()方法 将intentFilter 与 自己创建的监听器 传进去 ...
- 汇编语言--微机CPU的指令系统(五)(算术运算指令)
(3)算术运算指令 算术运算指令是反映CPU计算能力的一组指令,也是编程时经常使用的一组指令.它包括:加.减.乘.除及其相关的辅助指令. 该组指令的操作数可以是8位.16位和32位(80386+).当 ...
- React.cloneElement
作用: 克隆react element, 并传递props, 和children React.cloneElement( element, [props], [...children] ) // ch ...
- linux下允许和禁止root远程登录的方法
1.vi /etc/ssh/sshd_config,将PermitRootLogin的值改成yes,并保存 PermitRootLogin yes 另外需要添加 AllowUsers root SA ...
- gulp es6 转 es5
npm install --save-dev gulp-babel babel-preset-es2015 var babel = require("gulp-babel"); / ...
- js 判断数组中是否有重复值
function arrHasvalue(arr) { var nary = arr.sort(); for (var i = 0; i < arr.length; i++) { if (nar ...
- vuejs-指令详解
v-if v-if指令可以完全根据表达式的值在DOM中生成或移除一个元素.如果v-if表达式赋值为false,那么对应的元素就会从DOM中移除:否则,对应元素的一个克隆将被重新插入DOM中,代码如下: ...
- Android开发CheckBox控件,全选,反选,取消全选
在Android开发中我们经常会使用CheckBox控件,那么怎么实现CheckBox控件的全选,反选呢 首先布局我们的界面: <?xml version="1.0" enc ...
- MySQL 安装及卸载详细教程
本文采用最新版MySQL8版本作为安装教程演示,本人亲试过程,准确无误.可供读者参考. 下载 官网下载 --> 社区免费服务版下载. 下载Windows安装程序MySQL Installer M ...