PHP串連池的問題____PHP

來源:互聯網
上載者:User
PHP串連池的問題 & 負載平衡 PHP串連池的問題 :
php 指令碼本身的確是不能做串連池的,因為php指令碼在解釋執行完畢後會釋放所有記憶體資源,當然其中用到的資料庫連接也會被釋放,但一些中介軟體也是可以做為串連 池的,只要提供php的相關驅動,所以可以自己做php的串連池,但是絕對作不了100% pure php的串連池。mysql_pconnect是php內建的一個類比串連池,但這套機制不是用php指令碼實現的。  但是一次請求可以複用連結,減少new帶來的消耗。單列模式 <?php        class ConnecToDB        {              private static $instance=array();            //防止外部建立新的資料庫連接類            private function _constuct(){}            static public function Connect()            {                    //串連類不夠100,建立新類                if(count(self::$instance)<100)                {                    $newDb=new self();                    self::$instance[]=$newDb;                    return $newDb::ConDB();                }                else                {                        //隨機數保證資料庫連接均衡                    $i=rand(0,99);                    $new_obj=self::$instance[$i];                    return $new_obj::ConDB();                }            }            static private function ConDB()            {                try                {                    $connec=mysql_connect("127.0.0.1","資料庫賬戶","資料庫密碼");                    mysql_select_db("資料庫名");//選擇資料庫                       }                catch(Exception $e)                {                    $errors[]=$e->getMessage();                  } }              

串連池的作用主要是節省開啟資料庫的時間。串連池機制預先開啟N個資料庫連接,把它們緩衝起來,當需要使用資料庫的時候就直接使用這些已經開啟的串連,從而節省了時間。串連池的存在基本上消除了資料庫連接斷開的時間與cpu開銷。 
串連池解決方案:
1、pconnect(持久串連):pconnect的原理,和串連池差不多的,都是程式關閉串連,但PHP並不真正關閉,再次開啟時,直接使用可用的串連。
如果因為訪問量太大出現Mysql應該配置 Mysql 資料庫服務的my.cnf 裡的 max_connection 的值,如max_connections = 2000。
2、mysql proxy。
3、memcache:針對mysql的一個資料庫緩衝實現。
4、SQL Relay:一個開源的資料庫池串連Proxy 伺服器。支援Oracle、MySQL、mSQL、PostgreSQL、Sybase、MS SQL Server、IBM DB2、Sybase、SQLite、Lago、 ODBC、MS Access等。
安裝與配置[SQL SERVER](http://blog.sina.com.cn/s/blog_4dd475390100hbck.html),安裝SQL Relay需要先安裝Rudiments:
1、安裝Rudiments:
# tar vxzf rudiments-0.28.2.tar.gz
# cd rudiments-0.28.2
# ./configure --prefix=/usr/local/rudiments
# make
# make install
2、安裝SQL Relay:
# tar vxzf sqlrelay-0.36.4.tar.gz
# cd sqlrelay-0.36.4
# ./configure --prefix=/usr/local/sqlrelay --with-rudiments-prefix=/usr/local/rudiments --with-mysql-prefix=MySQL安裝路徑 --with-freetds-prefix=FreeTDS安裝路徑 --with-oracle-home=Oracle安裝路徑 --with-php-prefix=PHP安裝路徑
# make
# make install
3、 設定PHP:修改 php.ini中extension_dir = "./",把以上內容修改為:extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20050922"。
根據PHP安裝的路徑來修改,並不是每個版本的PHP都是這個路徑,在php.ini中添加如下內容extension=sql_relay.so。
4、修改SQL Relay的設定檔
# cd /usr/local/sqlrelay/etc
# cp sqlrelay.conf.example sqlrelay.conf
把sqlrelay.conf的內容改為:
<?xml version="1.0"?>
<!DOCTYPE instances SYSTEM "sqlrelay.dtd">
<instances>
<instance id="msdetest" port="9000" socket="/tmp/msdetest.socket" dbase="freetds" connections="5" maxconnections="10" maxqueuelength="0" growby="1" ttl="60" endofsession="commit" sessiontimeout="5" runasuser="nobody" runasgroup="nobody" cursors="5" authtier="listener" handoff="pass">
<users>
<user user="sa" password="sa"/>
</users>
<connections>
<connection connectionid="msdetest" string="server=msde;db=pubs;user=sa;password=sa;" metric="1"/>
</connections>
</instance>
</instances>
啟動SQL Relay,並測試;
1、啟動 SQL Relay
# export PATH=$PATH:/usr/local/sqlrelay/bin
# sqlr-start -id msdetest
2、使用SQL工具:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.