Apa itu UUID?
UUID (Universally Unique Identifier) ialah pengecam 128-bit yang direka untuk menjadi unik merentasi ruang dan masa — tanpa memerlukan pihak berkuasa pusat. Hasilnya adalah rentetan 36 aksara dalam format:
550e8400-e29b-41d4-a716-446655440000
Ia mengekod 32 digit heksadesimal dalam lima kumpulan yang dipisahkan oleh tanda sempang: 8-4-4-4-12.
Versi UUID Dijelaskan
UUID v1 — Berasaskan masa + alamat MAC
Menggabungkan cap masa dengan alamat MAC antara muka rangkaian. Tersusun secara kronologi tetapi mendedahkan alamat MAC dan cap masa penciptaan tepat — masalah privasi.
UUID v4 — Rawak (paling biasa)
Mengisi 122 bit dengan data rawak yang selamat secara kriptografi. Tiada keadaan, rangkaian atau koordinasi diperlukan. Pilihan lalai untuk kebanyakan kes penggunaan.
UUID v5 — Namespace + SHA-1
Deterministik: namespace + nama yang sama = UUID yang sama setiap kali. Utamakan v5 berbanding v3 (MD5 sudah lapuk).
UUID v7 — Tersusun masa (standard baharu)
Menggunakan cap masa Unix milisaat dalam bit paling signifikan. UUID boleh diisih secara semula jadi dan meningkatkan prestasi indeks B-tree pangkalan data dengan ketara.
Mengapa Menggunakan UUID?
- Tiada koordinasi pusat: Mana-mana klien atau perkhidmatan mikro boleh menjana UUID secara bebas.
- Keselamatan melalui kekaburan: ID integer berurutan mendedahkan isipadu data anda. UUID tidak mendedahkan apa-apa.
- Penggabungan pangkalan data: Jadual berkunci UUID digabung tanpa konflik.
- Penjanaan luar talian: Aplikasi mudah alih boleh mencipta rekod luar talian dan menyegerak kemudian.
- Standard industri: Sokongan terbina dalam setiap pangkalan data dan rangka kerja utama.
Bila TIDAK Menggunakan UUID?
- Overhead storan: Gunakan
BINARY(16)dalam MySQL atau jenisuuidasli dalam PostgreSQL, bukanVARCHAR(36). - Slug URL: Terlalu panjang dan tidak mudah diingat. Gunakan slug yang boleh dibaca untuk URL yang menghadap pengguna.
- Fragmentasi indeks dengan v4: Untuk jadual penulisan tinggi, gunakan UUID v7 atau ULID.
VARCHAR(36) dalam jadual bervolum tinggi. Gunakan BINARY(16) dengan UUID_TO_BIN(uuid, 1).
Jana UUID dalam Kod
JavaScript
const id = crypto.randomUUID(); // v4
Python
import uuid; id = str(uuid.uuid4())
PHP
use Ramsey\Uuid\Uuid;
$v4 = Uuid::uuid4()->toString();
$v7 = Uuid::uuid7()->toString();
SQL
-- MySQL: SELECT UUID();
-- PostgreSQL: SELECT gen_random_uuid();
Amalan Terbaik
- Simpan sebagai binari:
BINARY(16)atau jenisuuidasli PostgreSQL. - Gunakan v4 untuk kebanyakan kes.
- Gunakan v7 untuk kunci utama pangkalan data.
- Elakkan v1 dalam konteks sensitif privasi.
- Sahkan format UUID pada input.
- Sentiasa gunakan huruf kecil.
Soalan Lazim
Bolehkah dua UUID menjadi sama?
Secara teori ya. Kebarangkalian perlanggaran v4 adalah kira-kira 1 dalam 5.3×1036. Dalam amalan, anda tidak akan menghadapi perlanggaran dalam mana-mana sistem sebenar.
v4 atau v7 untuk kunci utama pangkalan data?
v7 untuk kunci utama. v4 memasukkan di kedudukan rawak dalam indeks B-tree. v7 memastikan sisipan di penghujung indeks.
Adakah UUID sensitif huruf besar/kecil?
Tidak. Spesifikasi tidak sensitif huruf. Mengikut konvensyen, sentiasa gunakan huruf kecil.