python数据库连接池设计
- 一.背景:
传统访问资源,一般分为一下几个步骤:
1.实例数据驱动对象与链接资源。2.实例操作资源游标。3.获取资源。4.关闭链接资源。
根据以上步骤,我们可以很简单使用这个原始方法来访问资源为我们业务逻辑所用。但是对于批量操作与频繁访问资源时,那么效率问题与系统压力将会严重影响我们的业务。可能没有什么概念,举个例子:你的业务需要访问数据库,当1个人操作时没有问题,5个人、10个人可能也没有问题,当是几百、上千去访问时,系统开销会什么样子呢?再如:访问数据库有几百个sql,上千个sql,每次都要重复1、2、4操作,系统开销是什么样子、产品效率问题什么情况?可想而知了【注:1、2两个步骤每次操作耗时在1s左右】
因此,有了 [缓冲池] 优化方案的提出。缓冲池个人理解是:能够动态管理数据库链接实例创建、使用与释放,让池内所有资源链接得到最大化使用。对于它的原理可以去深入了解。
- 二.使用python实现数据库缓冲池
数据库缓冲池,有这样一个图感觉很形象:
我们将比较耗时、系统开销大的步骤放在缓冲池。数据库链通过线程池来实现,也就是说在底层通过多线程创建了一个线程池,然后每个线程实现了一套数据库链接访问渠道。举个例子:数据库假如是一杯水,数据库缓冲池设置了10个线程链接实例比成10个吸管,那么想喝水你就要实例化这个线程池,然后可以选择任何一个或者多个吸管来喝水。而且这10个吸管是相互独立的。当然了你不用去关心这些共享吸管的安全性问题,很多第三方控件都已经多了很好的处理,如下:poolDB框架原理

下面介绍一个python版本的实例:
使用第三方模块DBUtils.PoolDB,url:https://pypi.python.org/pypi/DBUtils
原理、使用方法与api等链接页面介绍的很清楚,其中这里说明几个参数:

代码实例如下:https://github.com/xnchall/dbPool/blob/master/dbPool.py
重要提示:由于数据库连接池除了一些特殊业务以外使用私有链接,其余大多都是共享链接。因此在使用时要根据自己的业务规模与使用频率设置连接池的参数。测试发现,设置
mincached=X,maxcached=X,maxshared=X,maxconnections=X这些连接池属性参数时耗费的时间与X大小存在线性关系的,共享连接数在百级的创建连接池耗时在2.5s左右。
python数据库连接池设计的更多相关文章
- python数据库连接池
python数据库连接池 import psycopg2 import psycopg2.pool dbpool=psycopg2.pool.PersistentConnectionPool(1,1, ...
- Python数据库连接池DBUtils.PooledDB
DBUtils 是一套用于管理数据库连接池的包,为高频度高并发的数据库访问提供更好的性能,可以自动管理连接对象的创建和释放.最常用的两个外部接口是 PersistentDB 和 PooledDB,前者 ...
- Python数据库连接池---DBUtils
Python数据库连接池DBUtils DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不 ...
- Python数据库连接池DBUtils
Python数据库连接池DBUtils DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不 ...
- python数据库连接池基于DBUtils
DBUtils模块的使用的两种方式 DBUtils是Python的一个用于实现数据库连接池的模块 安装 pip install DBUtils 1.使用姿势一(不建议此方法) 为每个线程 (资源占用过 ...
- Python 数据库连接池
python编程中可以使用pymysql进行数据库连接及增删改查操作,但每次连接mysql请求时,都是独立的去请求访问,比较浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响.因 ...
- 【转】Python 数据库连接池
python编程中可以使用pymysql进行数据库连接及增删改查操作,但每次连接mysql请求时,都是独立的去请求访问,比较浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响.因 ...
- Python 数据库连接池DButils
常规的数据库链接存在的问题: 场景一: 缺点:每次请求反复创建数据库连接,连接数太多 import pymysql def index(): conn = pymysql.connect() curs ...
- Python数据库连接池DBUtils(基于pymysql模块连接数据库)
安装 pip3 install DBUtils DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: # BDUtils数据库链接池: 模式一:基于threaing ...
随机推荐
- angular4升级angular5问题记录之No NgModule metadata found for 'AppModule'
在将项目从angular4升级到angular5的过程中,出现No NgModule metadata found for 'AppModule'问题,网上查找答案将app.module.ts进行再次 ...
- UVA - 10048 Audiophobia Floyd
思路:套用Floyd算法思想,d(i, j) = min(d(i,j), max(d(i,k), d(k,j)),就能很方便求得任意两点之间的最小噪音路径. AC代码 #include <cst ...
- Redis 设置开机启动
1. 将下列代码保存为文件redis, 置于 /etc/init.d 下面 ########################### # chkconfig: 2345 90 10 redis服务必须在 ...
- C语言老司机学Python (六)- 多线程
前面的1-5都是比较基础的东西,能做的事情也有限. 从本节起,随着更多进阶技术的掌握,渐渐就可以用Python开始浪了. Python3使用threading模块来实现线程操作. 根据在其他语言处学来 ...
- HI3531串口测试程序(arm)
#include<stdio.h> unsigned int UART0_ADDR = 0x20080000; unsigned int retu=0; int i=0; void del ...
- 项目部署到Tomcat报错
1.今天晚上,我想把dojo项目部署到Tomcat中,结果发现部署不了,Tomcat报错.而且,这个错误白天时也碰到了. 错误具体详细如下: Publishing failed with multip ...
- 嵌入式linux------SDL移植(am335x下显示bmp图片)
#include<stdio.h> #include "/usr/local/ffmpeg_arm/include/SDL/SDL.h" char *bmp_name[ ...
- Educational Codeforces Round 36 (Rated for Div. 2) E. Physical Education Lessons
提供两种思路 一种线段树区间更新 另一种用map维护连续的区间,也是题解的思路 第二种很难写(我太渣,看了别人的代码,发现自己写的太烦了) #include<iostream> #incl ...
- iOS - Core Animation 核心动画
1.UIView 动画 具体讲解见 iOS - UIView 动画 2.UIImageView 动画 具体讲解见 iOS - UIImageView 动画 3.CADisplayLink 定时器 具体 ...
- HttpServletRequest对象
一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...