ThinkPHP內置了分布式數據庫的支持,包括主從式數據庫的讀寫分離,但是分布式數據庫必須是相同的數據庫類型。
配置DB_DEPLOY_TYPE
為1 可以采用分布式數據庫支持。如果采用分布式數據庫,定義數據庫配置信息的方式如下:
<?php return array( 'DB_DEPLOY_TYPE' => 1, // 設置分布式數據庫支持 'DB_RW_SEPARATE' => true, // 分布式數據庫的讀寫是否分離 'DB_TYPE' => 'mysql', // 數據庫類型 'DB_HOST' => '192.168.33.110,192.168.33.111,192.168.33.112', // 數據庫服務器地址 'DB_NAME' => 'kp_account', // 數據庫名稱 'DB_USER' => 'root,root,root', // 數據庫用戶名 'DB_PWD' => '', // 數據庫密碼 'DB_PORT' => '3306,3306,3306', // 數據庫端口 'DB_PREFIX' => 'acc_', // 數據表前綴 'DB_MASTER_NUM' => 2 );
在讀寫分離的情況下,默認第一個數據庫配置是主服務器的配置信息,負責寫入數據,如果設置了DB_MASTER_NUM
參數,則可以支持多個主服務器寫入。其它的都是從數據庫的配置信息,負責讀取數據,數量不限制。每次連接從服務器並且進行讀取操作的時候,系統會隨機進行在從服務器中選擇。
還可以設置DB_SLAVE_NO
指定某個服務器進行讀操作。
小結:
TP框架內置的分布式數據庫處理,在默認的情況下,如果沒有設置DB_MASTER_NUM
參數,就會是默認第一個數據庫作為寫操作,其他是讀數據庫;如果設置了DB_MASTER_NUM
參數,例如上面的數據庫配置信息里面把DB_MASTER_NUM
參數設置為2,在沒有並發的情況下,寫操作一直會是192.168.33.111這個數據庫;有不對的地方還望多多指教!