背景
我有一个SQL CE数据库,不断更新(每秒) 我有一个(web)应用程序,允许用户实时查看数据。在某些时候,用户可以单击“拍摄快照”按钮,它将在不同的窗口中打开快照 然后在该表单上,有“打印”和“下载”按钮,可以生成打印页面,也可以将数据作为CSV文件流式传输 - 但必须使用相同的数据快照,即我不能去数据库获取最新数据。
详情
问题 我需要在用户按下“拍摄快照”按钮时缓存数据快照,这样我就可以使用相同的数据生成打印页面,或者生成要下载的文件。
解决方案1: 每次需要生成快照时,我都会在数据库中创建一个表。由于SQL CE中没有临时表,我需要自己清理它。
解决方案2: 在内存上在DB服务器或Web服务器上缓存快照。
问题:提议的解决方案有什么问题吗?任何不同的解决方案建议?
答案 0 :(得分:1)
考虑因素是典型使用模式。大多数快照最终会导致打印还是导出或两者兼而有之?
如果是这种情况,我们也可以(暂时)以从设备到服务器的非阻塞(异步)select语句的形式“获取它在内存中”。以这种方式,当用户决定使用数据时,数据将“存在”或正好在其中。
另一方面,如果许多快照最终没有得到有效使用,解决方案#1似乎相当不错(也许该表可以以帐户/用户命名,因此保证基于快照数量的“自我清理”用户可以在给定的时间保持(虽然它似乎只是一个,甚至有时会失去它的容忍度。)
答案 1 :(得分:0)
500行乘10列并不是真的非常大。为简单起见,在这种情况下,我可能会在生成初始快照页面的同时生成CSV数据,然后将CSV数据放在快照页面的隐藏字段中。然后,“打印”和“下载CSV”按钮将包含CSV数据的表单发布到打印页面,该页面根据发布的CSV数据生成可打印版本,或者将CSV直接流回客户端浏览器的页面。这样,至少,您不会有任何清理问题需要处理,并且您不必在服务器上缓存某些东西(在缓存本身或数据库中),这些东西最终可能永远不会被用于所有
如果您在客户端的隐藏字段中缓存了CSV数据,您甚至可以使用javascript完全在客户端处理打印和CSV显示,但我不知道这是否值得。< / p>