1. 程式人生 > >thinkphp 3.2.3 分散式資料庫支援

thinkphp 3.2.3 分散式資料庫支援

ThinkPHP內建了分散式資料庫的支援,包括主從式資料庫的讀寫分離,但是分散式資料庫必須是相同的資料庫型別。

配置DB_DEPLOY_TYPE 為1 可以採用分散式資料庫支援。如果採用分散式資料庫,定義資料庫配置資訊的方式如下:

//分散式資料庫配置定義
'DB_DEPLOY_TYPE'=> 1, // 設定分散式資料庫支援
'DB_TYPE'       => 'mysql', //分散式資料庫型別必須相同
'DB_HOST'       => '192.168.0.1,192.168.0.2',
'DB_NAME'       => 'thinkphp', //如果相同可以不用定義多個
'DB_USER' => 'user1,user2', 'DB_PWD' => 'pwd1,pwd2', 'DB_PORT' => '3306', 'DB_PREFIX' => 'think_',

連線的資料庫個數取決於DB_HOST定義的數量,所以即使是兩個相同的IP也需要重複定義,但是其他的引數如果存在相同的可以不用重複定義,例如:

'DB_PORT'=>'3306,3306'

'DB_PORT'=>'3306'

等效。

'DB_USER'=>'user1', 
'DB_PWD'=>'pwd1'
,

'DB_USER'=>'user1,user1', 
'DB_PWD'=>'pwd1,pwd1',

等效。

還可以設定分散式資料庫的讀寫是否分離,預設的情況下讀寫不分離,也就是每臺伺服器都可以進行讀寫操作,對於主從式資料庫而言,需要設定讀寫分離,通過下面的設定就可以:

'DB_RW_SEPARATE'=>true,

在讀寫分離的情況下,預設第一個資料庫配置是主伺服器的配置資訊,負責寫入資料,如果設定了DB_MASTER_NUM引數,則可以支援多個主伺服器寫入。其它的都是從資料庫的配置資訊,負責讀取資料,數量不限制。每次連線從伺服器並且進行讀取操作的時候,系統會隨機進行在從伺服器中選擇。

還可以設定DB_SLAVE_NO 指定某個伺服器進行讀操作。

注意:3.2.3版本開始,如果從資料庫連線錯誤,會自動切換到主資料庫連線。

呼叫模型的CURD操作的話,系統會自動判斷當前執行的方法的讀操作還是寫操作,如果你用的是原生SQL,那麼需要注意系統的預設規則: 寫操作必須用模型的execute方法,讀操作必須用模型的query方法,否則會發生主從讀寫錯亂的情況。

注意:主從資料庫的資料同步工作不在框架實現,需要資料庫考慮自身的同步或者複製機制。