【问题标题】:Web application - cache architectureWeb 应用程序 - 缓存架构
【发布时间】:2011-09-08 15:09:24
【问题描述】:

我有一个 .Net 应用程序和一个 WCF 服务,我使用 SortedSet 按时间顺序缓存项目。它存储了一些我用来检索 DatabaseId 的元数据,因此对 Db 的查询会更快。我需要有关最佳/正确/最合适架构的帮助。

Service 在单例中保存一个 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,使用 GetViewBetween(使用 CreateDate 字段),然后发出 LINQ 查询以仅返回与 AccountIds 匹配的 DatabaseIds。

这加快了数据库检索速度,但随着记录数量的增加,内存需求也会增加。我已经对 AppFabric Cache、MemCached 进行了试验,发现它们无法使用,因为它们将项目存储在 Key/Value 中。也许我错了,但是这些产品可以使用吗,如果可以,如何使用?如果没有,我可以使用哪些其他方式来存储顺序数据(按日​​期)以获取匹配的 DatabaseIds?

更新

我这样做的原因是直接搜索数据库相当慢,并且存储在数据库中的项目并不总是按时间顺序排列。如果我可以直接传入DatabaseId,那么数据库只需要在PK上做一个seek。它还允许我使用 MemCached 来存储数据,进一步减少数据库访问。这是更高的目的。此外,我需要 Web 服务器进行扩展,这就是为什么我将它从 Runtime.Cache 移到外部的原因。

我不能 100% 确定我真的需要这种缓存,但是当我直接查询数据库时,即使有正确的索引也会有更大的延迟。使用这种方法,WCF 搜索在大约 20 毫秒内返回结果(大约 1,000,000 条记录),并且 db 查询将非常快(无法回忆时间)。我也很担心随着使用量开始攀升,这个 WCF 无法扩展。

另外,我确实考虑过将整个 SortedList 存储到缓存中,但是转换为/从/常量添加使其相当慢。

我预计行数每天至少增加 10,000 行,并且可以随时通过另一种 WCF 方法添加记录。

也许我所做的是完全错误的,但我想到的一些事情是:

  1. 在 Db 中创建一个新表,该表与我在缓存中的存储完全一样。这将由 CreateDate 聚集并高度索引
  2. 继续尝试优化查询/数据库,以便查询更快
  3. 保留 WCF 服务,但创建一个新的 ExpiryDate 字段,并让该记录过期,这样旧的不使用的东西就不会挥之不去。

想法??

【问题讨论】:

  • 你能解释一下这个更高层次的目的吗?即没有缓存,这应该怎么做?
  • 是什么阻止您将整个列表存储为单个对象?您可以将其转换回其类型并重新检查。
  • 我认为这可能是一个有趣的问题,但我和戴夫在一起,最终结果/目的并不完全清楚。
  • 如果您不确定是否需要它,我建议您在使用现有数据库方面付出更多努力,而不是通过添加另一个组件(以及潜在的故障点/维护)。
  • @GrandmasterB - 我相信我很快就会将其删除,但我想知道其他人使用过什么的想法,看看什么最有效

标签: .net architecture data-structures caching


【解决方案1】:

您可以使用我这里的自定义缓存:http://www.itsalltechnical.com/2011/01/non-web-expiring-generic-cache-in-c.html

我提到这一点是因为如果您不喜欢字典样式的访问,您可以自定义检索数据的方式。我认为在大多数缓存结构中,您会看到相同的字典方法,因此您可能会被逼到绝境。您可以考虑使用其他类型的基于高速对象的持久性,例如 MongoDB 或 Cassandra(适用于 facebook)来提高吞吐量。幸运的是,您有很多选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多