13 poin oleh GN⁺ 2023-10-03 | 1 komentar | Bagikan ke WhatsApp
  • Buildkite mengadopsi standar UUIDv7 baru sebagai PK, menggantikan sistem PK sekuensial sebelumnya dan kunci bantu UUID
  • UUID (Universally Unique Identifiers) adalah pengenal unik yang dapat dibuat secara independen, dan banyak digunakan dalam sistem terdistribusi serta basis data
  • UUID menawarkan berbagai keunggulan dibanding pengenal integer berurutan, seperti sifat yang sulit ditebak, mencegah pengungkapan informasi internal yang sensitif, serta memberikan lapisan pertahanan tambahan
  • Namun, sifat acak dari UUID standar yang tidak berurutan berdasarkan waktu dapat menimbulkan masalah performa basis data
  • Untuk mengatasi hal ini, Buildkite bereksperimen dengan UUID yang berurutan berdasarkan waktu dan kompatibel dengan UUIDv4, yang mengurangi rasio Write Ahead Log (WAL) pada basis data utama sebesar 50%
  • UUID versi 7 (UUIDv7) mengodekan stempel waktu Unix dalam milidetik pada 48 bit paling signifikan, sementara 74 bit sisanya dihasilkan secara acak
  • Buildkite memutuskan untuk menggunakan UUIDv7 sebagai kunci utama untuk semua tabel baru, yang menghilangkan kebutuhan koordinasi dalam pembuatan pengenal dan menyederhanakan logika aplikasi
  • Alternatif seperti implementasi ShardingID milik Instagram dan implementasi kunci utama gabungan milik Shopify sempat dipertimbangkan, tetapi tim memilih UUIDv7
  • Transisi ke UUIDv7 memerlukan ruang penyimpanan tambahan karena panjang UUID yang 128 bit, tetapi ini relatif kecil dibanding sisa ruang penyimpanan pada baris basis data
  • Saat ini mereka sedang melakukan sharding pada basis data Postgres terbesar mereka, dan di masa depan ada kemungkinan menggunakan UUIDv8 untuk menyertakan nomor shard dalam pengenal jika diperlukan

1 komentar

 
GN⁺ 2023-10-03
Komentar Hacker News
  • UUIDv7 bermanfaat untuk sistem terdistribusi internal karena key yang berurutan, tetapi mungkin tidak cocok sebagai identifier publik karena potensi masalah keamanan.
  • ID acak sering diklaim buruk untuk performa, tetapi dalam praktiknya justru lebih baik untuk sistem penyimpanan terdistribusi karena mencegah hotspot pada satu node.
  • Ada beberapa versi UUID karena kebutuhan dan sifat yang diinginkan dari identifier terus berubah.
  • UUIDv7 menggabungkan keunggulan primary key berurutan untuk pengindeksan yang efisien dengan secondary key UUID untuk penggunaan eksternal.
  • Salah satu potensi masalah UUIDv7 adalah pengguna dapat mengekstrak waktu pembuatan dari ID.
  • Fungsi UUID v7 untuk PostgreSQL telah dirilis sebagai open source, menawarkan manfaat seperti peningkatan kecepatan untuk batch insert.
  • UUIDv7 dapat digunakan dengan tipe uuid di Postgres, yang menerima data apa pun dengan panjang yang benar.
  • Sebagian orang lebih memilih primary key 64-bit berurutan dan tambahan key 64-bit acak untuk penggunaan eksternal, guna menyembunyikan informasi tentang ukuran data dan tanggal pembuatan.
  • UUID berguna untuk membuat key dari banyak sumber terpisah yang nantinya perlu digabungkan.
  • Ada perdebatan tentang perlunya "memvalidasi" GUID/UUID. Keduanya sering diperlakukan sebagai identifier yang opak.
  • Pilihan antara UUIDv7 dan ULID bergantung pada kebutuhan spesifik; ULID menawarkan tambahan 6 bit randomisasi dibandingkan yang digunakan UUID untuk metadata.