🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

벌크 연산과 동기화 시점관련 질문

21.09.24 12:29 작성 조회수 278

0

벌크 연산 수행 후 

em.flush(), em.clear() 를 통해 동기화 해주셨는데

 

벌크 연산 작업 과 다른 비즈니스 로직의 타이밍이 일치하게 될 경우 (이 때 서로 같은 엔티티를 다루는 케이스가 있다고 가정)

 

비즈니스 로직에서 예를 들어 어떤 포인트를 100 올려주는 로직이 실행되고 (user a)

+ 어떤 (user b)는 포인트 100 감소

 

벌크 연산에서는 포인트가 3000이상인 경우 30% 증가라는 작업이 이루어 질때,
(비즈니스 로직이 먼저 진행 사건이라고 가정, 근데 타이밍이 애매하게 걸치면)
위의 비즈니스 로직이 적용되기 전에 포인트 벌크 작업이 진행될 수 도 있을 것 같습니다.


(예시가 좀 좋지 않은것 같긴한데요)
이런 케이스를 막기 위해서는 user a와 b의 결과가 적용될 수 있도록 em.flush(), em.clear()의 동기화 작업을 먼저하고 
벌크 연산을 해줘야 하나? 라는 생각이 들었는데

이런 케이스에서는 벌크 작업 후 동기화해도 문제가 없을까요?

답변 1

답변을 작성해보세요.

0

안녕하세요. 승현님

해당 작업들이 끝나고(커밋까지 완료) 벌크연산을 실행해주어야 정상 반영됩니다.

감사합니다.

채널톡 아이콘