我正在设计一个在SQL Server中有超过400个表的会计应用程序。
这些表中约有10%是操作表,其他表用于解码和参考信息。
例如,Invoice
表(主表和详细信息)使用大约10个表来解码买家,物品,营销商等信息。
我想知道在asp.net缓存中缓存解码表是否可以接受,并且不从SQL Server查询它们(我知道缓存项的更改也应该在SQL Server上提交)。并使用缓存项进行解码?
我认为它比常规应用程序快得多。
可能所有这些(缓存表)在一些年后大约为500 MB,因为它们不会频繁更改。
答案 0 :(得分:3)
如果你有RAM,那么使用500 MB就可以了。
但是,除非您现在遇到性能问题,否则缓存只会导致问题。不要解决您未遇到的问题,设计性能并仅在遇到问题时进行优化 - 否则优化会导致更多问题解决。
所以我建议通常最好确保您的查询得到优化并且结构良好,您在表上有正确的索引,并且您发出的查询量最少。
尽管500MB并不是很多要缓存的数据,但是在充分尊重的情况下,通常SQL Server可以比你更好地进行缓存 - 只要你正确使用它。
使用缓存将始终提高性能;以更高的实施复杂性为代价。
对于永远不会更改缓存的静态数据很有用;但它仍然需要在线程之间加载和共享,这本身就可能带来挑战。
对于很少改变的数据,它变得更加复杂,因为它可能已经改变了。如果单个应用程序(进程)是缓存的唯一更新程序,那么它并不困难,但仍然不是一项简单的任务。
我花了几个月优化离线批处理系统(代码完全控制数据库12小时)。部分优化是使用各种缓存和数据重新投影。所有缓存都是只读的。执行期间内存使用率约为10gb,数据库约为170gb,记录为6000万。
即使使用缓存,底层架构也发生了相当大的变化,以提高效率。 readonly缓存是为了在处理过程中消除读取;允许多线程处理并提高插入性能。
处理率已从20个月前每秒处理6件物品变为每秒约6000件物品(昨天) - 但真正需要进行此优化,因为待处理物品的数量已从100,000件增加至800万件。同一时期。
如果您没有需要,则不要进行优化。