13 điểm bởi GN⁺ 2023-10-03 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

 
GN⁺ 2023-10-03
Ý kiến trên Hacker News
  • UUIDv7 có lợi cho các hệ thống phân tán nội bộ nhờ khóa có thứ tự, nhưng có thể không phù hợp làm định danh công khai vì các vấn đề bảo mật tiềm ẩn.
  • ID ngẫu nhiên thường bị cho là không tốt cho hiệu năng, nhưng trên thực tế lại phù hợp hơn với hệ thống lưu trữ phân tán vì tránh tạo điểm nóng trên một nút duy nhất.
  • Có nhiều phiên bản UUID vì các yêu cầu thay đổi theo thời gian và những thuộc tính mong muốn của định danh.
  • UUIDv7 kết hợp lợi ích của khóa chính tuần tự để lập chỉ mục hiệu quả với khóa phụ UUID dùng cho mục đích bên ngoài.
  • Một vấn đề tiềm ẩn của UUIDv7 là người dùng có thể trích xuất thời gian tạo từ ID.
  • Hàm UUID v7 cho PostgreSQL đã được công bố mã nguồn mở, mang lại các lợi ích như tăng tốc độ chèn hàng loạt.
  • UUIDv7 có thể được dùng với kiểu uuid của Postgres, vốn chấp nhận mọi dữ liệu có đúng độ dài.
  • Một số người thích dùng khóa chính 64-bit tuần tự cùng với khóa 64-bit ngẫu nhiên bổ sung để dùng bên ngoài, nhằm che giấu thông tin về kích thước dữ liệu và ngày tạo.
  • UUID hữu ích để tạo khóa từ nhiều nguồn tách biệt cần được hợp nhất về sau.
  • Có tranh luận về sự cần thiết phải "xác thực" GUID/UUID, vì chúng thường được xem là các định danh opaque.
  • Việc chọn giữa UUIDv7 và ULID phụ thuộc vào yêu cầu cụ thể; ULID cung cấp thêm 6 bit ngẫu nhiên so với phần UUID dùng cho metadata.