【发布时间】:2011-09-14 22:11:44
【问题描述】:
我的公司有一个第三方网络服务,我们正在为其设计一个前端。此 Web 服务使用的“对象”非常大(并且根据创建的子实体的数量而变化)。 Web 服务不公开提交/加载子实体的方法,只公开完整的对象层次结构。
UI 本身被分成许多子屏幕,主/详细视图能够高效/轻松地编辑大量数据。
问题是存储您当前未查看的所有数据的位置。
对于大的记录来说,web service 提交最多需要 30 秒,所以使用 web service 来进行间歇性数据存储是不可行的。
如前所述,数据可能非常大(数兆字节,在边缘情况下可能达到千兆字节)
这适用于 ASP.Net 4.0,具有 MS-SQL 后端和第 3 方 SOAP Web 服务。
更改网络服务合同不是一种选择。
以下是我们的一些想法。帮助我选择或找出更好的东西!
1) 最初的开发人员将序列化的 XML 放入会话(机器上会话)中。我很快发现这是一个问题,因为以这种方式使用会话可能会由于内存占用以及负载平衡问题等而严重影响性能。
2) 会话服务器 - 可能,但为此需要额外购买硬件可能不是一种选择
3) SQL session - 存储这么大的对象的性能?
4) 将 XML 写入磁盘/共享(压缩?)
5) 将 XML 写入 SQL(压缩?)
6) SQL 关系数据库 - 为每个实体类型创建表。这将允许单独的子实体加载/保存,这可能对性能很有帮助。我们担心脆弱性和维护问题,因为我们无法控制 3rd 方服务(尽管我们确实有这个问题,因为 GUI 也会很脆弱)
7) 视图状态 - 太大,性能命中
【问题讨论】:
-
也许你应该看看 json 对象 json.org 这些天它正在取代 XML。由于与 XML 相比符号简单,因此数据量也会减少
-
这是一个很好的建议,但是我们必须维护 XML 序列化才能使 Web 服务正常工作,因此 JSON 意味着维护两组水合逻辑。 (尽管 XML 部分大部分是自动生成的)。
-
在您的标题中您提到了“会话”数据,这让我相信这些信息在某种程度上是特定于用户的。对吗?
-
是的,所有这些数据都是每个用户每次交易的数据