zoukankan      html  css  js  c++  java
  • 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

       源码下载戳这里-》

  • 相关阅读:
    前端职场的那些事情
    PS中的图像知识
    HTML5学堂,感谢您一年的陪伴(上)
    浏览器与HTML5的相辅相成
    当学习前端过程中心态发生了变化
    前端入门相关工具
    初学HTML5、初入前端
    前端开发工程师的发展方向
    关于元素水平垂直居中的那些事?
    便捷的前端开发工具
  • 原文地址:https://www.cnblogs.com/armyfai/p/4716984.html
Copyright © 2011-2022 走看看