UUIDv7은 생각하는 것과 다른 특성을 가짐

1 week ago 16

UUIDv7은 흔히 단조 증가, 생성 시각, 추측 불가능성을 장점으로 내세우지만, RFC를 준수하는 구현도 이 특성을 보장하지 않을 수 있음 내장 타임스탬프는 실제 객체 생성 시각과 다를 수 있으며, RFC는 구현이 시간을 수정하도록 허용하고 실제 시각과의 오차 한도를 정하지 않음 Python의 uuid.uuid7() 은 시스템 시계가 뒤로 이동한 뒤 밀리초당 1개를 넘는 부하로 ID를 생성하면, 내장 시각과 시스템 시각의 차이가 제한 없이 커질 수 있음 UUIDv7은 대략적인 순서를 제공하지만 엄격한 단조 증가는 보장하지 않음. 노드 간 시계 오차뿐 아니라 단일 노드의 카운터 없는 구현이나 재시작도 순서를 깨뜨릴 수 있음 공통적으로 기대할 특성은 고유성과 강한 충돌 회피이며, 나머지는 구현의 보장 범위와 전제 조건을 확인해야 함. 대략적인 정렬만으로 충분하다면 UUIDv7은 여전히 유용함 내장 타임스탬프는 생성 시각이 아닐 수 있음 UUIDv7에 기대하는 단조 증가, 유용한 생성 시각, 추측 불가능성은 모두 엄격하게 보장되는 특성이 아님 UUIDv7 ID의 추측 가능성에 대한 별도 논의도 있음 ID에 정확한 생성 시각이 들어 있다면 별도 생성 시각 열과 인덱스를 줄일 수 있음 생성 순서로 자주 조회할 때 기본 인덱스만으로 처리할 수 있어 데이터베이스 작업이 조금 더 효율적일 수 있음 하지만 실제 UUIDv7 타임스탬프는 객체 생성 시각과 무관할 수 있어 이러한 전제를 그대로 적용할 수 없음 Postgres의 uuid_extract_timestamp 문서도 추출한 시각이 UUID 생성 시각과 반드시 정확히 일치하지는 않는다고 경고함 RFC 9562는 단조 증가와 시각 정확성 사이의 절충을 허용함 §6.1은 실제 타임스탬프를 수정할 수 있도록 허용하며, 시계 값이 실제 시각에 얼마나 가까워야 하는지 요구하거나 보장하지 않음 §6.2는 타임스탬프를 실제 시각보다 앞서 증가시키는 것도 허용함 특정 상황에서는 내장 시각과 현재 시각의 차이가 임의로 커질 수 있음 생성 부하로 카운터가 반복해서 넘치면 타임스탬프가 미래로 빠르게 이동할 수 있음 RFC의 카운터 최소 크기 권고는 12비트이며, 이 크기에서 오버플로가 발생하려면 노드당 밀리초에 4,096개를 넘는 높은 생성률이 필요함 많은 시스템에서는 도달하기 어려운 부하지만, 타임스탬프가 고정되면 오버플로가 문제가 될 수 있음 Python uuid.uuid7()의 시각 오...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵