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    用于存储大文件。

      基本的增删改查代码如下:

    View Code

 

 

       封装扩展使用

       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序列化对象类   

 View Code

   读取配置文件管理类

 View Code

 

   2.实体通用接口

      mongodb中本身没有自增ID的属性,自带有一个ObjectID,为了统一每个实体对象都有这个ID ,这里建立一个通用接口和一个底层实体基类来进行规范化处理

      实体接口   

 View Code

      底层实体基类   

 View Code

     实体类的例子(继承于BaseModel类)     

 View Code

 

  3.Mongodb通用帮助基类 (主要类)    

 View Code

 

     4.业务类

      当新建一个表(mongodb里面叫做集合),需要对其进行操作,包括一些业务处理时。首先继承MongodbBase类,然后使用Init方法初始化对象,如下面的UserServcices类

 View Code

 

     5.使用    

 View Code

 

  以上就是自己封装的整体逻辑和代码,不过这里面还有一些不明白和不足的地方,这里提出来,希望大神们帮我解答下:

  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

 

   源码下载戳这里-》

 

posted @ 2015-08-10 08:44  armyfai  阅读(404)  评论(0编辑  收藏  举报