• ベストアンサー

サーバ負荷を考慮した処理

apache2, PHP4.1, MySQL4でECサイトを構築しています。OSはLinux。 注文情報をMySQLのテーブルに格納した後、MySQL以外にも別にDBが存在しており、そちらにも同時にXML形式で渡して格納しています。 しかし負荷が上がると別DBへのアクセスがボトルネックになっているようで、ECサイト側のLoad Averageが高くなっているところまで判明しました。 MySQLと別DBは完全同期でなくてもかまわないので、できれば、ブラウザのアクセスとは切り離した形で、テーブル内の情報を別DBにポツポツアップしていきたいのですが、どのようなやり方が最適でしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • dummyplug
  • ベストアンサー率58% (134/230)
回答No.1

その別DBには何のために書き込んでいるんですかねぇ…、という疑問は置いておいて、後でゆっくり書き込めばいいというのであればブラウザからのアクセスはMySQLへのアクセスまでで閉じるようにして、定期的またはMySQLに変更があったときだけ別プロセスを起動してレプリケート(とはちょっと違いますけど)というか別DBへの書き込みをすればよいのではないでしょうか。 (オンデマンドでなく)定期的に差分バックアップをとるように別DBに移すというのが性能などを見積もりやすいかと思いました。 規模とかMySQLと別DBの関係がわからないので、そう簡単にはいかないことがあるのかもしれないですけれども。

gapp
質問者

お礼

dummyplug様 ご回答ありがとうございます。 まさに定期的、または変更があった場合に差分のみ移すというのが理想なのですが、具体的にどのように実現したらよいのでしょうか? Cronでぐるぐる回すのがよいのでしょうか。それともMySQLの機能で、変更があったら何かをキックするなんてこともできるのかなぁ・・?

その他の回答 (1)

  • dummyplug
  • ベストアンサー率58% (134/230)
回答No.2

ちょっと時間が空いちゃいましたね。ごめんなさい。 cronで回すのもMySQLのイベントを使うのもどちらもありだと思います。 ただ、個人的にはレコードが更新されたらというイベント(トリガ)で起動するよりも定期起動の方がよいのではないかと考えています。後者の方がサーバの負荷を読めそうな気がするからなのですけれど、実際に設計してみてイマイチなようなら更新トリガを使って動かすというのももちろん構わないと思います。 更新があったら速やかに何か(この場合XMLを別サーバに送る)をしたいというならトリガを使うところですけど、そんなに焦る処理でもないのなら定期起動の方が動きを読みやすいし、監視もしやすいと思います。 処理方法の参考としてURLを挙げておきます。 【MySQLウォッチ】第39回 イベントによる定期実行処理の自動化 http://itpro.nikkeibp.co.jp/article/COLUMN/20080401/297671/ 【MySQLウォッチ】第16回 MySQL 5.0ベータ版リリース,新機能トリガーとビューを試す(こちらはちょっと前の記事ですけど) http://itpro.nikkeibp.co.jp/members/ITPro/oss/20050422/159972/?ST=oss

gapp
質問者

お礼

dummyplugさん  詳しい説明ありがとうございます。 MySQLにもトリガなどあるんですね。 おかげでCronやトリガのメリットデメリットもわかりやすかったです。 本当にありがとうございました。

関連するQ&A