在.Net中缓存大量数据是否可以接受?

时间:2015-11-29 06:52:19

标签: c# asp.net sql-server caching

我正在设计一个在SQL Server中有超过400个表的会计应用程序。

这些表中约有10%是操作表,其他表用于解码和参考信息。

例如,Invoice表(主表和详细信息)使用大约10个表来解码买家,物品,营销商等信息。

我想知道在asp.net缓存中缓存解码表是否可以接受,并且不从SQL Server查询它们(我知道缓存项的更改也应该在SQL Server上提交)。并使用缓存项进行解码?

我认为它比常规应用程序快得多。

可能所有这些(缓存表)在一些年后大约为500 MB,因为它们不会频繁更改。

1 个答案:

答案 0 :(得分:3)

如果你有RAM,那么使用500 MB就可以了。

但是,除非您现在遇到性能问题,否则缓存只会导致问题。不要解决您未遇到的问题,设计性能并仅在遇到问题时进行优化 - 否则优化会导致更多问题解决。

所以我建议通常最好确保您的查询得到优化并且结构良好,您在表上有正确的索引,并且您发出的查询量最少。

尽管500MB并不是很多要缓存的数据,但是在充分尊重的情况下,通常SQL Server可以比你更好地进行缓存 - 只要你正确使用它。

使用缓存将始终提高性能;以更高的实施复杂性为代价。

对于永远不会更改缓存的静态数据很有用;但它仍然需要在线程之间加载和共享,这本身就可能带来挑战。

对于很少改变的数据,它变得更加复杂,因为它可能已经改变了。如果单个应用程序(进程)是缓存的唯一更新程序,那么它并不困难,但仍然不是一项简单的任务。

我花了几个月优化离线批处理系统(代码完全控制数据库12小时)。部分优化是使用各种缓存和数据重新投影。所有缓存都是只读的。执行期间内存使用率约为10gb,数据库约为170gb,记录为6000万。

即使使用缓存,底层架构也发生了相当大的变化,以提高效率。 readonly缓存是为了在处理过程中消除读取;允许多线程处理并提高插入性能。

处理率已从20个月前每秒处理6件物品变为每秒约6000件物品(昨天) - 但真正需要进行此优化,因为待处理物品的数量已从100,000件增加至800万件。同一时期。

如果您没有需要,则不要进行优化。