簡體   English   中英

在ASP.NET中使用Linq查詢緩存

[英]Querying the Cache using Linq in asp.net

搜索是我們網站上最常用的功能,而搜索查詢是在我們的數據庫上執行的最耗CPU,最復雜和最頻繁的查詢,從而導致數據庫服務器上的CPU使用率很高。 為了減少數據庫的負載,我們一直在研究各種緩存策略。 目前,我們打算使用ASP.NET緩存。

這個想法是在緩存中有一個最頻繁/最近創建/訪問過的對象的內存數據庫,然后使用linq查詢內存數據庫以提供搜索結果。 我最初的想法是緩存用戶列表,然后使用linq查詢或修改此列表。 但是考慮到多個線程訪問或嘗試修改List的復雜性,我正在尋找其他選項。

這是我認為不是緩存列表,而是將其ID作為鍵緩存單個User對象並嘗試查詢Cache的時候。 http://msdn.microsoft.com/zh-cn/library/system.web.caching.cache.aspx上,我看到Cache具有擴展方法AsQueryable,但是我不確定這是什么意思。 緩存是一個鍵值對,因此使用AsQueryable我可以查詢鍵並獲取一組用戶對象,還是可以查詢User對象並獲得所需的結果?

在開始進行此操作之前,您實際上需要對其具有一定的可度量性-如果沒有一些可靠的可靠數據來做出判斷,就無法弄清楚您的更改是有用還是有害。 性能,尤其是大規模性能是您無法考慮或猜測的。 您必須知道自己的方式。

至於您的解決方案,我認為您很可能會使問題變得更糟,或者至少在這里造成另一個問題。 從理論上講,您的數據庫服務器是為有效處理大量信息集上的任意用戶查詢而設計的。 Linq很棒,但它並不是真正的即席搜索引擎-它不具備搜索引擎真正期望的那種索引功能。 僅僅因為它可以將事物公開為IQueryable並不意味着您應該以這種方式對待它。 即使您有一種有效地搜索緩存的方法,也要克服另一個問題-如何識別最常用的內容? 以及如何管理ASP.NET緩存以使其在內存不足時不開始彈出內容?

您可能可以通過以下方式更好地為您服務:

  • 從一些好的老式數據庫調優開始-為什么您的查詢如此緩慢且昂貴? 您是否在某處缺少索引?
  • 着眼於緩存結果頁面的輸出,特別是如果您的搜索URL是GET-able的,因為這很容易管理。 如果站點正在融化,這是一個很好的短期解決方案。
  • 查看正確構建搜索位。 使用LIKE%whatever%不是正確的搜索。 數據庫中的全文索引是一個好的開始。 lucene.net之類的東西可能更好。

不可以,不能使用AsQueryable來查詢用戶對象並獲得所需的結果。 所以現在我暫時將使用靜態列表,盡管我知道我必須盡快而不是稍后進行更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM