Mongodb 源码分析--链接池(ConnPool)

    在之前的 一篇文章 中,介绍了mongos的balaner的 执行流程,其中在源码中的Balancer::run()方法里简单说明了为了连接到configserver,balancer通过构造 ScopedDbConnection实现来链接并执行相应操作,因为当时篇幅所限,只是该链接使用池化的方式一带而过,今天就专门介绍一下 mongodb中使用池化方式来管理链接对象以提升链接效率的原理。
    
    好了,开始今天的正文吧!

    首先看一下balancer类的run()方法,相关代码如下:   
   

    上面方法中从ScopedDbConnection声明到该实现执行done()方法结束,系统会从链接池中获取一个链接对象,如无链接则直接创建。如 果是创建的链接,则会将该链接添加到池中。下面我们就看一下其类图:
 

    图中的红框所圈的类均为connpool.h头文件中所包含定义的类信息,而这些类中(比如ScopedDbConnection,上面代码提到过)会 包含一个DBClientBase属性指针,而DBClientBase的定义位于dbclient.h头文件中,其主要是定义了客户端连接到 mongodb服务端时所经常进行的操作(CRUD等)。

    图中的类比较多,主要的几个包括:

    ScopedDbConnection: 池中的数据库链接类,其通过持有的DBClientBase指出针来施加crud操作
    DBConnectionPool:数据库链接池 类,定义链接的创建,获取,flush,以及维护等操作。
    PoolForHost:该对象提供以栈式(stack)方式管理pool链接 对象。

    
    下面就先看一下ScopedDbConnection的构造方法,其执行流程如下:

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值