Skip to content

数据库连接池的核心思想

nixub edited this page Sep 13, 2024 · 1 revision

Saturday, May 20, 2023 1:03 PM

之前加载驱动,获取连接,写入语句后,执行完,就会关闭

这个 每次使用连接消耗过大,因为 client和数据库使用的是长链接,其实可以复用的。每次用的时候new 连接对象不合理。

可以把这个一个连接对象作为单例,全局共用----就是和应用的生命周期一样,同生共死。如果一个连接对象无法处理 这么多 那就多开几个 连接对象,把连接对象放入 currenthashmap 中 ,或是队列 。然后通过某种策略
比如轮训 ,最近使用,最久未使用,hash 映射 去获取 连接对象 ,让这些连接对象 去执行这些语句 。 如果 与数据库的交互量是成周期性的。就要设置最大连接数来应对,并写好回收策略 。 开始释放资源。(这个资源包含 数据库对象,占内存,可以忽略不计,主要是网络连接 ,此时有多个会话,处于长连接模式。数据库服务器那边是一直要花费资源维护)

(有连接对象的时候还没有创建会话 ,一个连接对象是不是对应一个连接会话,管理好连接对象就是 对资源一种良好的控制维护)

衍生问题,当同一份数据,受到多个实例的影响时,就要加锁--数据库都会去实现他的mvcc --多版本并发控制。

但是 ,你连接数 ,使用的是数据库的服务器模式 ,这些连接数 还是受限于 ,网络的带框 ,和 双方机器的性能 ,应用这边连接数设置的很大,但数据库服务器的性能也会到达瓶颈,他有一个 最佳的效果的。

比如我在springboot项目中不使用德鲁伊连接MySQL 会如何使用。

写一个配置类,这个类就是池类在配置类变成单例时,从配置文件中 获取各种参数。然后也先进行连接,把我之前分析的事情都实现起来。