【发布时间】:2016-10-17 09:46:50
【问题描述】:
我有一个 DAL,用于将大量时间序列测量值保存到 RDBMS 数据库(MS SQL Server)中。还有一个网络应用程序连接到该数据库并在线显示趋势(通常绘制几个月的数据图表,例如,各种数量和物联网设备的 5 分钟最小/最大/平均聚合)。
由于数据量大,我想将聚合结果缓存到一个单独的表中,如果我能有一个额外的内存缓存层也很酷。但是,设备经常发送带有较旧时间戳的历史数据,这意味着缓存通常需要失效,并且有两个应用程序访问这些数据(插入/更新并偶尔读取数据的服务,以及读取数据的 Web 应用程序)数据)。
我已经研究了几个选项,例如 SQL 触发器,或者只是手动使表失效,但我不确定如何将缓存失效正确地传播到 Web 应用程序。
有没有办法以某种方式检测我的网络应用程序中的 SQL 事件并使缓存无效?或者有一个单独的内存缓存进程,也可以失效?或者我是否应该创建自己的第三个服务,作为所有 db 操作的代理,提供数据的内存缓存(这似乎有点矫枉过正)?
【问题讨论】:
-
如果您使用的是 SQL Server 数据库,您可能需要考虑使用存储过程。
-
@jdweng:你能详细说明一下吗?为什么存储过程是特定于 SQL Server 的,这与缓存有什么关系?
-
数据库由多个应用程序访问,因此无法在任何一个应用程序中执行更新表。您可以在存储过程中的 SQL 中创建视图(临时表)并向视图添加时间戳。然后存储过程将处理对视图的更新。应用程序可以调用将负责更新视图的存储过程。视图将成为缓存。
-
SQL 事件是什么意思?
标签: c# sql-server caching sql-server-2008-r2 cache-invalidation