データベース接続プールDBPool分析(一):概要


卒業したばかりの本科生は、会社の枠組みを研究した後、自分で3日間C++で簡単なデータベース接続プールを実現し、Mysqlを含む.Redisのサポートに参加しています.私のgithubにアクセスしてください:https://github.com/adairjun/DBPool
概要
プールの概念とは,一度に複数のリソースをシステムに申請して保存し,プログラムがシステムにリソースを申請する必要があるときに直接プールに申請することである.実行プログラムとシステムリソースの間に階層を追加することに相当します.「コンピュータ科学分野のいかなる問題も、中間層を追加することで解決できる」という高人の雲があるが、このプールは中間層としてどのような問題を解決したのだろうか.
1、性能の向上:データベース接続はシステム資源を消費する操作であり、特に多層構造の応用環境では、このような資源の消費がシステム性能に与える影響は特に明らかである.私が実习した时、部门のマネージャーは私に教えて、フレームワークの性能の圧力の大部分はデータベースのIOの上で集中して、これは彼が私のコードをreviewする时言ったので、その时私が书いたデータベースのインタフェースはMysqlにアクセスして、もともと1本のSELECT文で结果を検索することができて、更にサイクルを使って结果をvectorの中に书いて、しかし私はサイクルの中でSELECT文を使って、複数回のクエリが発生しました.マネージャは、同じ機能のクエリー文を教えてくれました.データベース接続を閉じる回数によって、2つのクエリー文にかかる時間の差が大きくなります.
2,メモリフラグメント(memory fragmentation)の問題です.これはメモリプールにとってです.
3,スレッドプールは,スレッド作成のオーバーヘッドを低減し,リクエストが到着するとスレッドが既に存在するため,スレッド作成による遅延も無意識に解消される.これにより、アプリケーションの応答がより速くなるように、リクエスト・サービスをすぐに実行できます.
使用するライブラリ
1,libmysqlclient-dev mysqlのAPI 2,hiredis redisのAPIはgithubでダウンロードする必要があります:https://github.com/redis/hiredis3,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

本文はブロガーのオリジナル文章で、ブロガーの許可を得ずに転載してはならない.