나는 게임의 백엔드에서 일하고있다. 플레이어는 먼저 데이터베이스에 저장된 티켓을 구매 한 다음 특정 상을받을 수 있습니다. 각 플레이어는 최대 60 장의 티켓을 구입할 수 있습니다.db lock을 피하는 방법
게임 당 총 티켓 수 - 10,000 티켓의 상한선을 설정하는 새로운 요구 사항이 나타났습니다. 구현은 구입 시점에 구매 한 총 티켓 수 + 현재 구매에 필요한 티켓 수가 해당 게임의 최대 티켓 수보다 작거나 같은지 확인하여 구매 엔드 포인트에 추가하는 작업을 포함합니다. 받아 들여진다.
티켓 테이블의 수를 사용하여 구매 한 티켓의 현재 수를 계산하면 다른 플레이어가 티켓을 구입할 수 있기 때문에 반환 값이 유효하지 않을 수 있습니다.
가능한 해결 방법은 구매 중에 티켓 표를 잠그는 것이지만 성능 및 사용자 환경에 부정적인 영향을 줄 수 있습니다. 다른 생각이 있으면 알려주세요.
데이터베이스 레벨에서 잠금을 설정하는 대신 [Semaphore] (https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html)를 사용하도록 고려 했습니까? –
신분증을 가지고도 신분을 삭제하지 않고 카운트를하는 대신, 맥스와 맥을 이용하여 서로를 공제하여 즉시 카운트를 얻을 수 있습니다. – Hozikimaru