피드로 돌아가기
Dev.toDatabase
원문 읽기
39ns의 초고속 파싱 속도로 인한 UnixNano() 한계를 Atomic Counter로 해결
Why NornicDB Uses Its Own Monotonic Counter for MVCC Ordering
AI 요약
Context
NornicDB의 MVCC 계층에서 UnixNano() 기반 타임스탬프를 사용하여 Snapshot Isolation의 버전 순서를 결정함. 하지만 Linux CLOCK_REALTIME의 NTP 보정으로 인한 시간 역전 현상과 하드웨어 해상도보다 빠른 파서 속도로 인해 동일 타임스탬프 내 다수 커밋이 발생하는 정렬 불능 상태가 발생함.
Technical Solution
- CommitTimestamp와 CommitSequence 쌍을 도입하여 (Timestamp, Sequence) 순서의 Total Order 보장
- 버전 비교 로직을 Timestamp 우선에서 Sequence 우선으로 변경하여 시간 역전 시에도 일관된 순서 유지
- process-wide atomic uint64 counter를 통한 전역 단조 증가 시퀀스 생성
- HLC 대비 단순한 구조를 채택하여 단일 노드 환경의 오버헤드 최소화
- runtime.nanotime의 Go 런타임 의존성을 배제하여 향후 분산 노드 확장 가능성 확보
- 10억 TPS 기준 약 584년의 오버플로우 주기 설계를 통한 카운터 유효성 확보
실천 포인트
- 분산/멀티코어 환경에서 time.Now()의 단조 증가성을 전제로 한 로직 설계 여부 검토 - NTP Step이나 VM 마이그레이션으로 인한 시간 역전 가능성을 고려한 버전 관리 전략 수립 - 고성능 루프 내에서 타임스탬프 중복 발생 가능성을 확인하고 Atomic Counter 도입 고려