PHPとMySQLでWEBシステムを構築しています。


「サイト情報(サイト名、URL等)」や「管理者情報(管理者名、メールアドレス等)」など、
MySQLに保存し、各ページを表示する際に毎回SQLを実行しています。

ネットで検索すると「毎回同じSQLを実行するのは無駄。負荷がかかる」
と言う意見がありましたが、他の方はどうしているのかな?と思い質問しました。

ただし、以下の事例は思いつくので、それ以外でお願いします。

・別のプログラムをインストールしたりサーバ設定を変更したりなど、既存の環境を変更する
・設定ファイルを出力し、それを毎回読み込ませる方法
・セッションやクッキーで登録情報を保存し、読み込ませる方法

※出来るだけ汎用性のある方法があればご意見下さい。

回答の条件
  • 1人2回まで
  • 登録:2008/06/04 16:24:50
  • 終了:2008/06/06 01:30:22

回答(3件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/06/04 17:39:46

ポイント27pt

サイトによって「サイト情報(サイト名、URL等)」や「管理者情報(管理者名、メールアドレス等)」が異なるなら、いちいちDBを引くのは妥当だと思います。

負荷を気にされるのでしたら、ストアドプロシージャを利用するという手もありますが、これほど単純な処理だと、それほど効果はないかもしれません。


リアルタイムで変動しない情報であれば、私はこんな方法をとっています。

  1. DBからSELECTした情報をHTMLに変換し、適当なフォルダにセーブする。
  2. 上記のプログラムをcronでバッチ化しておき、1日1回更新するようにする。
  3. ここでセーブされたHTMLファイルを、ApacheのSSIの include ディレクティブを使って読む込むようにします。

御質問にあった「設定ファイルを出力し、それを毎回読み込ませる方法」と同義かもしれませんね。

id:kt26

回答ありがとうございます。「リアルタイムで変動しない情報を表示する為に、毎回DBにアクセスするのは違和感がある」と思い、質問しました。


1~3の件ですが、確かに私が考えている「設定ファイルを作成し、読み込ませる方法」ですが、バッチ化は考えていませんでした。SSIについても、ほとんどSSIを使うことはないのですが、少し勉強してみます。

2008/06/04 21:37:51
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402008/06/04 19:56:32

ポイント27pt

MySQL の場合クエリキャッシュがあるので「毎回同じクエリ」であるなら大した負荷にもならないな。

もちろん全く変動しない値ならプログラム側で固定値を持つべきだろうけど。


頻繁には更新されないけど、ある程度更新の可能性があるデータなら、PHP側でのキャッシュの導入を検討すればよい。

PHPでパフォーマンス向上のためのキャッシュテクニック色々:phpspot開発日誌

巷では memcached が人気だが、サーバープログラムなのでちと敷居は高いかも。

id:kt26

PHPのキャッシュは今後検討していたので、参考にさせていただきます。

2008/06/05 11:04:49
id:lets_skeptic No.3

lets_skeptic回答回数13ベストアンサー獲得回数22008/06/05 17:18:49

ポイント26pt

PECL::APCを使った具体的な方法が以下のURLで紹介されています。

少年よ大志を抱け: PHP: APCでクエリーキャッシュしてみる

仕組みは単純なので、同じような方法を使えば、他のキャッシュの方法(独自キャッシュ含む)でも実現できると思います。

しかし、滅多に変更しないのであれば、やはりDB更新の際にファイルを吐いておいて、表示時に静的ファイルを読み込む(組み込む)のが王道かと思います。Smartyをお使いでしたら、Smartyのincludeなど。

id:kt26

やっぱり、DB更新の際にファイルを生成する方が便利ですよね。includeする方が汎用性も高いし。

2008/06/06 01:30:10

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません