2010-04-25 1 views
1

콘서트 석이나 항공권의 온라인 주문의 경우, 레코드 레벨 잠금이 필요하거나 거래가 충분합니까?온라인 주문을위한 거래가 이미있을 때 레코드 잠금이 필요합니까? (콘서트 티켓 또는 항공 예약)

콘서트 티켓 (예 : 좌석 번호 20B) 또는 항공권 (초과 예약의 경우에도 한도는 210)의 경우 항공권 구매 화면을 표시 할 때 웹 사이트에서 기록을 잠글 수 없거나 거래를 시작할 수 없다고 생각합니다.

하지만 사용자가 "구매 확인"을 클릭 한 후 서버는 거래 시작, 좌석 번호 20B 구매 및 커밋을 시도해야합니다.

다른 사용자가 이전 트랜잭션에서 Seat 20B를 이미 구입 한 경우 현재 트랜잭션이 실패하는 것이 "Commit"부분입니까?

그래서 ... 우리는 레코드 잠금을 필요로하지 않습니까? 트랜잭션은 항상 연 속적으로 처리 됩니 까? 그래서 이것이 우리가 "경쟁 조건"이 없는지를 알 수있는 이유입니다. 어떤 상황에서 레코드 레벨 잠금이 필요합니까?

답변

0

행 삽입 전에 동일한 SeatId가있는 항목이 있는지 확인할 수 있습니다. 존재하는 경우 롤백하고 그렇지 않으면 행을 삽입하고 커밋합니다. 나는 심지어 Cofident도 아니고 나는 서비스가 꽤 바쁠 경우 삽입 작업을 시작하기 전에 잠글 필요가 있다고 생각한다.

그러나 흥미로운 두 번째 옵션이 있습니다.

showIdseatId 은이 두 개의 색인으로 유지 관리해야합니다. 이 색인에 고유 한 제한 조건을 작성하십시오. 이제 잠금을 사용하여 트랜잭션을 시작하십시오. 복제가있는 경우 고유 한 제약으로 인해 분명히 실패 할 것입니다. 커밋이 실패합니다.