データベース接続プールDBPool分析(一):概要
3710 ワード
卒業したばかりの本科生は、会社の枠組みを研究した後、自分で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の構成スクリプトを参考にしています.
本文はブロガーのオリジナル文章で、ブロガーの許可を得ずに転載してはならない.
概要
プールの概念とは,一度に複数のリソースをシステムに申請して保存し,プログラムがシステムにリソースを申請する必要があるときに直接プールに申請することである.実行プログラムとシステムリソースの間に階層を追加することに相当します.「コンピュータ科学分野のいかなる問題も、中間層を追加することで解決できる」という高人の雲があるが、このプールは中間層としてどのような問題を解決したのだろうか.
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
本文はブロガーのオリジナル文章で、ブロガーの許可を得ずに転載してはならない.