Timestamp 기법은 데이터베이스 동시성 제어 기법 중 하나입니다. 이 기법은 각 트랜잭션마다 타임스탬프를 할당하고, 데이터베이스에 저장된 데이터의 타임스탬프와 비교하여 동시성을 제어하는 방식입니다.

1) Read timestamp

Read timestamp는 데이터베이스의 MVCC (Multi-Version Concurrency Control) 기법 중 하나로, 트랜잭션이 읽은 데이터의 최신 버전을 판단하기 위해 사용되는 타임스탬프입니다.

특정 트랜잭션이 데이터를 읽을 때, 그 시점에 읽힌 데이터의 버전을 알기 위해 해당 트랜잭션의 시작 시점에 할당된 타임스탬프와 데이터의 버전 정보를 비교합니다. 이를 통해 해당 트랜잭션이 읽은 데이터의 버전이 현재의 최신 버전인지 판단하고, 이를 기반으로 다음 동작을 수행합니다.

예를 들어, 트랜잭션 T1이 테이블의 행 A를 읽을 때, T1이 시작된 시점에 할당된 타임스탬프를 사용하여 A의 버전 정보와 비교합니다. 만약 A의 버전 정보가 T1이 읽은 시점에 이미 업데이트 되어 최신 버전이 아니라면, T1은 해당 버전의 데이터를 참조하지 않고 다시 최신 버전의 데이터를 읽도록 시도합니다.

  1. Write timestamp

Write timestamp는 데이터베이스의 MVCC (Multi-Version Concurrency Control) 기법 중 하나로, 트랜잭션이 데이터를 변경할 때, 새로운 데이터의 버전을 판단하기 위해 사용되는 타임스탬프입니다.

특정 트랜잭션이 데이터를 변경할 때, 해당 트랜잭션의 시작 시점에 할당된 타임스탬프를 사용하여 새로운 버전을 생성합니다. 그리고 이 버전 정보를 데이터와 함께 저장하며, 이를 Write timestamp라고 합니다.

예를 들어, 트랜잭션 T2가 테이블의 행 B를 변경할 때, T2가 시작된 시점에 할당된 타임스탬프를 사용하여 B의 새로운 버전을 생성합니다. 그리고 이 버전 정보를 B와 함께 저장합니다. 이후, 다른 트랜잭션이 B를 읽을 때, Read timestamp와 비교하여 최신 버전을 판단하게 됩니다.

  1. Commit timestamp

Commit timestamp은 트랜잭션이 커밋된 시간을 의미합니다. 모든 트랜잭션은 커밋될 때 새로운 timestamp 값을 부여받습니다. Commit timestamp은 해당 트랜잭션을 다른 트랜잭션과 구분하기 위한 용도로 사용됩니다.

Commit timestamp을 사용하면 두 개 이상의 트랜잭션이 동일한 데이터를 갱신할 때 발생할 수 있는 갱신 분실 문제를 방지할 수 있습니다. 예를 들어, 트랜잭션 A와 B가 동일한 데이터를 갱신하고 A가 B보다 먼저 커밋되었다면, B의 변경 내용은 무시됩니다.

또한 Commit timestamp은 데이터베이스에서 복구 작업을 수행할 때 유용합니다. 데이터베이스가 비정상적으로 종료되거나 시스템 장애가 발생할 경우, Commit timestamp을 사용하여 마지막으로 커밋된 트랜잭션 이후의 변경 내용만을 복구할 수 있습니다.

따라서, Commit timestamp은 데이터베이스의 데이터 일관성과 복구 기능에 매우 중요한 역할을 합니다.

이러한 방식의 timestamp 기법은 트랜잭션 간 충돌을 최소화하면서 동시성 제어를 달성합니다. 하지만 시스템 시간의 정확성을 보장할 수 없기 때문에, 대부분의 데이터베이스에서는 다른 기법과 함께 사용됩니다. 또한, timestamp 기법은 일반적으로 쓰기 작업이 많은 시스템에서 성능이 저하될 수 있습니다.

Timestamp 기법의 장단점