2011-12-09 10 views
0

検索は当社のウェブサイトで最もよく使用される機能であり、検索クエリはdbをCPU上で実行するCPU集中型、複雑で頻繁なクエリです。 dbの負荷を軽減するために、さまざまなキャッシング戦略を検討してきました。今のところ、ASP.NETキャッシュを使用する予定です。asp.netでLinqを使用してキャッシュを照会

考えられるのは、最も頻繁に/最近作成された/アクセスされたオブジェクトのインメモリDBをキャッシュに格納し、linqを使用してメモリ内のdbに検索結果を提示することです。私の最初の考えは、ユーザーのリストをキャッシュし、linqを使用してこのリストを照会または変更することでした。しかし、リストにアクセスしたり、リストを変更しようとする複数のスレッドの複雑さを考えると、私は他のオプションを検討していました。

私は、リストをキャッシュする代わりに、そのIDをキーとして個々のユーザーオブジェクトをキャッシュし、キャッシュを試してみることを考えました。 http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspxで私はキャッシュが拡張メソッドAsQueryableを持っていることがわかりますが、これは何を意味するのか分かりません。キャッシュはキーの値のペアなので、AsQueryableではキーをクエリして一連のユーザーオブジェクトを取得できますか、またはユーザーオブジェクトをクエリして目的の結果を得ることができますか?

答えて

0

いいえ、AsQueryableを使用してユーザーオブジェクトを照会し、私が探していた結果を得ることはできません。だから今は静的リストを使用していますが、私は後でなく早く変更する必要があることを知っています。

1

これを始める前に、実際にその周囲に測定可能性がある必要があります。その判断を下すための良い、堅実なデータを持たずに、変更が助けて傷つくかどうかを判断する方法はありません。パフォーマンス、特にスケールでのパフォーマンスは、あなたが思考や推測できるものではありません。あなたはそれを通して自分の道を知る必要があります。

解決策としては、問題を悪化させるか、少なくともここで別の問題を作成する可能性があります。データベースサーバーは、理論的には膨大な情報セットにわたる任意のユーザークエリを効率的に処理するように設計されています。 Linqはすばらしいですが、実際にはアドホックな検索エンジンではありません。検索エンジンから実際に期待される種類のインデックス機能はありません。 IQueryableがそのように扱うべきではありません。キャッシュを効率的に検索する方法があっても、過去にもう一つ問題があります。最も頻繁に使用されているものをどのように特定していますか?そして、メモリが不足しているときに、取り出しを開始しないようにASP.NETキャッシュをどのように管理しますか?

あなたはおそらくより良いことでここに提供されるだろう。いくつかの良い昔ながらのデータベースのチューニングを皮切り

  • - なぜあなたのクエリが遅いので、高価ですか?あなたはどこかのインデックスを欠いていますか?
  • 検索結果のキャッシュ出力を確認すると、特に検索URLがGET可能なため、管理が簡単です。サイトが溶けている場合、これは短期的な解決策です。
  • 検索ビットを適切に構築します。 LIKE%を使用すると%は適切な検索ではありません。データベースの全文索引は良いスタートです。おそらくlucene.netのようなものが良いでしょう。
+0

テキスト検索ではありません。実際、検索は基本的にはクエリであり、複数の結合とそれを遅くするユーザー定義関数があるということだけです。私が話していたLinqのアプローチは、少なくとも今のところ、正しいアプローチだと思います。とにかく、提案のおかげで。 – shashi

関連する問題