[英]Web application - cache architecture
我有一個 .Net 應用程序和一個 WCF 服務,我使用它來使用SortedSet
按時間順序緩存項目。 它存儲了一些我用來檢索 DatabaseId 的元數據,因此對 Db 的查詢會更快。 我需要有關最佳/正確/最合適架構的幫助。
該服務在 singleton 中保存一個 SortedSet。 存儲的數據是
public class MyData : IComparable<MyData> {
DateTime CreateDate {get; set;}
List<int> AccountIds {get; set;}
long DatabaseId {get; set;}
// implementation to sort by CreateDate
}
我有一個有合同的方法
List<int> GetDatabaseIds( DateTime startRange, DateTime endRange,
List<int> accountIds )
然后,此方法將通過SortedSet
go 使用GetViewBetween
(使用CreateDate
字段),然后發出 LINQ 查詢以僅返回 AccountIds 匹配的 DatabaseIds。
這加快了數據庫檢索,但隨着記錄數量的增加,memory 的要求也會增加。 我已經對 AppFabric Cache、MemCached 進行了試驗,發現它們無法使用,因為它們將項目存儲在 Key/Value 中。 也許我錯了,但是這些產品可以使用嗎,如果可以,如何使用? 如果不是,我可以使用哪些其他方式來存儲順序數據(按日期)以獲取匹配的 DatabaseId?
更新
我這樣做的原因是直接搜索數據庫相當慢,並且存儲在數據庫中的項目並不總是按時間順序排列。 如果我可以直接傳入DatabaseId,那么數據庫只需要在PK上做一個seek。 它還允許我使用 MemCached 來存儲數據,進一步減少數據庫訪問。 這是更高的目的。 此外,我需要 Web 服務器進行擴展,這就是為什么我將它從 Runtime.Cache 移到外部的原因。
我不是 100% 確定我真的需要這種緩存,但是當我直接查詢數據庫時,即使有正確的索引也會有更大的延遲。 使用這種方法,WCF 搜索在大約 20 毫秒內返回結果(大約有 1,000,000 條記錄),並且 db 查詢會非常快(記不起時間)。 我也很疲倦,隨着使用量開始攀升,這個 WCF 將無法擴展。
另外,我確實考慮過將整個 SortedList 存儲到緩存中,但是轉換到/從/常量添加使它相當慢。
我預計行數每天至少增加 10,000 行,並且可以隨時通過另一種 WCF 方法添加記錄。
也許我所做的是完全錯誤的,但我想到的一些事情是:
想法??
您可以使用像我在這里的自定義緩存: http://www.itsalltechnical.com/2011/01/non-web-expiring-generic-cache-in-c.html
我提到這一點是因為如果您不喜歡字典樣式的訪問,您可以自定義檢索數據的方式。 我認為在大多數緩存結構中,您會看到相同的字典方法,因此您可能會陷入困境。 您可以考慮使用其他類型的基於高速 object 的持久性,例如 MongoDB 或 Cassandra(適用於 facebook)來提高吞吐量。 幸運的是,您有很多選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.