在SQL CE数据库中缓存数据

时间:2009-10-09 22:50:53

标签: wcf caching sql-server-ce

背景

我有一个SQL CE数据库,不断更新(每秒) 我有一个(web)应用程序,允许用户实时查看数据。在某些时候,用户可以单击“拍摄快照”按钮,它将在不同的窗口中打开快照 然后在该表单上,有“打印”和“下载”按钮,可以生成打印页面,也可以将数据作为CSV文件流式传输 - 但必须使用相同的数据快照,即我不能去数据库获取最新数据。

详情

  • SQL CE dabatase通过WCF Web服务公开。
  • 快照最多包含500条记录,每条记录10列。快照2小时的到期时间就足够了。
  • 这是一个低流量的应用程序,所以我不希望同时有超过几(5)个连接。
  • 丢失快照不是什么大问题,用户可以简单地生成新的快照。
  • 数据库由使用Linq-to-SQL的自托管WCF Web服务访问。
  • 网站是在UltiDev Cassini上托管的ASP.NET MVC。
  • 数据库和网站很可能在部署时位于同一个盒子上。整个应用程序都是内联网绑定。

问题 我需要在用户按下“拍摄快照”按钮时缓存数据快照,这样我就可以使用相同的数据生成打印页面,或者生成要下载的文件。

解决方案1: 每次需要生成快照时,我都会在数据库中创建一个表。由于SQL CE中没有临时表,我需要自己清理它。

解决方案2: 在内存上在DB服务器或Web服务器上缓存快照。

问题:提议的解决方案有什么问题吗?任何不同的解决方案建议?

2 个答案:

答案 0 :(得分:1)

考虑因素是典型使用模式。大多数快照最终会导致打印还是导出或两者兼而有之?
如果是这种情况,我们也可以(暂时)以从设备到服务器的非阻塞(异步)select语句的形式“获取它在内存中”。以这种方式,当用户决定使用数据时,数据将“存在”或正好在其中。

另一方面,如果许多快照最终没有得到有效使用,解决方案#1似乎相当不错(也许该表可以以帐户/用户命名,因此保证基于快照数量的“自我清理”用户可以在给定的时间保持(虽然它似乎只是一个,甚至有时会失去它的容忍度。)

答案 1 :(得分:0)

500行乘10列并不是真的非常大。为简单起见,在这种情况下,我可能会在生成初始快照页面的同时生成CSV数据,然后将CSV数据放在快照页面的隐藏字段中。然后,“打印”和“下载CSV”按钮将包含CSV数据的表单发布到打印页面,该页面根据发布的CSV数据生成可打印版本,或者将CSV直接流回客户端浏览器的页面。这样,至少,您不会有任何清理问题需要处理,并且您不必在服务器上缓存某些东西(在缓存本身或数据库中),这些东西最终可能永远不会被用于所有

如果您在客户端的隐藏字段中缓存了CSV数据,您甚至可以使用javascript完全在客户端处理打印和CSV显示,但我不知道这是否值得。< / p>