0

これは、昨日の私の質問へのフォローアップです-データベースに「キャッシュ」を保存しない理由を尋ねるコメントでした(そして、数百万のフォルダーがそれぞれ最大1000を保持する異なるサブフォルダーに分割されたフォルダーアーキテクチャをテストしました)は、私に正しい解決策について考えさせ始めました。

1 つのフォルダーに 100 万以上のファイル、インクルード (キャッシュ) の場合

基本的に、ここでもう少し詳しく説明します。多くのデータベース クエリが必要な、高価な計算があります。基本的に、プログラムのすべてのリクエストは特定のユーザーを対象としています。各ユーザーの結果は、常にまったく同じになります (ユーザーが大きな変更を加えるまで)。基本的に、私は考えていました: 人がこのユーザーページにアクセスするたびにこの操作を行うのはなぜですか?一度実行して保存できるのであれば?

基本的に、結果はさまざまなデータ/設定などを保持するさまざまなPHPオブジェクトのセットです。そのため、.incそれらのオブジェクトを作成するファイルを作成することを考えていました(SELECTの結果となる定義済みの値を持つ)。そして、誰かがその特定のユーザーに電話をかけるたびに、私は簡単に電話をかけるだけincludeで問題は解決します.

今、私はその解決策についてもう確信が持てません。これは、基本的にすべてのユーザーが、含めるファイルを少なくとも 1 つ.inc(複数可能) 持っていることを意味します。つまり、ユーザー テーブルUNSIGNED MEDIUMINTPKがある場合、少なくとも 8388607 * ~2 ファイル (最悪の場合) をサポートするフォルダー構造が必要です。

ここで間違った方向を探していると思います。私の可能性は何ですか?

  1. データを選択して計算し、すべてのページ呼び出しでまとめます-常に同じ結果が得られます
  2. 2. と同じですが、結果のオブジェクトをコード スニペットとしてファイルに保存します - 含める
  3. 2. と同じですが、結果のオブジェクトをシリアル化し、ファイルまたはデータベースに保存し、ページ呼び出しごとにシリアル化を解除します。
  4. ?

この種の問題を解決する他の解決策/方法はありますか? これらの解決策はすべて、私自身の耳にはあまりきれいに聞こえませんが、これを行う別の方法を見つけるのに苦労しています. 800 万のファイルを保持している、または同じことを何度も計算している - 何とか間に何かがあるはずです。

助言がありますか?

ありがとう!- 下手な英語で失礼します。

4

1 に答える 1

0

ここには多くのオプションがあると思いますが、詳細がないと最適なものを選択するのは困難です。

これらのオブジェクトが独自のテーブルで常に変更される可能性が低い場合は、これらのオブジェクトをデータベース テーブルにセミキャッシュし、結果がセミキャッシュ テーブルに見つからない場合にのみ高価な計算を行うことができます (これは、それをセミキャッシュ テーブル)。サーバーのダウンタイムを利用するために、これらを定期的に (毎晩など) 更新するスケジュールを設定することもできます。

結果をセッションまたは Cookie に保存し、必要に応じて確認し、存在しない場合はデータベースから計算できます。

mySQL キャッシュを使用してこれらの高価な計算を保存し、必要に応じてキャッシュに格納されるようにします。これは、予想される訪問者でキャッシュを予熱することを意味する場合があります。

于 2012-08-09T12:31:52.337 に答える