【问题标题】:calculate object delta计算对象增量
【发布时间】:2010-11-23 13:32:24
【问题描述】:

我正在开发一个应用程序,其中客户端和服务器共享一个对象模型,并且对象图可能会变得相当大。

为了将对象从客户端保存到服务器,理想情况下我只想通过线路发送差异,以最大限度地减少网络流量。我可以在服务器上拉取原始对象图并将增量应用到它

想知道那里是否有任何工具或项目,或者是否有人有过这样做的经验..

非常感谢

【问题讨论】:

标签: c# .net wcf distributed


【解决方案1】:

我正在计划我的第一个 N 层架构,并在我即将发布类似的问题时遇到了这个问题。到目前为止,我看到的所有示例代码每次都通过线路传递整个对象图,而不考虑实际进行了哪些更改。我一直在考虑采用上述方法。虽然,这似乎是一条少有人走的路。

我喜欢只传回每个修改属性的增量的想法。对于集合属性,这将是添加和删除的内容。对于单值属性,它可能只是新值。我可以以一种通用的方式实现这一点,这样这些增量的累积对于所有域对象都是透明的。并且增量将以一般形式通过网络发送,而不使用特定于我的域模型的 DTO 类。

这让我想知道我是否不能通过使用相同的通用增量数据结构在服务器到客户端的方向上进行通信来进一步实现这个想法。毕竟,您可以拥有一个基本上填充空对象的增量。然后我可以完全消除硬编码的 DTO 类。我在 Google 上搜索了“通用 DTO”(不带引号)并找到了 this 和 this。看起来其他人已经在实践中应用了这个想法。

【讨论】:

    【解决方案2】:

    在之前的工作中,我们想要在客户之间共享大型 3-D 模型。鉴于模型大小和带宽限制,要保存实际的模型更改是不可能的。

    我们选择序列化数据上的操作,而不是发送整个更改的模型。例如,操作可能是 {CUT plane: (pt1, pt2, pt3)} 或 {DRILLHOLE (point, radius, depth)}。这对我们的应用非常有用,尽管它可能不适合您的模型。

    另外,马修关于计算哈希或时间戳的建议是一个很好的建议。此外,也许您可​​以保留唯一键的哈希表,以便服务器知道哪些被删除,哪些被添加。

    【讨论】:

      【解决方案3】:

      您可以通过让您的对象能够根据其属性值计算其自身的哈希值来节省一些带宽。比较服务器对象哈希和客户端对象哈希,如果不同,更新相应的。

      【讨论】:

      • 同样,您可以使用时间戳甚至脏标志。
      猜你喜欢
      • 2013-06-10
      • 1970-01-01
      • 2014-04-19
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 2013-12-08
      相关资源
      最近更新 更多