質問: 個人的に進めている案件なんですが、アドバイスいただける方いましたら教えてくださいませ。 mater/slave構成とFWをどう依存させるかについて悩んでます。 勉強がてら、依頼入ったら要件さえがっちりまとまってれば、すぐ作れるように雛形作ってるんですよ。 PHPのFWでmaster/slave構成で、参照以外はmasterに行きますよね。 そのmsterDBへの操作をslaveDBへそのままコピーさせたいのがそもそもの要件です。 例えば、FuelPHPのOrmAuthを使ってコマンドで以下を実行すればormauth.phpで持っているdb_write_connectionに指定しているdb.phpのkeyを基に、Authが必要なテーブルを生成します。 `$ oil r migrate --packages=auth` genarate コマンドでもテーブル生成はありますが、Authに限定していうと、fuel/packages/auth/migrations配下の各classで `in_array('Ormauth', $drivers)` という処理があるのですが、そこで `$this->dbconnection('ormauth');` をやっているので、ここでアクセス対象のDBkeyをどうにかしてキャッチしてmasterとslave、2回ループさせれば結果的にmasterに生成するものをslaveにも生成できると思ったのですが、これはテーブル生成に限定された解決法になってしまいます。 データのCUDもしたいのでこれでは解決策とは言えません。 それに、これらはcomposerによって生成されるファイル群なので、composer updateとかすると上書きされるのでやはり解決策には至らず。 少なくとも以下の操作は全てslaveにも同期させないとFWが持っているmaster/slaveの機能が働かないからです。 ・テーブル作成 ・テーブル削除 ・テーブルスキーマ更新 ・テーブル.データの追加 ・テーブル.データの更新 ・テーブル.データの削除 masterに反映されるものをslaveに同期させたい、と文章で言えば簡単なんですが、そもそもFWで解決しようとするからダメなんですかね。。。 DBに弱いのでできるかわからないし、イメージでしかないけど、DBにトリガー的なものがあればそこで処理をさせるようなことができるのであれば、そういうやり方が一般的なんですかね。。。 dump取って、SQL実行とかはちょっと、、、 手動ではしなくない派です。 仮に手動でしたとしてもテーブルは問題ないかもしれません。 実際にアプリ側でユーザー登録するケースを考えてみると、masterには登録されるがslaveには登録されないので、参照系でいくらユーザーを指定しても存在しないことになるはずです。 なので、そもそもの話として、やはりトリガー的な機能があればそういった形でmaster/slave作るしかないように思います。。。
回答: > > mater/slave構成とFWをどう依存させるかについて悩んでます。 > > > 普通に考えれば、mater/slaveの同期は**データベースサーバの側で**考えるべきことで、PHPから制御することではないと考えます。 たとえば、「マスターだけ書き込んでそこで回線が切れてしまった」というような場合まで正しくハンドリングしようとすれば、極めて煩雑になります。