2011-07-29 11 views
0

다음과 같은 간단한 시나리오가 있습니다.이 특정 시나리오에서 어떤 종류의 데이터베이스 잠금을 사용해야합니까?

세 대의 컴퓨터가 영화 예약 테이블을 업데이트합니다. 전체 테이블을 잠 그거나 업데이트 될 좌석 수에 해당하는 행을 고정해야합니까? 여기서 낙관적 동시성 제어를 고려해 볼 수 있습니까?

필자는 낙관적이고 비관적 인 동시성 제어에 대해 조사한 결과 서로 다른 잠금 장치를 발견하고 어느 시나리오에 가장 적합한 지 궁금해하고있었습니다.

+1

숙제 인 경우 [숙제] 태그를 사용하십시오. 숙제가 아닌 경우이 애플리케이션에 실제로 사용할 실제 데이터베이스의 이름을 지정하십시오. 대부분의 RDBMS는 행 잠금을 수행하지만 행 잠금을 수행하지 않는 RDBMS를 사용할 수도 있습니다. –

+0

이것은 숙제가 아닙니다. 나는 단지 낙관적이고 비관적 인 동시성 제어에 대해 조사하고 있었고 다른 잠금에 대해 비틀 거리며 어느 시나리오에 가장 적합한 지 궁금해하고있었습니다. – roz

+1

"낙관적이고 비관적 인 동시성 제어에 대해 조사하고 있었고 다른 잠금 장치를 발견했습니다." 괜찮아. 링크를 사용하면 도움이 될 수 있으므로 귀하의 이야기를 알 수 있습니다. "어떤 시나리오에 가장 적합한 지 궁금해." 이 질문에 오직 하나의 시나리오가 있습니다. 또한 이것은 RDBMS의 자동 기능입니다. 기본 잠금 전략을 무시하는 것에 대해 묻고 있습니까? –

답변

1

DBMS가 이러한 잠금을 처리해야합니다. 이미 예약 된 좌석을 업데이트하려고하지 말아야합니다.

update seat 
set status = 'BOOKED', booking_ref = :booking_ref 
where seat_no = :seat_no -- identify the seat to book 
and status = 'FREE';  -- ensure it is currently free 

두 세션이 동시에 같은 좌석을 예약하려고 시도하면 하나는 성공하고 다른 하나는 실패합니다. 코드가 성공했는지 여부를 확인해야합니다.

낙관적 대 비관적 잠금은 DBMS 문제가 아닌 응용 프로그램입니다. 이 모든 것을 여기에 들어가기보다는 existing SO question으로 안내 할 것입니다.

+0

내부적으로 어떻게 처리 되었습니까? 행 잠금, 테이블 잠금 등의 Throughthe 사용? 어느 동시성 제어 메커니즘, 낙관적 인 또는 비관적인가? – roz

+1

그 대답은 DBMS에 따라 다를 수 있습니다. 이상적으로, 행 잠금 - 목적을 달성하기 위해 잠글 필요가있는 최소값을 잠급니다. 낙관적 잠금과 비관적 잠금은 전혀 다른 문제이며 데이터베이스 문제가 아닌 애플리케이션 문제입니다. –

+0

잘하면 테이블 잠금! 그 시스템은 아주 잘 확장되지 않을 것입니다 .... –

관련 문제