私はCodeigniter(2.0.2)アプリケーションを開発しています。このアプリケーションは、すべての書き込み操作(INSERT / UPDATE / DELETE)にマスターデータベースを利用し、すべての読み取り操作(SELECT)にリードレプリカを利用します。
これで、コード内の2つの異なるデータベースオブジェクトにアクセスして、個々のリクエストを特定のデータベースサーバーにルーティングできることがわかりましたが、より良い方法、自動化された方法があると思います。MySQLとActiveRecordを使用し、Memcacheチェックも組み込みたいと思います。すぐには使用されませんが、この段階で組み込まれる将来のオプションが必要です。
$ this-> db-> queryをインターセプトするために、ある種のフック/ライブラリを追加して、次のようにすることが可能かどうかを考えています。
1)受信したSQLクエリ
2)SELECTクエリかどうかを確認します
2a)SELECTの場合は、Memcacheがアクティブかどうかを確認します。アクティブな場合は、SQLをエンコードし、Memcacheの応答を確認します。
2b)memcache応答がない場合、またはMemcacheがアクティブでない場合は、READMySQLサーバーを介して通常どおりクエリを実行します。
3)クエリが選択されなかったため、WRITEMySQLサーバーを介して通常どおりクエリを実行します。
4)応答を返します。
これを見ると、それは非常に簡単なはずですが、どのように見ても、潜在的な答えは見当たらないだけです。しかし、答えは1つでなければなりません。誰かが助け/支援できますか?
さらに、トラブルシューティングのためにすべてのSQL書き込みコマンドをログに記録できるようにする機能も必要です。おそらく最善の方法は、3a)SQLコマンドをプレーンテキストファイルに書き込む...上記のスキームに導入することです。とにかく、MySQLが実際に非SELECTクエリをログに記録するとは思わない...そうですか?