Web 客户机-服务器数据交换持久性-更新

Web 客户机-服务器数据交换持久性-更新,web,caching,architecture,client-server,cqrs,Web,Caching,Architecture,Client Server,Cqrs,假设我有一个客户端,它向服务器发送一些带有输入的RunLogicCommand。服务器响应一些输出,这些输出是供用户验证的报告。此时,服务器还没有保存任何内容。然后,客户机在一个单独的SaveCommand中发回整个报告,该命令将保存报告数据 对我来说,这种交流的某些部分似乎是不必要的。也就是说,一旦用户验证了报告,他们似乎就没有必要将整个报告发送回服务器进行持久化。也许这里也有可能暴露一些敏感数据 在这种情况下,典型的方法是什么 我可以看到两种选择: 用户只是再次发送带有输入的runlogic

假设我有一个客户端,它向服务器发送一些带有输入的RunLogicCommand。服务器响应一些输出,这些输出是供用户验证的报告。此时,服务器还没有保存任何内容。然后,客户机在一个单独的SaveCommand中发回整个报告,该命令将保存报告数据

对我来说,这种交流的某些部分似乎是不必要的。也就是说,一旦用户验证了报告,他们似乎就没有必要将整个报告发送回服务器进行持久化。也许这里也有可能暴露一些敏感数据

在这种情况下,典型的方法是什么

我可以看到两种选择:

  • 用户只是再次发送带有输入的runlogic命令,并使用一些标志指定它应该被持久化。我真的不喜欢这个选项,因为逻辑可能很复杂,需要一些时间来计算
  • 将报表缓存在服务器(或其他服务,甚至数据库)上,然后让客户端发回SaveCommand和要保存的报表的ID 这两种方法都有问题吗?是否有更好、更典型的方法


    谢谢

    这里没有单一的最佳解决方案:

    您首先提到的方法的缺点是:

    • 网络流量增加,成本可能增加,响应速度变慢
    • 您能确定您发送的文件与收到的文件相同吗。你可以,但这需要额外的工作
    • 正如您所提到的,敏感数据暴露的风险增加了。但是,您正在将其发送到客户端
    两个选项中的第一个选项的缺点是:

    • 运行两次报告会增加服务器上的负载,由于需要更多的处理能力,因此会产生额外的成本
    • 如果两个请求之间的基础数据发生了更改。然后,用户验证的报告和存储在数据库中的报告可能不相同
    我将使用第二种选择的变体:

    • 生成报告后立即将其存储在数据库中,状态为“等待用户验证”
    • 当用户验证报告时,将状态更新为已验证
    • 为了避免数据库中有许多未验证的报告,可以使用批处理作业来检查和删除所有早于x天的未验证报告

    谢谢你的回答。我想这可以归结为权衡一个人的具体情况。您是否愿意详细说明为什么喜欢DB批处理作业而不是服务器端缓存?在我的例子中,DTU可能更昂贵。如果您将报告放入数据库并将其持久化到磁盘,那么它丢失的可能性比在内存缓存中要小。此外,如果这是您使用缓存的唯一目的,那么只使用数据库的解决方案将意味着更少的移动部件和可能出错的事情。