在Web应用程序中存储大型临时“会话”数据的好方法是什么

时间:2011-09-14 14:05:43

标签: asp.net session state

我的公司有第三方网络服务,我们正在设计前端。此Web服务使用的“对象”非常大(并且根据创建的子实体的数量而变化)。 Web服务不公开提交/加载子实体的方法,只公开完整的对象层次结构。

UI本身被分成许多子屏幕和主/详细视图,以便能够有效/轻松地编辑大量数据。

问题在于存储您当前未查看的所有数据。

对于大型记录,执行Web服务提交最多需要30秒,因此将Web服务用于间歇性数据存储是不可行的。

如上所述,数据可能非常大(多个兆字节,在边缘情况下可能是几千兆字节的数据)

这适用于ASP.Net 4.0,带有MS-SQL后端和第三方SOAP Web服务。

不能选择更改Web服务合同。

以下是我们的一些想法。帮助我选择,或者找出更好的东西!

1)初始开发人员将序列化的XML投入到会话中(机上会话)。我很快发现这是一个问题,因为以这种方式使用会话可能会因占用的内存以及负载平衡问题等而严重影响性能。

2)会话服务器 - 可能,但需要额外的硬件购买可能不是一个选项

3)SQL会话 - 存储这么大的对象的性能?

4)将XML写入磁盘/共享(压缩?)

5)将XML写入SQL(压缩?)

6)SQL关系数据库 - 为每个实体类型创建表。这将允许单个子实体加载/保存,这可能对性能有很大影响。我们担心脆弱性和维护,因为我们不控制第三方服务(尽管我们确实有这个问题,因为GUI也很脆弱)

7)viewstate - 方式太大,性能很高

1 个答案:

答案 0 :(得分:5)

选项6可能是你最好的选择。听起来你必须处理维护服务数据结构的变化。您可能会想出一个架构,您可以将数据从服务“拉”到数据存储,让用户使用它,然后在完成后“推送”数据。

您可能也有兴趣了解非SQL数据存储。无架构或基于文档的数据存储可能会降低您的维护成本,同时仍允许您存储整个模型,并在事后根据查询检索它们。