大型应用开发中应当何时初始化、打开和关闭数据库连接?
数据库连接管理最优实践
你遇到的两种方案的矛盾,完全可以通过数据库连接池组件解决,不需要你手动控制单连接的生命周期。
先明确你原有思路的问题
全程复用单连接的风险
- 连接会因为网络波动、数据库端超时配置、防火墙会话过期等原因被意外中断,你很难覆盖所有场景实现自动重连,一旦断连所有数据库操作都会直接失败
- 单连接无法支持并发操作,多个工作区同时发起查询时会出现资源竞争,轻则串行执行拖慢性能,重则出现事务错乱、数据异常
- 绝大多数数据库都会主动清理长期空闲的无效连接,你持有已失效的连接发起请求会直接抛出异常
「快开快关」和连接高开销的矛盾
这两个结论都是正确的,核心解决方案就是用连接池做中间层:
连接池会预先创建一批空闲的数据库连接,你需要执行数据库操作时直接从池子里取已经建立好的连接,用完之后不是真的销毁连接,而是归还给连接池。既符合了「用到再拿、用完就放」的快开快关原则,又完全避免了每次操作都重新建立连接的高额开销。
适配你的多工作区场景的落地规则
完全不需要把连接生命周期和工作区、用户操作绑定,遵循以下规则即可:
- 所有数据库操作都统一走连接池分配连接,不要手动创建/销毁连接
- 执行完当前业务关联的所有数据库操作后,立刻将连接归还到连接池
- 连接池自带空闲连接清理机制,你只需要根据业务量配置好最大连接数、最小空闲连接数、空闲连接超时时间三个核心参数即可,不需要自己实现5分钟定时刷新之类的自定义策略
如果你的应用是并发极低的桌面端场景,不需要引入重量级连接池组件,也可以自己实现极简的连接复用逻辑:维护一个全局连接实例,每次使用前先执行SELECT 1做有效性探测,连接无效就重建,有效就直接使用,用完不主动关闭,等空闲超时后自动销毁即可,可靠性远高于手动按操作/工作区开关连接。
内容的提问来源于stack exchange,提问作者XIAA
相关产品推荐
相关产品推荐

