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 ...
随机推荐
- Json对象与Json字符串互转(4种转换方式)(转)
1>jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2> ...
- 安装 LightGBM 包的过程
conda install cmake conda install gcc git clone --recursive https://github.com/Microsoft/LightGBM ; ...
- textarea只允许上下调节尺寸
对于extarea,因为如果不做限制的话,它是可以自由调节尺寸的,对于这一点我相信用户是非常喜欢的,因为每个人都有自己认为合适的尺寸,但是对于前端来说就比较头疼了,因为随意调节宽高,就会破坏整体布局, ...
- onCreate源码分析
原文地址Android面试题-onCreate源码都没看过,怎好意思说自己做android Activity扮演了一个界面展示的角色,堪称四大组件之首,onCreate是Activity的执行入口,都 ...
- WeakHashMap回收时机结合JVM 虚拟机GC的一些理解
一直很想知道WeakHashMap的使用场景,想来想去只能用在高速缓存中,而且缓存的数据还不是特别重要,因为key(key不存在被引用的时候)随时会被回收 所以研究了一下WeakHashMap的回收时 ...
- sqoop:mysql和Hbase/Hive/Hdfs之间相互导入数据
1.安装sqoop 请参考http://www.cnblogs.com/Richardzhu/p/3322635.html 增加了SQOOP_HOME相关环境变量:source ~/.bashrc ...
- C语言结构体定义的几种方法
什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...
- 2015最全iOS开发自学视频资料(基础+实战)
最全的iOS自学视频,包括c,objective-c,UI等等,没有你找不到的,只有你学不会的,只要你想学,这里都有你所需要的. 推荐教程点这里:http://www.mobiletrain.org/ ...
- R︱shiny实现交互式界面布置与搭建(案例讲解+学习笔记)
要学的东西太多,无笔记不能学~~ 欢迎关注公众号,一起分享学习笔记,记录每一颗"贝壳"~ --------------------------- 看了看往期的博客,这个话题竟然是第 ...
- STM32F4 串口实验中收不到超级终端发送的数据,调试工具却可以
我用串口精灵发送数据没有问题,但是接收数据没反应. 串口接受的时候必须要用中断的,你发送只靠单一的标志位是可以判断的,但是接受的时候,你是一直停留在while里面,我们判断接受是否完成,通过检测是否收 ...