【问题标题】:Persist Only Changed Fields仅保留更改的字段
【发布时间】:2015-03-27 23:56:45
【问题描述】:

我有一个应用程序,它在用户连接时从数据库 (Mongo) 获取数据,并在用户断开连接时以固定的时间间隔保存数据,以减少服务器出现故障时数据丢失的可能性。我正在使用数据访问对象将用户保存到数据库中,该数据库会更新每个字段,无论它是否已更改。这可能会导致问题,例如当用户加入多个服务器并对其中一个服务器进行更改但当用户与另一台服务器断开连接时更改会被覆盖。

是否有任何既定方法可以仅保留已修改的字段或任何框架可以做到这一点?我不想对每个字段都使用布尔值,因为我在 User 对象中有很多字段,并且为每个字段添加脏标志会显着增加类大小。

【问题讨论】:

    标签: java mongodb


    【解决方案1】:

    您的应用程序采取的步骤:

    1. 用户从 MongoDB 获取数据

    2. 此数据已部分修改

    3. 应该保存修改

    这意味着:修改数据的应用程序部分应该负责。


    Spring 团队几个月前介绍了一些 Diff 工具:https://spring.io/blog/2014/10/22/introducing-spring-sync

    使用它,您将获得一个仅包含更改的 Patch 对象。

    Patch patch = Diff.diff(original, modified);
    

    这是一种可行的方法:

    1. Object data = mongoClient.getData();
    2. Object modifiedData = modify(data);
    3. Patch patch = Diff.diff(data, modifiedData);

    patch 现在包含已更改的所有内容。现在您必须以某种方式使用 Patch 对象的内部并将其映射到 MongoDB 的 $set 命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 2016-10-24
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 2013-02-04
      相关资源
      最近更新 更多