私は、各従業員の残高が異なる毎月末に残高が更新される1000人の従業員(以下のサンプル)のリストがあるシナリオを持っています。スプリングデータMongoDBはバルク更新でデータの整合性を維持しています
{
_id:1
name:"John"
balance:40
},
ここで同じことを実行するのが最善の方法でしょう。 1
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).
かだけでなく、データベースのデータの整合性の最大の成功のチャンスを保証することができます彼らの他の方法である可能性があり、それを実行しますパフォーマンスの観点から良い。
私はスケーラビリティに関して2番目の点に同意しました。最初のアプローチの問題は、アトミック更新が単一のドキュメントのみの更新を保証するか、複数のオブジェクトに対して同じバランスの値を更新する必要がある場合でも正常に動作することです。ただし、異なる従業員が異なる残高を持つ場合、複数のクエリの実行につながり、アトミック性の保証が取り消されます。 – tarunkumar