一些背景故事:我正在开发一个 Web 应用程序,该应用程序需要相当多的时间来准备/处理数据,然后再将其提供给用户进行编辑/操作。数据请求任务 ~ 15 / 20 秒完成,几秒处理。在那里,用户可以即时操作值。对值的任何操作都需要完全重新处理数据。
更新:为避免混淆,我只进行 1 次数据调用(命中 15 秒),然后希望将结果保存在内存中,这样我就不必再次调用它,直到用户 100% 完成使用它. 因此,第一次拉取需要一段时间,但是,使用 Ajax,我将访问内存中的数据以不断更新并将响应时间保持在 2 秒左右(我希望如此)。
为了提高效率,我将初始数据移动到内存中并使用 Ajax 调用回服务器,这样我就可以减少处理时间来处理此用户更新时发生的重新计算。
这是我的问题,考虑到性能,什么是存储这些数据的最佳方式,假设在任何给定时刻只有 1 个用户将使用这些数据。
此外,用户可能会在此过程中工作几个小时。当用户使用数据工作时,如果他们的会话以某种方式中断,我将需要某种故障保护来保存用户的当前数据(在数据库或序列化二进制文件中)。换句话说,我需要一个具有适当钩子的解决方案,以允许我在用户断开连接/分心太久的情况下转储内存对象的数据。
到目前为止,这是我的想法:
会话状态 - 优点:锁定一个用户。具有符合我的故障安全要求的会话结束事件。缺点:我当前选项中最慢的性能。会话结束事件有时很难确保正确触发。
缓存 - 优点:良好的性能。可以访问依赖项,这可能是以后的奖励,但在当前范围内并不真正有用。缺点:除了基于时间间隔的写入之外,没有简单的故障保护步骤。全球范围 - 必须确保用户不会与彼此的工作发生冲突。
静态 - 优点:最佳性能。易于维护,因为我可以直接利用我当前的班级结构。缺点:除了基于时间间隔的写入之外,没有简单的故障保护步骤。全球范围 - 必须确保用户不会与彼此的工作发生冲突。
有人对我应该选择的选项有任何建议/意见吗?
谢谢!
更新:忘了提,我正在使用 VB.Net、Asp.Net 和 Sql Server 2005 来执行此任务。