spring data MongoDB 在批量更新中保持数据完整性

问题描述 投票:0回答:2

我有一个场景,其中有 1000 名员工的列表(下面的示例),他们的余额在每个月末更新,每个员工的余额可能不同。

{
  _id:1
  name:"John"
  balance:40
},

现在执行相同操作的最佳实践是什么。一项一项地执行

for (Employee employee : employeeList) {
        employee.update();
    }

dropAll employees where id in (All employees ids)
mongoOperations.insert(employeeList, Employee.class);

或者第三种方法可能是

Load all employee records.
Insert employee records to a new collection say employee_temp.
Drop old collection (employee).
Rename newly inserted collection as old one (employee).

或者他们的任何其他方式可以保证数据库数据完整性的最大成功机会,并且从性能角度来看也很好。

mongodb spring-data spring-data-mongodb
2个回答
0
投票

采用第一种方法。一件一件地做。不要使用“原子更新”来保存整个对象,这样会表现得更好。 Query query = Query.query(Criteria.where("id").is(id)); Update update = Update.update("balance", balance); mongoTemplate.findAndModify(query, update, FindAndModifyOptions.options().returnNew(true), Employee.class);

您的第二个和第三个将无法扩展。不建议在运行时删除集合。重命名集合有其
限制


0
投票

如果批量更新过程成功完成,我们将删除检查点集合,如果失败,我们将重新执行对新值与员工记录不匹配的所有记录的更新。

但是,如果您的设计允许,最好选择混合数据库,其中将事务数据保存在某些关系数据库中,其余部分则依赖于 mongo。

© www.soinside.com 2019 - 2024. All rights reserved.