2011-04-22 7 views
10

낙천적 동시성 제어 (OCC)와 다중 버전 동시성 제어 (MVCC)의 차이점은 무엇입니까?낙관적 인 대 다중 버전 동시성 제어 - 차이점?

지금까지 두 버전 모두 업데이트를 확인하는 데 기반한다는 것을 알고 있습니다.

OCC에서 읽고 액세스 할 수있는 잠금을 얻지 못한 트랜잭션에 대해 읽었습니다. 이후 버전의 업데이트에 대해서만 버전이 증가하고 버전 확인이 실패 할 경우 실패합니다. 이 경우 트랜잭션이 롤백됩니다.

MVCC에서는 기본적으로 동일하지 않습니까? 차이점은 무엇입니까?

+0

압축 할 때까지 여러 버전을 저장하고 있습니까? –

+0

예, MVCC는 데이터베이스 엔진, 캐시 등에서 쓰기가 차단되지 않고 격리 된 읽기를 제공하는 데 사용되는 구현 메커니즘입니다. –

+0

@Binil Thomas 예, 제가 이해 한 것과 같은 목적을 가지고 있습니다. 그것이 질문이 떠오르는 이유입니다 :) –

답변

13

때때로 그들은 상호 교환 적으로 사용된다고 생각합니다. 그리고 트랜잭션이 하나의 객체만을 포함한다면 그것들은 근본적으로 동일하지만, MVCC는 낙관적 인 동시성 (또는 그것의 버전)의 확장으로 하나 이상의 객체 관련되어있다. 두 객체 A와 B가 있다고 가정 해 봅시다. 그들은 합이 일정한 두 개의 숫자입니다. 이제 트랜잭션 T1은 A에서 10을 빼고이를 B에 추가합니다. 동시에 다른 트랜잭션 T2가 두 개의 수를 읽습니다. 비록 당신이 낙관적으로 A와 B를 업데이트한다면 (CAS CAS), T2는 두 숫자의 일관성없는보기를 가져올 수 있습니다 (예를 들어, A가 수정되기 전에 A를 읽었을 때 수정 된 후에 B를 읽는 경우). MVCC는 T2가 이전 값을 반환함으로써 A 및 B의 일관된 뷰를 읽도록 보장합니다. 즉, 이전 버전을 저장해야합니다.

요약하면 낙관적 잠금 (또는 낙관적 동시성 제어)은 동기화를 사용하지 않는 잠금의 일반적인 원칙입니다. MVCC는 여러 객체에 걸쳐있는 격리 된 트랜잭션을 허용하는 낙관적 인 기술입니다.

3

직접 질문을 올리려면, 다중 버전 동시성 제어 (MVCC)는 낙관적 동시성 제어 (OCC)의 범주에 속하는 동시성 제어 방법이다.

2 개 주 동시성 제어 방법이 있습니다

  • 비관적 동시성 제어 :이 방법은 충돌하는 작업이 더 자주 (가 비관적이라고 그 이유는) 일어날 것으로 가정합니다. 충돌이 자주 발생하기 때문에이 방법은 충돌하는 작업이 사용되는 것을 방지하기 위해 잠금을 사용합니다. 사용시 상당한 오버 헤드가 없다고 가정합니다.
  • 낙관적 동시성 제어 :이 방법은 충돌하는 작업이 드물고 자주 발생하지 않는다고 가정합니다. 이 가정 하에서 잠금 장치는 성능에 오버 헤드가 필요하지 않은 상당한 &을 부과합니다. 이러한 이유로,이 접근법은 일반적으로 트랜잭션을 잠그는 것을 피하고 트랜잭션을 실행하는 동안 다른 트랜잭션과 충돌이 있는지 여부를 확인합니다 (각 트랜잭션의 커밋에서). 충돌이있는 경우이 방법은 상충되는 작업이있는 트랜잭션을 중단하는 것으로 진행됩니다.

비관적 동시성 제어의 널리 알려진 알고리즘 중 하나는 2-phase locking입니다.낙관적 동시성 제어

두 널리 공지 된 알고리즘은 다음

이들 2 개 알고리즘의 주요 차이점은 다음과 같다. 타임 스탬프 기반 알고리즘은 각 객체에 하나의 (더 정확하게 동작 유형별로 하나씩, 읽기는 & 쓰기) 타임 스탬프를 할당하며 액세스 한 마지막 트랜잭션을 나타냅니다. 따라서 각 트랜잭션은 개체에 액세스 한 마지막 트랜잭션과 충돌하는 경우 작업 중에 확인합니다. 다중 버전 접근법은 각 객체가 트랜잭션에 해당하는 여러 버전을 유지 관리합니다. 결과적으로 잠재적으로 상충되는 트랜잭션이 경우에 따라 중단되지 않고 새 버전을 작성할 수 있기 때문에 다중 버전 접근 방식은 첫 번째 접근 방식보다 중단 횟수가 적습니다. 그러나 이것은 모든 버전에 필요한 더 많은 스토리지 비용으로 이루어집니다.

0

Dimos의 답을 수정하기 위해 타임 스탬프 기반 동시성 제어는 여전히 비관적 인 방법입니다 (실행 단계에서 트랜잭션을 중단하거나 차단할 수 있음).

관련 문제