10.MongoDB连接模型(长连接vs短连接vs连接池)

741 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

主要是用来记录一下自己对于连接的一些思考,原因是发现自己对很多概念都太模糊了需要明确。

 

一、长连接与短连接

1、什么是长连接?什么是短连接?

答:长连接、短连接主要是看你怎么用(更大程度上是各个层级串起来链接的机制究竟如何)而不是不是说设置了什么参数就是长连接、设置了另外一个参数就是短连接。但从字面意思来看:所谓短连接是指每次来一个请求都创建一个链接,请求结束后链接断开,如此反复;长连接则是连接会被维持,每一有请求过来需要用的时候就取出来直接用。当然在实际场景中你不能仅仅根据一个层面的代码来判断。举个例子我的mongo_proxy底层调用的是mongo的go驱动。从mongo_proxy的业务层面确实是每个请求来的时候都new了一个client,但是着并不意味着我们这里一定是短连接,因为newclient本质上调用的是go驱动;如果go驱动已经维护了一个连接池这里每次newclient的语义可能只是从go driver层面维护的连接池中取出一个空闲连接过来用。这种场景下依然是长连接、有连接池,只不过驱动封装好了不让业务方感知了而已。

2、优劣与使用场景

短连接的优点是简单,不需要做连接的管理;适用场景就是连接使用很低频的场景;

长连接适用于频繁使用连接的场景,例如对于操作数据库这种场景是肯定要使用长连接的否则没来一个请求都频繁的创建(与销毁)连接的代价太高了。缺点也很明确,那就是要进行连接管理稍微麻烦一些。