• 一.背景:

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

  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. 【学习笔记】Spring JdbcTemplate (3-3-3)

    Spring与JDBC模板(jdbcTemplate) 为了避免直接使用JDBC而带来的复杂冗长的代码 Spring提供的一个强有力的模板类 -- jdbcTemplate简化JDBC操作 并且数据源 ...

  2. 简单模拟一下ab压力测试

    简单了解下ab ab全程是apache benchmark,是apache官方推出的一个工具,创建多个并发访问线程,模拟多个访问者同时对一个URL地址进行访问.它的测试目标是基于URL的,因此它既可以 ...

  3. AssetBundle实现服务器下载并从本地读取

    废话不多说  直接上代码. 从服务器下载的, 很简单 private IEnumerator Start() { byte[] ab = null; int len = 0; WWW www =nul ...

  4. 计蒜客的一道题dfs

    这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...

  5. kolla管理openstack容器

    本文以nova-api容器为例,说明kolla如何将nova-api配置文件传入容器,容器如何启动nova-api服务并读取配置文件 注:第一部分比较无趣,二三部分 会有意思一些 1. nova-ap ...

  6. Http协议规范及格式

    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616.HTTP协议采用了请求/响应模型.客户 ...

  7. 使用java实现阿里云消息队列简单封装

    一.前言 最近公司有使用阿里云消息队列的需求,为了更加方便使用,本人用了几天时间将消息队列封装成api调用方式以方便内部系统的调用,现在已经完成,特此记录其中过程和使用到的相关技术,与君共勉. 现在阿 ...

  8. Linux SendMail发送邮件失败诊断案例(四)

    最近又碰到一起Linux下SendMail发送邮件失败的案例,邮件发送后,邮箱收不到具体邮件, 查看日志/var/log/maillog 发现有"DSN: User unknown" ...

  9. V4L2驱动的移植与应用(一)

    V4L2(video for linux) 可以支持多种设备,它可以有以下5种接口: 1.视频采集接口(video capture interface):这种应用的设备可以是高频头或者摄像头.V4L2 ...

  10. SQL注入攻击三部曲之入门篇

    SQL注入攻击三部曲之入门篇 服务器安全管理员和攻击者的战争仿佛永远没有停止的时候,针对国内网站的ASP架构的SQL注入攻击又开始大行其道.本篇文章通过SQL注入攻击原理引出SQL注入攻击的实施方法, ...