- 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을 사용할 가능성이 있음