MVCC는 다양한 방식으로 구현 될 수 있습니다. 유일한 요구 사항은 어떻게 든 오래된 행 버전을 사용할 수 있다는 것입니다.
예를 들어 SQL Server는 서버를 다시 시작할 때 다시 설정되는 임시 데이터베이스에이 데이터베이스를 저장합니다.
Postgres는 행 버전을 숨겨진 행으로 b- 트리에 직접 저장합니다. 트리에 숨겨진 키 열을 추가합니다. 트리에서 읽을 때 논리적으로 볼 수있는 버전 만 노출됩니다.
RavenDB의 Voron은 b- 트리 페이지를 변경 불가능한 데이터로 관리합니다. 쓰기는 완전히 새로운 트리를 만듭니다. 따라서 MVCC는 올바른 불변 트리에서 읽기로 구현됩니다.
데이터베이스는 물리적 구조를 장시간 잠그는 경우가 거의 없습니다. 데이터베이스 클라이언트가 데이터베이스 내부 구조의 진행을 멈추게하는 것은 좋지 않습니다. 내부 구조는 대개 잠깐 잠겨 있습니다. 논리적 행 잠금은 별도로 처리됩니다.
내가 추측해야만한다면 concurrency control on search structures
은 물리적 스레드 안전성을 나타냅니다. MVCC는 여러 버전을 관리 할 필요가 없으므로 대개 MVCC와 관련이 없습니다. 짧은 메모리 접근을 위해서는 보통의 메모리 잠금만으로도 충분합니다.
출처
2016-07-30 20:40:27
usr