8

(A)$ _ SESSION配列のすべてのページ読み込みで使用されるデータをキャッシュする(ただし、データを新しく再読み込みするためのフラグをテーブルにクエリする)方が「優れている」(より効率的、高速、安全など)か。または(B)毎回データベースからロードしますか?

キャッシュ方式(A)を使用していますが、何百人ものユーザーがいると、メモリが問題になるのではないかと心配しています。これは、名、姓、誕生日などの単純なデータです。

どちらの方法でも、クエリはまだ実行されています。考え?

4

2 に答える 2

6

データがすべてのページで使用され、すべてのユーザーで同じである場合、データを$ _SESSION(ユーザーごとにそのデータの異なるコピーを持つことを意味します)にキャッシュしませんが、次のような別のメカニズムを使用します。

  • ファイル
  • メモリ内、たとえばAPCを使用(サーバーが1つしかない場合)
  • たとえば、メモリ内でmemcachedを使用します(複数のサーバーがある場合)
  • データの計算に時間がかかるか、複数のDBクエリを取得する必要がある場合は、データをデータベースにキャッシュすることも可能です(フェッチバックするクエリが1つだけで、計算が少なくなることを意味します)。


データが各ユーザーで同じでない場合(名前、生年月日などをキャッシュしているため、状況に当てはまるようです)

  • 必要なものだけをキャッシュするようにします
  • キャッシュするデータが少ししかない場合は、それをセッションに入れることはまったく問題ありません。
  • 本当に多くのユーザーがいる場合は、おそらく他のスケーラビリティの問題が発生し、とにかくmemcachedのようなものを使用するようになるでしょう。つまり、他のキャッシュ方法があります;-)

補足として:同じクエリを何度も実行している場合は、DBサーバーがそれを単独でキャッシュする必要があります(MySQLの場合、「クエリキャッシュ」に入ります)。だから、あなたが思うほど悪くはないだろう、と私は思う-それほど最適化されていなくても^^

于 2009-09-07T04:59:33.497 に答える
1

それはあなたがセッションハンドラーであるものに依存します。セッションハンドラーはMySQLである可能性があるため、どちらが優れているかではなく、セッション処理を最適化する方法が問題になります。

デフォルトのPHPセッションハンドラーはファイルですが、mysqlに簡単に変更できます。

ユーザー固有ではないデータについて話している場合は、それをDBに保存するだけです。後で問題が発生した場合の最適化について心配してください。通常、事前に最適化を検討するよりも、より優れたデザインパターンを使用する方がはるかに有益です。ストレージに別のハンドラーを簡単に使用できるようにコードを設計し、後で最適化の問題が発生しないようにします。

ユーザー固有の場合はセッションを使用しますが、必要に応じて適切なセッションハンドラーを使用します。

于 2009-09-07T07:53:16.317 に答える