人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

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

●質問者: kt26
●カテゴリ:ウェブ制作
✍キーワード:MySQL PHP SQL URL Web
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● pahoo
●27ポイント

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

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


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

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

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

◎質問者からの返答

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


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


2 ● b-wind
●27ポイント

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

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


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

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

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

◎質問者からの返答

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


3 ● lets_skeptic
●26ポイント

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

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

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

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ