thinkphp 3.2分布式資料庫讀寫分離擴充閱讀
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 指定某個伺服器進行讀操作。
調用模型的curd操作的話,系統會自動判斷目前執行的方法的讀操作還是寫操作,如果你用的是原生sql,那麼需要注意系統的預設規則: 寫操作必須用模型的execute方法,讀操作必須用模型的query方法,否則會發生主從讀寫錯亂的情況。
注意:主從資料庫的資料同步工作不在架構實作,需要資料庫考慮自身的同步或者複制機制。