• 一.背景:

 传统访问资源,一般分为一下几个步骤:

  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数据库连接池设计的更多相关文章

  1. python数据库连接池

    python数据库连接池 import psycopg2 import psycopg2.pool dbpool=psycopg2.pool.PersistentConnectionPool(1,1, ...

  2. Python数据库连接池DBUtils.PooledDB

    DBUtils 是一套用于管理数据库连接池的包,为高频度高并发的数据库访问提供更好的性能,可以自动管理连接对象的创建和释放.最常用的两个外部接口是 PersistentDB 和 PooledDB,前者 ...

  3. Python数据库连接池---DBUtils

    Python数据库连接池DBUtils   DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不 ...

  4. Python数据库连接池DBUtils

    Python数据库连接池DBUtils   DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不 ...

  5. python数据库连接池基于DBUtils

    DBUtils模块的使用的两种方式 DBUtils是Python的一个用于实现数据库连接池的模块 安装 pip install DBUtils 1.使用姿势一(不建议此方法) 为每个线程 (资源占用过 ...

  6. Python 数据库连接池

    python编程中可以使用pymysql进行数据库连接及增删改查操作,但每次连接mysql请求时,都是独立的去请求访问,比较浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响.因 ...

  7. 【转】Python 数据库连接池

    python编程中可以使用pymysql进行数据库连接及增删改查操作,但每次连接mysql请求时,都是独立的去请求访问,比较浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响.因 ...

  8. Python 数据库连接池DButils

    常规的数据库链接存在的问题: 场景一: 缺点:每次请求反复创建数据库连接,连接数太多 import pymysql def index(): conn = pymysql.connect() curs ...

  9. Python数据库连接池DBUtils(基于pymysql模块连接数据库)

    安装 pip3 install DBUtils DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: # BDUtils数据库链接池: 模式一:基于threaing ...

随机推荐

  1. 基于JDK1.8的ArrayList剖析

    前言 本文是基于JDK1.8的ArrayList进行分析的.本文大概从以下几个方面来分析ArrayList这个数据结构 构造方法 add方法 扩容 remove方法 (一)构造方法 /** * Con ...

  2. 机器学习之支持向量机(二):SMO算法

    注:关于支持向量机系列文章是借鉴大神的神作,加以自己的理解写成的:若对原作者有损请告知,我会及时处理.转载请标明来源. 序: 我在支持向量机系列中主要讲支持向量机的公式推导,第一部分讲到推出拉格朗日对 ...

  3. Nginx和Apache有什么区别?

    Nginx抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能. Apache  rewrite ,比nginx 的rewrite ...

  4. git一键部署代码到远程服务器(linux)(采坑总结)

    原来一直使用FileZilla来代码部署,去年使用git,代码版本管理,真TM好用,一起回顾下历程! 一. 代码部署方式及思路: 1. 使用FTP/SFTP工具,上传代码 2. git人工部署.1. ...

  5. hiboCoder 1041 国庆出游 dfs+思维

    先抽象出一棵以1做为根结点的树.给定了访问序列a[1..m]. 考虑两种特殊情况: 1.访问了某个a[j],但是存在a[i]没有访问且i < j,出现这种情况说明a[j]一定是a[i]的祖先节点 ...

  6. POJ - 2387 最短路

    思路:用dijkstra算法,是无向图. AC代码: #include <cstdio> #include <cmath> #include <cctype> #i ...

  7. python开发【第一篇】

    内容编码 python解释器在加载.py文件的时候,会对内容进行编码(默认是ascii编码). ASCII 是基于拉丁系统的一套电脑编码系统, 主要用于显示现代英语和其他西欧语言,其最多只能用8位来表 ...

  8. Swift 之属性setter、getter方法

    Swift 之属性setter.getter方法 Swift中的属性分为两种属性,一种就是计算型属性 一种就是存储型属性,开始我虽然知道这两种属性,但是了解并不深对于他的setter和getter方法 ...

  9. .net core 部署到 iis 步骤及报错解决方法

    我写了一个Asp.net core mvc项目,但是部署在iis发生了502.5的问题一直解决不了. 环境 系统:最强Win10; 工具:轻巧VS Code; 各种百度bing都没有我要的解决方案,说 ...

  10. 【java学习笔记】Properties

    Properties:可以持久化的映射,规定键和值的类型是String. Properties对象必须放到.properties文件中,其中properties文件默认为西欧编码,也因此不存储中文. ...