我有一个应用程序,它在用户连接时从数据库(Mongo)获取数据,并在用户断开连接时以固定的时间间隔保存数据,以减少服务器停机时数据丢失的可能性。我正在使用数据访问对象将用户保存到数据库,该数据库更新每个字段,无论它是否已更改。这可能会导致问题,例如当用户加入多个服务器并对其中一台服务器进行更改,但当用户与另一台服务器断开连接时,这些更改会被覆盖。
是否有任何既定的方法可以仅保留已修改的字段或任何执行此操作的框架?我不想为每个字段使用 boolean 值,因为我在 User
对象内有许多字段,并且向每个字段添加脏标志会显着增加类大小。
最佳答案
您的应用程序采取的步骤:
用户从 MongoDB 获取数据
此数据已部分修改
修改应该被保存
这意味着:应用程序中修改数据的部分应该注意这一点。
<小时/>Spring 团队在几个月前推出了一些 Diff 工具:https://spring.io/blog/2014/10/22/introducing-spring-sync
使用它,您将获得一个 Patch 对象,其中仅包含更改。
Patch patch = Diff.diff(original, modified);
这是一种可能有效的方法:
对象数据 = mongoClient.getData();
对象modifiedData = 修改(data);
补丁 patch = Diff.diff(data,modifiedData);
补丁
现在包含所有已更改的内容。现在,您必须以某种方式使用 Patch 对象的内部结构并将其映射到 MongoDB 的 $set
命令。
关于java - 仅保留更改的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29312004/