2009-09-02 5 views
6

私のシナリオではまともな解決策はまだありません。基本的に私はASP.NET MVCのWebサイトを持っています。このWebサイトにはビューを作成するためのデータベースアクセスがあり、パフォーマンスを向上させるためにキャッシュを利用したいと考えています。ASP.NET MVCキャッシュシナリオ

問題は、ビューに2日間同じか、1時間に数回データが変わるような、不規則に変化する可能性のあるデータが含まれていることです。

クエリは非常に単純です(select ... from where ...)。巨大な結合ではなく、それぞれ平均20-30行のデータ(約10列)を返します。

現在のサイトではクエリは非常にシンプルですが、時間の経過とともにオーナーがデータを追加して訪問者数が増加します。彼らは現時点では大きく、私はトラフィックが主にGoogle AdWordsなどから来るようにキャッシングを見ていて、速い読み込みページは(明らかに)利益になります。

このサイトは、Microsoft SQL Server 2005データベースでホストされます(ただし、必要に応じて2008にアップグレードできます)。アイテムがために(3分と言うために例えばキャッシュ)を変更し、変更が3分件までかかります所有者を教えてくれない最小の時間に

    キャッシュを設定し
  1. は、Iのいずれかを実行します。現れる?

  2. (所有者が管理パネルに項目を追加する場合、それは、関連するキャッシュをクリアEg)を変更にクリアし、再処理するためにキャッシュを強制する方法を探す

  3. すべて一緒

  4. をキャッシュ忘れまたは、このシナリオに合ったオプションがありますか?

答えて

5

は、SQL Serverを使用している場合は、考慮すべき他のオプションもあります。

は、基礎となるデータが更新されたとき、あなたのキャッシュが無効に持ってSqlCacheDependencyクラスを使用します。明らかに、これはオプション2と同様の結果を達成します。

実際にAgileguyに同意しなければならないかもしれません。あなたが設計している間は、前向きに考え、キャッシングを心がけておくことは良いアイデアですが、実際にはに今すぐ必要があることを証明しました?オプション3は、実際に重要なパフォーマンス上の問題を実際に処理していないと仮定すると、オプション1よりも優れているようです。

+0

はい、私はこれに言及するのを忘れました、私は質問にコメントを追加します。今あなたの提案を見て: – Phil

+0

おそらくあなたはデータをキャッシュするためのメカニズムを組み込んでいるORMツール(例えばNHibernate)を見てください。 – dariol

4

時期尚早の最適化は諸悪の根源である;)

言った、あなたは、キャッシュしようとしている場合、私はあなたがのために少ないチャンスを持っているオプション2.

周りベースのソリューションを使用したいですその方法で「汚れた」データ

優しさ、

ダン

0

2番目のオプションが最適です。同じアプリがデータを編集/キャッシュしている場合、それほど難しいはずはありません。複数のアプリがある場合は、もっと難しいかもしれません。

あなたがそのように行くことができないなら、1stも受け入れられるかもしれません。いくつかの調整(タイムアウトに達すると別のスレッドでキャッシュを静かに更新しようとします)では、十分にうまくいく可能性があります(データが古くなることが許されている場合)。

可能であれば、キャッシュを削除しないでください。誰もが "時期尚早の最適化..."と言っていますが、キャッシングはアプリケーションのスケーラビリティ/パフォーマンスを劇的に向上させることのできるものの1つです。