13P by neo 2023-10-03 | favorite | 댓글 1개
  • Buildkite는 PK로 새로운 UUIDv7 표준을 채택하여 이전의 시퀀셜 PK와 UUID 보조 키 시스템을 대체
  • UUIDs (Universally Unique Identifiers)는 독립적으로 생성할 수 있는 고유 식별자로, 분산 시스템과 데이터베이스에서 널리 사용중
  • UUIDs는 예측 불가능성, 내부 정보의 민감한 정보 공개 방지, 추가적인 방어층 제공 등 순차적 정수 식별자보다 여러 가지 장점을 제공
  • 그러나 표준 비시간 순서 UUID의 무작위성은 데이터베이스 성능 문제를 초래할 수 있음
  • 이를 해결하기 위해, Buildkite는 시간 순서의 UUIDv4 호환 UUID를 실험했고, 이는 주 데이터베이스의 Write Ahead Log (WAL) 비율을 50% 줄였음
  • UUID 버전 7 (UUIDv7)은 가장 중요한 48비트에 유닉스 타임스탬프를 밀리초 단위로 인코딩하고, 나머지 74비트는 무작위로 생성됨
  • Buildkite는 모든 새 테이블의 주요 키로 UUIDv7을 사용하기로 결정했으며, 이는 식별자 생성의 조정 필요성을 제거하고 애플리케이션 로직을 단순화함
  • Instagram의 ShardingID 구현과 Shopify의 복합 주요 키 구현과 같은 대안이 고려되었지만, 팀은 UUIDv7을 선택
  • UUIDv7로의 전환은 UUID의 128비트 길이로 인해 추가 저장 공간이 필요하지만, 이는 데이터베이스 행의 나머지 저장 공간에 비해 미미함
  • 현재 가장 큰 Postgres 데이터베이스를 샤딩하고 있으며, 필요한 경우 식별자에 샤드 번호를 포함하기 위해 미래에 UUIDv8을 사용할 가능성이 있음
Hacker News 의견
  • UUIDv7는 순서가 있는 키로 인해 내부 분산 시스템에 유익하지만, 잠재적인 보안 문제로 인해 공개 식별자로는 적합하지 않을 수 있다.
  • 무작위 ID는 성능에 안 좋다고 주장되지만, 실제로는 단일 노드의 핫스팟을 방지하기 때문에 분산 저장 시스템에 더 좋다.
  • 식별자의 변화하는 요구사항과 원하는 속성 때문에 UUID의 여러 버전이 있다.
  • UUIDv7는 효율적인 색인화를 위한 순차적인 기본 키의 이점과 외부 사용을 위한 UUID 보조 키를 결합한다.
  • UUIDv7의 잠재적인 문제점 중 하나는 사용자가 ID에서 생성 시간을 추출할 수 있다는 것이다.
  • PostgreSQL용 UUID v7 함수가 오픈소스로 공개되어, 일괄 삽입의 속도 향상과 같은 이점을 제공한다.
  • UUIDv7는 Postgres uuid 타입과 함께 사용할 수 있으며, 이는 올바른 길이를 가진 모든 데이터를 받아들인다.
  • 일부는 데이터 크기와 생성 날짜에 대한 정보를 숨기기 위해 순차적인 64비트 기본 키와 추가적인 무작위 64비트 키를 외부 사용을 위해 선호한다.
  • UUID는 나중에 병합해야 하는 많은 분리된 소스로부터 키를 생성하는 데 유용하다.
  • GUIDs/UUIDs를 "검증"할 필요성에 대한 논쟁이 있다. 이들은 종종 불투명한 식별자로 취급된다.
  • UUIDv7과 ULIDs 사이의 선택은 특정 요구에 따라 다르며, ULIDs는 UUIDs가 메타데이터에 사용하는 것보다 6비트의 추가 무작위성을 제공한다.