当前位置: 首页 > 工具软件 > DBPool > 使用案例 >

数据库连接池DBPool分析(一):简介

仲阳朔
2023-12-01

刚刚毕业的本科生,在研究了公司的框架之后,自己花了三天的时间用C++实现了简单的数据库连接池,包括了Mysql。正在加入Redis的支持。请访问我的github:https://github.com/adairjun/DBPool

概述

所谓池的概念,就是一次性向系统申请多个资源并保存下来,等到程序需要向系统申请资源的时候,就直接向池当中去申请。相当于在执行程序和系统资源之间加了一层。
有高人云:“计算机科学领域的任何问题, 都可以通过添加一个中间层来解决”
那么这个池作为中间层解决了什么问题呢?


1,性能的提升:数据库连接是一种极耗系统资源的操作,尤其是在多层结构的应用环境中,这种资源的耗费对系统性能影响尤为明显。我实习的时候,部门经理告诉我,框架性能的压力大部分集中在数据库的IO上,这是在他review我的代码的时候说的,当时我写的数据库接口访问Mysql,本来可以一条SELECT语句查询出结果,再使用循环将结果写入到vector当中,但是我却是在循环当中使用了SELECT语句,导致了多次查询。经理告诉我相同功能的查询语句,由于打开关闭数据库连接的次数不同导致两个查询语句耗费的时间差别很大。

2,内存碎片(memory fragmentation)的问题,这个是对于内存池来说的。

3,线程池,减少线程创建的开销,而且在请求到达时候线程已经存在了,所以无意中也消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使应用程序响应更快。

用到的库

1,libmysqlclient-dev mysql的API
2,hiredis redis的API 需要在github上下载:https://github.com/redis/hiredis
3,boost 准标准库
4,gtest google的测试框架:https://github.com/google/googletest

使用DBPool的configure.sh这个脚本可以快速安装需要的库:
这个脚本当中的rootness()这个函数借鉴了lamp的配置脚本:


#!/bin/bash

# Make sure only root can run our script
function rootness()
{
    if [[ $EUID -ne 0 ]]; then
       echo "Error:This script must be run as root!" 1>&2
       exit 1
    fi
}

function install_gtest()
{
    wget https://codeload.github.com/google/googletest/tar.gz/release-1.7.0 
    tar -zxvf googletest-release-1.7.0.tar.gz
    cd googletest-release-1.7.0/
    g++ -isystem ./include -I. -pthread -c ./src/gtest-all.cc               
    ar -rv libgtest.a gtest-all.o
    cp -r ./include/gtest/ /usr/local/include
    cp ./libgtest.a /usr/local/lib
    cd ..
    rm -rf googletest-release-1.7.0.tar.gz/ 
}

function install_hiredis()
{
    wget https://codeload.github.com/redis/hiredis/tar.gz/v0.13.3
    tar -zxvf hiredis-0.13.3.tar.gz 
    cd hiredis-0.13.3/
    make 
    make install    
}

rootness

if [ ! `whereis yum | gawk '{print $2}'` = "" ]
then
    echo -ne "\033[32m"; echo "*************start install mysql and boost********"; echo -ne "\033[0m"
    yum -y install mysql-server
    yum -y install redis
    yum -y install mysql-devel
    yum -y install mysql-libs
    yum -y install boost boost-devel boost-doc
fi

if [ ! `whereis apt-get | gawk '{print $2}'` = "" ]
then
    echo -ne "\033[32m"; echo "*************start install mysql and boost********"; echo -ne "\033[0m"
    apt-get -y install mysql-server
    apt-get -y install redis-server
    apt-get -y install libmysqlclient-dev
    apt-get -y install libmysqld-dev
    apt-get -y install libboost-dev
fi

install_gtest
install_hiredis

原文链接:http://blog.csdn.net/u014120684/article/details/48753997

 类似资料: