mongdo通用类(C#版)
mongdo通用类(C#版)
日前从公司离职,很快,还没休息就步入了现在的公司,开始跟着公司的脚步走。
公司的项目基本都是大数据的,所以在数据库上大部分都是使用Mongodb和Redis,基本都是Nosql型的数据库为主。以前自己学着做过Mongodb和Redis的Demo,大体知道其怎么去运用,只是没有一个规范化的封装和运用,单纯是学习。现在有实战项目了,就激起了我前进学习的心,趁着今天自己查了下一些资料,学习了借鉴了一些前辈的方法后自己也封装了一个Mongdb的底层通用类,这里分享出来跟大家一起学习下。
这里主要是讲我封装的底层,不涉及到Mongodb的安装,启动,可视化查询等东西,后面会附上一些参考的地址供大家一起学习。
目前mongodb提供的驱动主要有两种:
1.官网驱动 下载地址:http://github.com/mongodb/mongo-csharp-driver/downloads
2.第三方的samus驱动 下载地址:https://github.com/samus/mongodb-csharp
两个驱动的运用自己都有使用过,个人感觉官方的驱动提供的方法比较多,用起来也比较顺手,而且更新度比samus的高,所以自己使用的是官方的驱动。
官网驱动的简单使用
主要使用下面的两个dll
MongoDB.dll 驱动的主要程序
MongoDB.GridFS.dll 用于存储大文件。
基本的增删改查代码如下:
封装扩展使用
1.数据库配置文件
考虑到一个项目里面可能使用到不同的数据库(比如:普通数据和文件数据等分别存到不同数据库中),也有可能会跨服务器查询,所以这里首先创建一个配置文件帮助类,主要是可以进行多个数据库配置,满足跨服务器,跨数据的需求。
配置格式如下:
<?xml version="1.0" encoding="utf-8" ?> <ServiceConfig> <mongodbs> <Item dbName="myDb" hostName="mongodb://127.0.0.1:27017"></Item> <Item dbName="myDb1" hostName="mongodb://127.0.0.1:27017"></Item> <Item dbName="myDb2" hostName="mongodb://127.0.0.1:27017"></Item> </mongodbs> </ServiceConfig>
Xml序列化对象类
读取配置文件管理类
2.实体通用接口
mongodb中本身没有自增ID的属性,自带有一个ObjectID,为了统一每个实体对象都有这个ID ,这里建立一个通用接口和一个底层实体基类来进行规范化处理
实体接口
底层实体基类
实体类的例子(继承于BaseModel类)
3.Mongodb通用帮助基类 (主要类)
4.业务类
当新建一个表(mongodb里面叫做集合),需要对其进行操作,包括一些业务处理时。首先继承MongodbBase类,然后使用Init方法初始化对象,如下面的UserServcices类
5.使用
以上就是自己封装的整体逻辑和代码,不过这里面还有一些不明白和不足的地方,这里提出来,希望大神们帮我解答下:
1.返回值问题
在添,删,改的使用,根据官网提供的驱动,都有一个WriteConcernResult对象返回,可是在测试中发现,这个返回的对象永远都是null
2.增加ID问题
mongodb中本身没有自增ID的属性,自带有一个ObjectID,如果我需要一个自增ID,是否是自己建一个ID属性,然后在增加的时候自己控制+1?不过这样是否性能上比较低,还要考虑多线程并发的情况下加锁的问题。所以不知道这块大家是怎么去实现的?
3.分页效率的问题
一开始分页我是先将结果转为Queryable,然后在进行操作,这个代码里面有这段,暂时注释掉了,后面再博客园上看到了一个前辈的mongodb分析后,改了下分页的方式,测试过很快,但在带条件获取记录行总数的时候,发现测试300W数据下,获取总数需要600ms的时间,不知道是我方法用错了还是有其他更好的?
最后附在几个学习的地址
mongodb入门:http://www.cnblogs.com/fish-li/archive/2011/06/26/2090800.html
官网驱动介绍:http://www.cnblogs.com/zhwl/p/3421034.html
分页优化参考:http://www.cnblogs.com/capqueen/p/MongoDBPagination.html
源码下载:戳这里-》