2017-03-22 3 views

답변

0

실제로 낙관적 잠금을 사용하는 경우 물론 여러 응용 프로그램에서 작동합니다. 그것이 낙관적 인 잠금 장치의 핵심입니다. 단일 응용 프로그램에서는 필요하지 않습니다.

하지만 "낙담하지 않기를 바랄뿐"이 아니라 낙관적 인 잠금 장치가되어야합니다. 즉 행의 업데이트는 이어야하며 항상이어야 새 버전 번호가됩니다. A와 B가 업데이트를 시도 할 때 실제로 수행되는 첫 번째 버전은 이전 버전이 증가하므로 다른 버전은 더 이상 일치하는 버전을 가지지 않으며 낙관적 인 동시성이 실패합니다.

+0

A와 B가 동시에 커밋 될 때 데이터베이스는 낙관적이므로 커밋을 거부하지 않습니다. 커밋을 거부하는 기능은 응용 프로그램 자체에서 제어합니다. 여러 응용 프로그램에서 A 응용 프로그램은 B 커밋을 중지 할 수 없습니다. – jr1990

+0

@ jr1990 정말 질문에 코드를 포함해야합니다. 실제로 낙관적 인 동시성을 제대로 구현하지 못하는 것 같습니다. 요점은 DB가 두 커밋을 모두 수용한다는 것이 아니라 오히려 쓸모 없게 만듭니다. 같은 행에 대한 업데이트는 직렬화되어야하며, 이후에 오는 업데이트는 실패합니다 (일반적으로 행 버전이 변경되었으므로 업데이트를 수행하지 않음). 응용 프로그램은 충돌을 해결해야하지만 DB가 충돌 저장소가 성공하도록해서는 안됩니다. – Luaan

관련 문제