- Buildkite đã áp dụng tiêu chuẩn UUIDv7 mới làm PK, thay thế hệ thống PK tuần tự trước đây và khóa phụ UUID
- UUID (Universally Unique Identifiers) là các định danh duy nhất có thể được tạo độc lập, được sử dụng rộng rãi trong các hệ thống phân tán và cơ sở dữ liệu
- UUID mang lại nhiều lợi thế so với định danh số nguyên tuần tự, như tính khó đoán, tránh làm lộ thông tin nội bộ nhạy cảm và cung cấp thêm một lớp phòng vệ
- Tuy nhiên, tính ngẫu nhiên của UUID tiêu chuẩn không theo thứ tự thời gian có thể gây ra vấn đề về hiệu năng cơ sở dữ liệu
- Để giải quyết điều này, Buildkite đã thử nghiệm một UUID tương thích UUIDv4 có thứ tự theo thời gian, và điều này đã giúp giảm 50% tỷ lệ Write Ahead Log (WAL) của cơ sở dữ liệu chính
- UUID phiên bản 7 (UUIDv7) mã hóa dấu thời gian Unix theo mili giây trong 48 bit quan trọng nhất, còn 74 bit còn lại được tạo ngẫu nhiên
- Buildkite đã quyết định sử dụng UUIDv7 làm khóa chính cho mọi bảng mới, qua đó loại bỏ nhu cầu phối hợp khi tạo định danh và đơn giản hóa logic ứng dụng
- Các phương án thay thế như triển khai ShardingID của Instagram và triển khai khóa chính tổng hợp của Shopify cũng đã được cân nhắc, nhưng nhóm đã chọn UUIDv7
- Việc chuyển sang UUIDv7 đòi hỏi thêm không gian lưu trữ do UUID dài 128 bit, nhưng phần tăng thêm này là không đáng kể so với phần còn lại của dung lượng lưu trữ của mỗi hàng trong cơ sở dữ liệu
- Hiện tại họ đang shard cơ sở dữ liệu Postgres lớn nhất của mình, và trong tương lai có thể sử dụng UUIDv8 để đưa số shard vào định danh nếu cần
1 bình luận
Ý kiến trên Hacker News
uuidcủa Postgres, vốn chấp nhận mọi dữ liệu có đúng độ dài.