数据库连接池实现原理|学习笔记

简介: 快速学习数据库连接池实现原理

开发者学堂课程【Java 面试疑难点串讲 2:Java 数据库开发数据库连接池实现原理

】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/25/detail/542


数据库连接池实现原理


如果想实现一个连接池,本质的思想就是实现一个 Connection 的对象数组,但是这个对象数组并不是无限开辟的,是有上限存在的,所以最初的数据库手工连接池的实现可以采用 Map 集合完成。

 

也就是说在进行处理的时候 Map 集合里面保存有全部连接池的可用连接(最小维持数、最大可打开数、最大等待时间)

 

实现思路:

1. 所有的连接对象被 Map 集合所管理,但是这个 Map 集合受到最大连接数的控制,也就是说如果现在需要获取数据库连接,但是发现已经没有可用的连接了,则这个时候应该开辟新的连接,但是同时需要保证连接池中是有上限的;

 

2. 在获取连接的时候如果发现连接已经满了,则这个时候应该追加有一个等待唤醒的控制,也就是说对于连接池的控制,如果发现没有连接,则等待新的连接到来,就可以采用线程的等待与唤醒机制来完成;

 

3. 连接池中的连接使用完成之后一定要关闭,但是这个的关闭并不是彻底的关闭数据库的连接,而是说将这个连接的可用性重新放回到连接池之中,也就是说为连接池里面设置一个标记(标记为 true,那么就表示该连接可用,如果没有 true 的连接了,那么就表示连接池满了,而当把连接放回去之后将这个标记设置为 false,就表示有空余连接了);

 

4. 如果现在要去考虑连接池的实现,最好的做法是使用 ConcurrentHashMap 子类来性,这个类考虑到了并发性,并且也可以有很好的同步处理效果。

相关文章
|
3月前
|
算法 关系型数据库 MySQL
【MySQL 解析】数据库的乐观锁和悲观锁实现原理
【1月更文挑战第11天】【MySQL 解析】数据库的乐观锁和悲观锁实现原理
|
3月前
|
存储 关系型数据库 MySQL
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
45 0
|
3月前
|
关系型数据库 MySQL 数据库
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
49 0
|
3月前
|
NoSQL 中间件 API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(下)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
80 2
|
3月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(上)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
71 0
|
1月前
|
缓存 Java 数据库连接
mybatis 数据库缓存的原理
MyBatis 是一个流行的 Java 持久层框架,它封装了 JDBC,使数据库交互变得更简单、直观。MyBatis 支持两级缓存:一级缓存(Local Cache)和二级缓存(Global Cache),通过这两级缓存可以有效地减少数据库的访问次数,提高应用性能。
282 1
|
2月前
|
缓存 NoSQL 关系型数据库
数据库缓存一致性学习笔记(一)
数据库缓存一致性学习笔记(一)
|
2月前
|
存储 关系型数据库 数据库
数据库索引的原理,为什么要用 B+树,为什么不用二叉树?
数据库索引的原理,为什么要用 B+树,为什么不用二叉树?
|
2月前
|
开发框架 安全 .NET
某教程学习笔记(一):07、数据库漏洞(access注入)
某教程学习笔记(一):07、数据库漏洞(access注入)
18 0
|
2月前
|
XML SQL 安全
某教程学习笔记(一):08、MSSQL数据库漏洞
某教程学习笔记(一):08、MSSQL数据库漏洞
17 0

热门文章

最新文章