C# 内存缓存中-SQLite vs System.Data.DataTable

C# 内存缓存中-SQLite vs System.Data.DataTable,c#,.net,sqlite,caching,datatable,C#,.net,Sqlite,Caching,Datatable,我正处于设计C#中内存缓存(将作为windows服务运行)的初始阶段。一旦投入生产,预计平均可容纳近一百万个对象(各种类型)。某些缓存项的大小可以达到10MB(或更大)。 我考虑了各种数据存储解决方案,现在我决定使用DataTable或SQLite内存实例作为缓存存储。在这一点上,我的问题是 有这么多记录,您认为DataTable的性能如何 你认为使用SQLite解决方案是一种过分的做法吗?(因为SQLite是作为“数据库”设计的,我可能并不真的想要所有与数据库相关的管道活动) 对我来说,表现是

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

  • 有这么多记录,您认为DataTable的性能如何
  • 你认为使用SQLite解决方案是一种过分的做法吗?(因为SQLite是作为“数据库”设计的,我可能并不真的想要所有与数据库相关的管道活动)
  • 对我来说,表现是最重要的

    编辑

    添加更多细节

  • 这些缓存项不仅仅是键值对,它们还有两个 (截至目前)属性(固定和锁定的项目),这可能会影响 它们的可用性。每次查找都将包括所有三个 财产
  • Memcached已经被考虑过了,但在这一点上,这并不是一个问题 选项主要是由于我们的SLA限制(这就是我所能说的 它)
  • 并非所有项目的大小都为10MB
  • 我敢肯定,这些项目中的许多将仅仅是 数值和小字符串值
  • 我相信,RAM的可用性不是问题
  • 提前感谢,,
    詹姆斯:糟透了。数据包速度慢,占用大量内存,对于大型项目来说不会发生神奇的变化。
    2:你告诉我们

    你考虑过用一本简单的字典吗?你知道,键/值对


    答案实际上取决于您计划如何使用缓存。

    如果每个项目都是1 MB,则表示1 TB的内存。
    您有1 TB的内存用于此目的?
    固态磁盘上的数据库可能是更好的设计

    DataTable很大而且很慢

    您将如何查找这些项目?
    您将拥有一把完整的钥匙吗?
    你会有足够的记忆吗?

    如果是的话,请查字典

    这实际上取决于您的查询要求。如果您需要相对复杂的即席查询,您可能希望使用SQLite解决方案。但是,如果每个查询都要使用键/索引,那么DataTable就足够了。您的内存缓存中是否有10000000000B的RAM?作为服务运行?像memcached?为什么要重新发明轮子?尤其是当您的第一个想法是在内存中使用数据表或SQL数据库时,无论是否在内存中,您都不会正确地使用它。