여기에는 최소 2 개의 비즈니스 프로세스가 포함됩니다.
이용 가능한 좌석을 보여줍니다.
선택한 좌석을 예약하십시오.
이러한 프로세스는 서로 적절하게 따르지 않기 때문에 두 사람이 같은 자리를 선택할 수 있기 때문에 동시성 문제가 발생합니다.
데이터베이스 디자인이 다음과 같은 조합으로 올바른 고유 제한 조건을 지정하는 경우 :
극장 ID
-SeatID
-이벤트 ID
고유 한 경우 데이터베이스가 중복을 방지합니다.
다음과 같은 시나리오도 가능하지만 위에서 제안한 구현으로 처리됩니다.
주어진 극장 및 주어진 이벤트에 대해 사용 가능한 격자보기를 가정 할 수 있습니다.
- User1은 사용 가능한 좌석을 표시하고 좌석 1과 2를 얻습니다.
- User2는 사용 가능한 좌석을 표시하고 좌석 1과 2를 얻습니다.
- User1은 전화로 고객과 조금 대화합니다.
- 사용자 2가 가서 고객을 위해 좌석 2를 예약합니다
- User1이 고객의 좌석 2를 예약하려고합니다 (화면에 사용 가능한 것으로 표시되어 있기 때문에)
- 고유 인덱스는 5 단계에서 데이터를 통근하지 못하게합니다.
따라서 당신이해야 할 일은 더 정확한 데이터베이스 디자인과 제약 조건에 대한 적절한 선택 일 수 있습니다.
원하는 경우 트랜잭션 큐를 사용하여 더 복잡한 다른 방법이 가능합니다. 이 경우 요청은 먼저 대기열에 기록 된 다음 n 초마다 프로세스를 시작하지만 사용자의 경우에는 거의 필요하지 않거나 실용적이지 않습니다.
정말 흥미로운 부분은 사용자 1의 목록 표에 무엇을 표시해야 하는가입니다.