博客数据被清空,再发一次
一,前言: 看这篇文章之前,如果你从未接触过连接池的话,建议你先看【这篇文章】,和本文类似;看完之后或许对你有所帮助。
二,相关知识:
1.什么是数据库连接池? 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
2.实现原理 连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
3.Pymysql模块 PyMySQL是一个Python编写的MySQL驱动程序,让我们可以用Python语言操作MySQL数据库。 安装方法:```python pip install PyMySQL
| |
调用Pymysql_pool.py源码:
| |
单例连接实现源码:
| |
四,性能比较:
实现上面我分享的代码进行性能比较,环境是我个人PC,mysql数据库由phpstudy套件安装,未作任何优化或者其它配置修改。
比较方法:以不同线程数(模拟高并发)插入不同数据量所消耗的时间作为比较参考,下面直接给出最后的比较结果。
如图:
Ps:插入的数据库只有一张USER表;而上面的测试结果只是个人PC所测,每人PC性能各异,上面的数据只能仅供参考。
数据库结构:
| |
五,结语 在小数据量和小并发情况下,连接池和单例连接性能差异并不大,但在高并发的情况下,连接池的优势就显而易见了,性能完胜单例十倍有余。 当然,没有最好的解决方案,只有根据应用场景的不同而选择合适的方法才是最佳方案。
针对这个实现的连接池,其实还有很多可优化的地方,功能只实现了基本增删改查,后面如若需要再添加吧。 性能测试.xlsx
