10

高いユーザー負荷を処理するためにスケーラブルである必要がある ASP.NET/C# の Web アプリに取り組んでいます (おそらく Web ファームで実行されます)。約100万人以上の多数のユーザーに対応するため、オンラインユーザーの数は約30K〜50Kになります. 私はキャッシング(プロバイダーベース)を使用する予定で、疑問に思っていました:

  1. パフォーマンスのためにすべてのユーザーをキャッシュすることは良い考えですか? 設定などの他のすべての一般的なデータをキャッシュする予定ですが、すべてのユーザーをメモリにキャッシュするとどのくらい効率的でしょうか? ユーザーが自分のプロファイルを変更した場合、その特定のユーザーのみをキャッシュにリロードします (すべてのユーザーのコレクションがあります)。このアプローチに関する提案はありますか?

  2. このユーザーキャッシュを使用する場合、ロックについて心配する必要はありますか? ユーザー自身がプロファイルを編集するのは 1 回だけであり、それは 1 つのアトミック操作になりますが、異なるスレッドで複数の読み取り操作が行われます。では、キャッシュからユーザーをフェッチするとき、または特定のユーザーを更新するときに、ロックを使用する必要がありますか?

ありがとう

かのように

4

2 に答える 2

6

単一のユーザーにのみ役立つものをグローバルキャッシュに入れることは、通常、悪い考えであり、パフォーマンスを低下させます。データベースクエリを最適化すると、より良い状態になります。

一般的な経験則として、データベースから取得するのに費用がかかるものだけをキャッシュに保持する必要があり、複数のユーザーが一度にその情報を見たいと思うでしょう。トップ100の商品のリストなど。データベースから取得するのが比較的安価で、1人の人だけに役立つ少量のデータは、現在の場所にとどまる必要があります。

キャッシングは複雑さを大幅に増大させ、Webファームではさらに複雑になります。どうしても必要な場合を除いて、不必要な複雑さを導入しないでください。実際のパフォーマンスの問題が発生するまで待ってから、問題を解決してください。

于 2010-08-26T13:11:37.027 に答える
0

ユーザーをキャッシュすることはおそらく良い考えです。ただし、ユーザーごとにキャッシュするデータの量と、データが保存されている場所からそのデータを取得するコストによって異なります。

ロックの場合-他の誰かが(管理者のように)ユーザーのプロファイルを編集できますか?それはよくあることでしょうか?もしそうなら、あなたはいくつかのロックをしたいかもしれません。そうでなければ、ユーザーだけが自分のものを編集できるのであれば、私は気にしません。

于 2010-08-26T13:11:12.643 に答える