質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

データベーススペシャリスト

データベーススペシャリスト試験 (DB)は、IPA 独立行政法人 情報処理推進機構の実施している国家資格です。

Q&A

解決済

2回答

545閲覧

DB FWでmaster/slaveをどう実現するか

earnest_gay

総合スコア615

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

データベーススペシャリスト

データベーススペシャリスト試験 (DB)は、IPA 独立行政法人 情報処理推進機構の実施している国家資格です。

0グッド

0クリップ

投稿2018/03/25 18:06

個人的に進めている案件なんですが、アドバイスいただける方いましたら教えてくださいませ。

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作るしかないように思います。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

mater/slave構成とFWをどう依存させるかについて悩んでます。

普通に考えれば、mater/slaveの同期はデータベースサーバの側で考えるべきことで、PHPから制御することではないと考えます。

たとえば、「マスターだけ書き込んでそこで回線が切れてしまった」というような場合まで正しくハンドリングしようとすれば、極めて煩雑になります。

投稿2018/03/25 22:30

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2018/03/26 15:59

ありがとうございます。 >たとえば、「マスターだけ書き込んでそこで回線が切れてしまった」というような場合まで正しくハンドリングしようとすれば、極めて煩雑になります。 こちらですが、接続が切れた場合を考慮してそこはトランザクションでカバーするという意図での回答でしょうか。
guest

0

FWが何なのか不明ですし、あまり詳しくはないのですが、見つけた記事を紹介しておきます。

PDOにてMaster&Slaveのコネクションを操作するクラス(PHP)

投稿2018/03/26 02:55

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2018/03/26 03:18

ありがとうございます。 FuelPHPです。
sazi

2018/03/26 03:20

あ、書いてありましたね、すいません。 PHPには詳しくないので、期待はなさらないで下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問