/ / Spring data mongodb jednocześnie pobiera i aktualizuje wątek jest bezpieczny? - java, wiosna, wielowątkowość, mongodb, współbieżność

Wiosenne dane mongodb współbieżne pobieranie i aktualizowanie jest bezpieczne dla wątków? - Java, wiosna, wielowątkowość, mongodb, współbieżność

Mam następujący problem: Mam usługę Java, która sumuje lub odejmuje wartość przechowywaną w mojej bazie danych Mongodb.

Na przykład, jeśli mam wartość 100 w bazie danych, a moja usługa jest wywoływana z wartością 10, wówczas występują następujące zdarzenia:

  • Otrzymuję wartość 100 z bazy danych
  • Sumuję 100 wartością 10
  • Ponownie zapisuję nową wartość (110) w bazie danych

Obawiam się jednak współbieżności. Co się stanie, jeśli wiele osób wywoła tę samą usługę? Obawiam się niespójnej wartości na końcu procesu.

Pytanie brzmi: Ten proces opisany powyżej jest bezpieczny dla wątków? (Wierzę, że tak nie jest). Co powinienem zrobić, aby zachować spójność moich danych i radzić sobie z tą współbieżnością wątków?

AKTUALIZACJA

Poniżej następuje kod

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

Odpowiedzi:

2 dla odpowiedzi № 1

Nie, nie jest bezpieczny dla wątków ponieważ odtąd nie odbywa się to atomowo MongoDB jest nie transakcyjna baza danych, powinieneś użyć $inc operatora dla takiej potrzeby, ponieważ pozwala to na zwiększenie atomowo podane pola podanych kwot, więcej szczegółów tutaj.