数据库连接池
为了解决共享资源的频繁分配、释放的一些问题,有一个著名的设计模式:资源池。 将该模式应用到数据库连接管理领域,就是建立一个数据库连接池。
数据库连接池
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个,这样可以使得一个数据库连接可以得到高效、安全的复用,避免了数据库频繁建立、关闭的开销,极大的节省了系统资源和时间。
原理
数据库连接池的基本原理是: 在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。一旦数据库连接建立后,不同的数据库访问请求就可以共享复用这些连接。
外部使用者可以通过 getConnection 方法从连接池中获取数据库连接,使用完毕后通过 releaseConnection 方法将连接返回池子,但此时连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。
优势
- 资源重用
- 更快的系统响应速度: 数据库连接池在初始化时,就已经创建了若干数据库连接置于池中备用,请求访问可以直接使用。
- 新的资源分配手段
- 统一的连接管理,避免数据库连接泄漏: 在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规数据库连接操作中可能出现的资源泄漏。
python 数据库连接池
DBUtils
python 中可以用 pymysql、MySQLdb 等进行数据库连接和增删查改操作,但每次请求连接 mysql 时,都是独立的请求访问,比较浪费资源,当请求达到一定数量时,对 mysql 的性能会产生较大影响,因此在 python 中可以使用数据库连接池包 DBUtils 来访问 mysql,从而达到资源复用的目的。
DBUtils 提供两种外部接口:
- PersistentDB:用于单线程,提供线程专用的数据库连接,并自动管理连接。
- PooledDB: 用于多线程,提供线程间可共享的数据库连接,并自动管理连接。
实例
1 | import pymysql |