2017-12-01 3 views
1

내가 두 작업을 필요로 키 값을 저장을 알리는 기사의 숫자를 읽고 : 키/값 저장소가 동시성을 관리하는 방법은 무엇입니까?

  • get(key)
  • 이 하나의 프로세스에 대한 괜찮

  • set(key, value)
    • 을하지만, 여러 프로세스가있을 때, 키 값 저장소가 동시성을 어떻게 관리합니까? 에 대해 사용 된 버전 번호 (예 : 부호없는 정수)를 생각하면 스타일 동시성이 필요합니다. 예를 들어, 두 작업은 다음과 같습니다 version조건입니다
      • set(key, value, version)

        는 - 불일치는 동시성 오류가 발생하고 성공적인 일치가 증가됩니다.
      • get(key) (valueversion 모두를 반환).
    +0

    대부분의 키/값 구조는 모든 작업에서 스레드로부터 안전하지 않습니다. 데이터 경쟁을 피하는 것은 사용자의 몫입니다. – iamnoten

    +0

    뮤텍스 등을 사용하여 데이터 레이스를 피하십시오? 공유 된 KV 저장소가있는 별도의 컴퓨터에서는 불가능합니다. – magnus

    +0

    공유 KV 매장의 경우 데이터베이스처럼 작동하며 일반적으로 경쟁 처리 메커니즘이 서로 다릅니다. 특정 문서를 확인해야합니다. 귀하의 버전 번호 솔루션은 그 중 하나 일 수도 있지만 실제 구현은 더욱 복잡합니다. – iamnoten

    답변

    0

    두 가지 디자인이 있습니다. 일부는 잠금 장치를 사용하고 다른 장치는 MultiVersion Concurrency Control을 사용합니다.

    MVCC는 잠금없이 동시성을 구현합니다. 그것은으로 요약 될 수있다 : 하나의 읽기에서

    • , 데이터베이스가 databae이 경우에는 데이터를
    • 를 새로운 버전을 추가, 하나의 쓰기에서 데이터의 최신 버전
    • 을 반환 읽기/쓰기 동시 요청의 경우, 읽기는 현재 쓰기 전의 데이터의 가장 최신 버전을 가져옵니다.
    • 쓰기/쓰기 동시 요청의 경우 나는 쓰기 중 하나가 취소되어 나중에 재생된다고 생각합니다.
    관련 문제