2009-05-11 36 views
19

私がPHPで開発しているサイトでは、ページごとに多数のMySQLデータベース要求が表示されます。多くの場合、適切に設計されたインデックスを持つ小さな要求です。これらのページのキャッシュスクリプトを開発する間に価値があるかどうかはわかりません。ファイルアクセス速度とデータベースアクセス速度

1)ファイルI/Oはデータベース要求よりも一般的に高速ですか?これはサーバーに依存しますか?あなたのサーバーのどれだけ多くのものをテストできるか?

2)ページの1つでデータベースのファイル名を確認し、サーバーが存在するかどうかを確認して表示する内容を決定します。これは私がキャッシュされたページビューから利益を得るだろうと思いますか?

また、このトピックに関するその他の情報があれば、私に転送することができます。

ありがとうございました

答えて

10

もしあなたが(ファイル名を調べるなど)読み込み重度のアクセスをしているのであれば、memcachedの恩恵を受けるかもしれません。メモリ内の "最もホットな"(最近作成された、最近使用された、最近使用された)データをメモリに保存し、キャッシュが失われたときにのみDB(およびおそらくファイル)をクエリすることができます。メモリアクセスは、データベースやファイルよりはるかに高速です。

書き込みの多いアクセスが必要な場合は、データベースが必要です。 MySQLを使用している場合は、InnoDBテーブル、または行レベルのロックをサポートする別のエンジンを使用してください。そうすれば、誰かが書き込みをしている間に人がブロックされるのを避けることができます(とにかく、書き込みが悪い)。

しかし、最終的にはデータによって異なります。

4

これは実際には多くの要因によって異なります。 RAMや高速なRAIDシステムにキャッシュされたデータの多い高速データベースを使用している場合は、Webサーバー上の単純なファイルシステムのキャッシュから多くの利益を得られる可能性があります。また、スケーラビリティについて考える。高い作業負荷の下では、単純なキャッシング機構が簡単にボトルネックになり、データベースは高い作業負荷を処理するように設計されています。
ご要望があまりなく、あなた(またはオペレーティングシステム)がキャッシュをRAMに保持できる場合は、パフォーマンスを向上させることができます。しかし、低い作業負荷でキャッシュを実行することが本当に必要な場合は、今問題が生じます。

11

データの構造、データの量、データの変更頻度によって異なります。

相対的に単純な関係で比較的静的なデータが比較的少ない場合は、フラットファイルが適切なツールです。

リレーショナルデータベースは、データ間の接続が複雑な場合に独自のものがあります。基本的な「ルックアップテーブル」では、少し過度のものになる可能性があります。

しかし、データが絶えず変化している場合は、手作業で構成管理を処理するのではなく、データベースを使用するほうが簡単です。また、フラットファイルの場合は、あなたが必要とする1ビットをいかに効率的に見つけますか?

+2

データベースには、フラットファイルではない並行性制御があります。書込みが重いコンテキストでは、単一のフラットファイルに書き込む多くのプロセスが問題になる可能性があります。 カスタム、フラットファイルと完全なRDBMSとの間の優れた妥協点はSQLiteです。そこにはいくつかのSQLiteバックアップサイトがあります。 –

3

単純なパフォーマンスの観点から、データベースサーバーをチューニングし、中間ファイルキャッシュを使用してデータアクセスロジックを複雑にするのは賢明です。結果がキャッシュ可能な場合は、適切なデータベースサーバーが単独でキャッシュを行います。 (私はmysqlで何が起きているのか分かりません)。

パフォーマンスに問題がある場合は、実際のボトルネックを表示するためにページをプロファイルする必要があります。あなたが私のように最適化されたコードのファンであっても、より強い/より多くのハードウェアをこの式に入れることは、長期的には安いです。

キャッシュを使用する必要がある場合は、memcachedなどの既存のソリューションを使用することを検討してください。