2012-12-10 82 views
1

我处于C#(它将作为Windows服务运行)内存缓存设计的初始阶段。预计一旦投入生产,平均可以容纳近百万个物体(各种类型)。某些缓存项目的大小可能高达10MB(或更多)。 我考虑了各种数据存储解决方案,现在我决定使用DataTable或SQLite内存中的实例作为缓存存储。在这一点上我的问题是内存中缓存 - SQLite vs System.Data.DataTable

  1. 你认为一个DataTable的性能将与这么多的记录数?
  2. 你觉得和SQLite的解决方案会是一个矫枉过正?(由于SQLite是设计成一个“数据库”,我可能不是真的想所有这些数据库相关的水暖活动)

性能是最高优先级我。

编辑

添加一些细节。

  1. 这些缓存项不只是键值对,他们有两个 (截至目前),性质(固定和锁定的项目),这会影响 其可用性。每个查找将包括所有三个 属性。
  2. Memcached已经考虑过了,但在这一点上,这不是一个 选项,主要是由于我们的SLA限制(这就是我可以说的关于 它)。
  3. 并非所有项目都是10MB大小。
  4. 我非常肯定,这些项目中的很多将仅仅是 数字和小字符串值。
  5. 我相信RAM的可用性不是问题。

由于提前, 詹姆斯

+2

这真的取决于您的查询要求。如果您需要相对复杂的临时查询,您可能需要使用SQLite解决方案。但是,如果每个查询都要使用键/索引,那么DataTable应该足够了。 – rossipedia

+1

你有10,000,000MB的RAM? –

+1

在作为服务运行的内存缓存中?像memcached?为什么重新发明轮子?如果你的第一个想法是在内存中使用数据表或SQL数据库,那么你不会这么做。 – Chris

回答

2

1:糟糕。 DataTable速度慢,内存大,不会奇迹般地改变大件物品。
2:你告诉我们。

你有没有考虑过使用简单的字典?键/值对,你知道。

答案真的要依赖于你计划用Cache做什么。

+0

我已更新了我的原始问题的更多细节。 –

1

如果每个项目都是1 MB,即1 TB的内存。
你有1 TB的内存专用于此?
固态硬盘上的数据库可能是更好的设计。

DataTable很大很慢。

你打算怎么看项目?
你打算拥有一个完整的密钥吗?
你打算有足够的memeory?
如果是这样的字典。

+0

我已更新了我的原始问题的更多细节 –