1

マスターデータベースとスレーブデータベースがあります。負荷の一部を分散するために、すべてのINSERT / UPDATEクエリをマスターに送信し、すべてのSELECTクエリをスレーブに送信する必要があります(スレーブを台無しにせずに書き込むことはできないため)。database.phpでデータベースを定義しています。これが私が切り替えをしようとしている方法です:

AppModel.php beforeFind()内で、次のように設定しています。

$this->useDBConfig = 'readOnly';

beforeSave()内で、次のように設定しています。

$this->useDBConfig = 'writeOnly';

ただし、詳しく調べてみると、useDBConfigがモデルとデータベースの1対1の関係であるかどうか疑問に思っています。つまり、useDBConfigは、単一のモデルを単一のデータベースにポイントするためだけのものである可能性があります。これは、私が期待するように常に機能するとは限らないためです。INSERT / UPDATEは、readOnly権限を持つreadOnlyで実行しようとして、失敗する場合があります。

この場合、CakePHPアプリケーションを変更して、適切なデータベースにリクエストを送信するにはどうすればよいですか?これを別の方法で行う必要がありますか?

4

1 に答える 1

1

基本的に、AppModelのすべてのsaveメソッド(save、saveField、saveAssociated、saveAll、UpdateAll、delete、deleteAllなど)をオーバーライドし、2つのsetDatasource呼び出しの間に親呼び出しをカプセル化します。

于 2012-08-31T19:41:28.357 に答える