数据库连接池DBPool分析(一):简介
2019獨角獸企業重金招聘Python工程師標準>>>
剛剛畢業的本科生,在研究了公司的框架之后,自己花了三天的時間用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 ]]; thenecho "Error:This script must be run as root!" 1>&2exit 1fi }function install_gtest() {wget https://codeload.github.com/google/googletest/tar.gz/release-1.7.0 tar -zxvf googletest-release-1.7.0.tar.gzcd googletest-release-1.7.0/g++ -isystem ./include -I. -pthread -c ./src/gtest-all.cc ar -rv libgtest.a gtest-all.ocp -r ./include/gtest/ /usr/local/includecp ./libgtest.a /usr/local/libcd ..rm -rf googletest-release-1.7.0.tar.gz/ }function install_hiredis() {wget https://codeload.github.com/redis/hiredis/tar.gz/v0.13.3tar -zxvf hiredis-0.13.3.tar.gz cd hiredis-0.13.3/make make install }rootnessif [ ! `whereis yum | gawk '{print $2}'` = "" ] thenecho -ne "\033[32m"; echo "*************start install mysql and boost********"; echo -ne "\033[0m"yum -y install mysql-serveryum -y install redisyum -y install mysql-develyum -y install mysql-libsyum -y install boost boost-devel boost-doc fiif [ ! `whereis apt-get | gawk '{print $2}'` = "" ] thenecho -ne "\033[32m"; echo "*************start install mysql and boost********"; echo -ne "\033[0m"apt-get -y install mysql-serverapt-get -y install redis-serverapt-get -y install libmysqlclient-devapt-get -y install libmysqld-devapt-get -y install libboost-dev fiinstall_gtest install_hiredis
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
轉載于:https://my.oschina.net/adairjun/blog/511560
總結
以上是生活随笔為你收集整理的数据库连接池DBPool分析(一):简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java虚拟机7:内存分配原则
- 下一篇: DS-5/RVDS4.0变量初始化错误