/ / Spring data mongodb同時取得および更新はスレッドセーフですか? - java、春、マルチスレッド、mongodb、並行性

Springのデータmongodbの同時取得と更新はスレッドセーフですか? - java、spring、multithreading、mongodb、並行性

次のような問題があります。私のmongodbデータベースに保存されている値を合計または減算するJavaサービスがあります。

たとえば、データベースに値100があり、サービスが値10で呼び出されると、次のようになります。

  • データベースから値100を取得します
  • 100と値10を合計します
  • データベースに新しい値(110)をもう一度保存します

しかし、私は「並行性を恐れています。多くの人が同じサービスを呼び出すとどうなりますか?」プロセスの最後で矛盾する価値を恐れています。

質問は:上記のこのプロセスはスレッドセーフですか? (そうではないと思います)。データの一貫性を保ち、このスレッドの並行性を処理するためにはどうすればいいですか。

更新

以下はコードに従います

public void update(Size entity, Integer newValue) {
Size size = repository.findOneById(entity.getId());
size.setTotal(size.getTotal() + newValue);
repository.update(size);
}

回答:

回答№1は2

いいえ、 スレッドセーフではありません それは原子的に行われていないので MongoDBトランザクションデータベースではない、あなたが使用することになっています $inc それが増加することを可能にするのでそのような必要性のためのオペレータ 原子的に 与えられた金額の与えられたフィールド、詳細 ここに.