Apa itu ULID dan Mengapa Ia Berbeza?
ULID (Universally Unique Lexicographically Sortable Identifier) ialah format pengecam 26 aksara yang direka untuk menjadi lebih pendek daripada UUID, tetapi masih mengekalkan ruang 128 bit. Halaman penjana ULID ini membolehkan anda memilih format ULID, menentukan bilangan ID yang diperlukan (antara 1 hingga 100), dan serta-merta menjana senarai pengecam unik yang boleh diisih mengikut masa penciptaan. Setiap ULID yang dihasilkan sedia untuk disalin secara individu atau kesemuanya sekali.
Yang membezakan halaman ini daripada format lain pada alat yang sama ialah ULID menghasilkan pengecam yang lebih pendek: 26 aksara berbanding UUID 36 aksara. ULID hanya menggunakan abjad Crockford base32, menjadikannya tidak peka huruf besar/kecil dan bebas daripada tanda sempang. Ini bermakna anda tidak akan keliru antara "I" dan "l" atau "O" dan "0", kerana abjad Crockford sengaja meninggalkan huruf yang mengelirukan seperti I, L, O, dan U. Akibatnya, ULID selamat digunakan dalam URL tanpa perlu peratus-pengekodan, dan lebih mudah dibaca oleh manusia.
Halaman ini tidak menawarkan togol untuk huruf besar atau tanda sempang, kerana ULID secara semula jadi tidak peka huruf besar/kecil dan langsung tidak mengandungi tanda sempang. Ini adalah reka bentuk sengaja untuk memudahkan penggunaan dalam pelbagai sistem, dari pangkalan data hingga API awam.
Struktur Dalaman ULID: Masa dan Rawak
Setiap ULID terdiri daripada 128 bit yang dibahagikan kepada dua bahagian utama. 10 aksara pertama (48 bit) mewakili cap masa dalam milisaat. Ini membolehkan ULID diisih secara leksikografik mengikut masa penciptaan — maksudnya, jika anda menyusun senarai ULID mengikut abjad, susunannya sepadan dengan susunan kronologi apabila ID tersebut dihasilkan. Baki 16 aksara (80 bit) adalah komponen rawak yang dijana menggunakan sumber rawak kukuh penyemak imbas, iaitu crypto.getRandomValues().
Formula pengekodan menggunakan abjad Crockford base32. Abjad ini terdiri daripada digit 0–9 dan huruf A–Z, kecuali I, L, O, dan U. Ini menjadikan setiap aksara mewakili 5 bit data (kerana 2^5 = 32). Oleh itu, 26 aksara × 5 bit = 130 bit, tetapi bahagian pertama (timestamp) sebenarnya 48 bit menghasilkan 10 aksara (10 × 5 = 50 bit, tetapi hanya 48 bit digunakan, ada padding), manakala bahagian rawak 80 bit menghasilkan 16 aksara (16 × 5 = 80 bit tepat).
Perlu difahami bahawa ULID boleh diisih mengikut masa, tetapi tidak menjamin susunan ketat untuk ID yang dijana dalam milisaat yang sama. Jika dua ULID dihasilkan pada milisaat yang sama, susunan rawak akan menentukan kedudukan leksikografiknya. Ini adalah had yang sengaja diterima untuk memastikan kebolehskalaan dan prestasi penjanaan tanpa kunci pusat.
Kebarangkalian pertembungan (collision) untuk ULID adalah sangat rendah. Dengan 80 bit rawak, ruang kemungkinan adalah 2^80, iaitu kira-kira 1.2 × 10^24. Namun, jika anda menjana banyak ID dalam milisaat yang sama, kebarangkalian berganda secara kuadratik mengikut bilangan ID. Untuk 1,000 ID dalam satu milisaat, kebarangkalian pertembungan adalah sekitar 10^-15, masih sangat selamat untuk kebanyakan aplikasi.
Bagaimana Halaman Penjana ULID Berfungsi
Halaman ini ringkas dan langsung. Anda mulakan dengan memastikan format ditetapkan kepada ULID (format lalai mungkin berbeza, tetapi pada halaman khusus ini format ULID adalah pilihan utama). Kemudian, masukkan bilangan ID yang dikehendaki — hanya nombor bulat antara 1 hingga 100. Sebaik sahaja anda menekan butang jana (atau apabila sebarang pilihan berubah), alat akan menghasilkan senarai ULID yang sedia digunakan.
Keluaran halaman adalah senarai ULID dalam bentuk teks biasa, setiap satu 26 aksara. Di bawah senarai, alat memaparkan kiraan jumlah ID yang dijana. Terdapat juga status seperti "Sedia.", "Dijana.", dan "Disalin semua!" apabila anda menyalin keseluruhan senarai ke papan klip. Untuk menyalin ID individu, anda hanya perlu klik pada ULID tersebut.
Semua penjanaan berlaku setempat dalam penyemak imbas menggunakan fungsi rawak kriptografi. Tiada data dihantar ke mana-mana pelayan. Ini bermakna privasi anda terpelihara — pengecam yang dijana tidak boleh dikesan atau dipintas oleh pihak ketiga.
Peraturan penting: jika anda menukar mana-mana pilihan (format, kiraan, atau lain-lain), senarai akan dijana semula secara automatik. Ini memastikan anda sentiasa mendapat set ID segar mengikut konfigurasi terkini.
Kelebihan ULID Berbanding UUID
Jadual perbandingan ringkas antara ULID, UUID v4 (rawak) dan UUID v7 (berasaskan masa) boleh membantu:
| Ciri | ULID | UUID v4 | UUID v7 |
|---|---|---|---|
| Panjang aksara | 26 | 36 (termasuk 4 tanda sempang) | 36 (termasuk 4 tanda sempang) |
| Peka huruf besar/kecil | Tidak | Ya (biasanya huruf kecil) | Ya |
| Tanda sempang | Tiada | Ada (4 sempang) | Ada (4 sempang) |
| Isih mengikut masa | Ya (leksikografik) | Tidak | Ya (berasaskan timestamp) |
| Saiz bit | 128 | 122 bit rawak + 6 bit | 128 (48 timestamp + 74 rawak + 6) |
| Abjad | Crockford base32 | Heksadesimal (0-9a-f) | Heksadesimal (0-9a-f) |
| Selamat URL | Ya, tiada pengekodan | Perlu pengekodan untuk aksara tertentu | Perlu pengekodan |
ULID lebih pendek — 26 aksara berbanding 36 — bermakna penjimatan 28% dalam ruang storan dan lebar jalur. Tanpa tanda sempang, ULID lebih mudah disalin dan dihantar dalam sistem yang mungkin mengendalikan tanda sempang secara berbeza. Ketidakpekaan huruf besar/kecil mengurangkan kesilapan manusia semasa memasukkan atau membaca ID secara manual. UUID v4 menggunakan heksadesimal (16 aksara berbeza) manakala ULID menggunakan base32 (32 aksara berbeza), jadi ULID lebih padat setiap aksara.
Bagi pembangun pangkalan data, ULID memberikan kelebihan prestasi indeks B-tree kerana ID baru cenderung meningkat secara monoton mengikut masa. Ini mengurangkan fragmentasi indeks berbanding UUID v4 rawak yang menyebabkan sisipan rawak. UUID v7 juga menyelesaikan masalah ini, tetapi masih menggunakan format 36 aksara dengan tanda sempang.
Had dan Perkara Perlu Diperhatikan
Walaupun ULID menawarkan banyak kelebihan, terdapat beberapa had yang perlu diketahui:
-
Ketidakjaminan urutan milisaat yang sama: Seperti yang dinyatakan, jika anda menjana banyak ULID dalam milisaat yang sama, urutan leksikografiknya adalah rawak. Untuk aplikasi yang memerlukan urutan ketat walaupun dalam milisaat yang sama, anda perlu menggunakan mekanisme tambahan seperti nombor jujukan atau sengaja melambatkan penjanaan.
-
Kebarangkalian pertembungan: Ruang 80 bit adalah besar, tetapi pada kadar penjanaan yang sangat tinggi (jutaan ID sesaat), risiko pertembungan meningkat. Secara teori, selepas menjana kira-kira 2^40 ID (satu trilion), kebarangkalian pertembungan menjadi ketara, tetapi ini masih di luar skop kebanyakan aplikasi.
-
Tiada sokongan untuk huruf besar/kecil pilihan: Oleh kerana ULID tidak peka huruf besar/kecil, halaman ini tidak menawarkan pilihan untuk menukar kes. Jika sistem anda memerlukan format khusus (contohnya, semua huruf besar), anda boleh menukarnya secara manual, tetapi alat ini tidak menyediakan ciri tersebut.
-
Kiraan maksimum 100: Had ini ditetapkan untuk memastikan prestasi dan kebolehbacaan. Jika anda memerlukan lebih banyak ID, anda perlu menjana dalam beberapa kelompok.
-
Tiada jaminan keunikan global: Walaupun kebarangkalian pertembungan sangat rendah, ULID tidak menjamin keunikan global tanpa penyelarasan. Untuk sistem teragih yang besar, anda mungkin perlu menambah awalan nod atau menggunakan penjadual pusat.
Siapa yang Memerlukan Penjana ULID?
Penjana ULID ini berguna untuk pelbagai peranan teknikal:
-
Pembangun web dan mudah alih yang memerlukan pengecam lebih pendek, selamat URL, dan boleh diisih mengikut masa tanpa memerlukan lajur timestamp berasingan. Contohnya, dalam aplikasi yang menghasilkan ID untuk mesejat, dokumen, atau sesi pengguna.
-
Pentadbir pangkalan data yang mereka bentuk kunci utama untuk prestasi sisipan B-tree yang lebih baik. Dengan ULID, indeks kekal lebih padat kerana ID baru cenderung ditambah pada hujung kanan indeks, berbanding UUID rawak yang menyebabkan sisipan rawak.
-
Arkitek sistem yang membina sistem teragih di mana ID mestilah unik merentas banyak nod dan boleh diisih, tetapi masih padat. ULID boleh dijana secara setempat tanpa komunikasi rangkaian, mengurangkan kependaman.
-
Pereka bentuk API yang ingin mendedahkan ID awam yang sukar diteka tetapi mesra manusia — tiada kekeliruan campuran huruf besar/kecil, tiada kekaburan tanda sempang. ULID juga tidak memerlukan peratus-pengekodan dalam URL, memudahkan pengendalian.
-
Sesiapa sahaja yang mendapati UUID terlalu panjang atau tidak selesa untuk digunakan, dan mahukan alternatif yang mengekalkan ruang 128 bit tetapi dalam perwakilan yang lebih kecil. ULID memberikan keseimbangan antara panjang, rawak, dan kebolehurutan.
Soalan Lazim (FAQ)
1. Adakah ULID benar-benar unik secara global? Tiada penjamin unik global secara mutlak. ULID menggunakan 80 bit rawak, memberikan ruang sebanyak 2^80 kemungkinan. Kebarangkalian pertembungan adalah sangat rendah untuk bilangan ID yang munasabah, tetapi secara teori pertembungan boleh berlaku. Untuk kebanyakan aplikasi, ini adalah risiko yang boleh diterima.
2. Bolehkah saya menggunakan ULID sebagai kunci utama dalam pangkalan data? Ya, dan ia sering disyorkan berbanding UUID v4 kerana sifat boleh diisih mengikut masa yang mengurangkan fragmentasi indeks. Walau bagaimanapun, pastikan sistem pangkalan data anda menyokong rentetan 26 aksara sebagai kunci, dan pertimbangkan prestasi indeks pada lajur teks.
3. Adakah semua ULID yang dijana dalam masa yang sama akan diisih dengan betul? Tidak semestinya. ULID hanya menjamin urutan mengikut masa pada resolusi milisaat. Dalam milisaat yang sama, urutan rawak digunakan kerana komponen rawak akan menentukan kedudukan leksikografik. Jika anda memerlukan urutan yang ketat walaupun dalam milisaat yang sama, tambah mekanisme seperti nombor jujukan.
4. Mengapa halaman ini tidak mempunyai pilihan untuk menambah huruf besar atau tanda sempang? ULID direka tanpa tanda sempang dan tidak peka huruf besar/kecil. Menambah pilihan tersebut akan mengubah format standard ULID. Alat ini menghasilkan ULID tulen mengikut spesifikasi Crockford base32, di mana kedua-dua huruf besar dan kecil dianggap sama. Untuk kebanyakan kes penggunaan, ini memadai.
5. Berapa banyak ID yang boleh saya hasilkan pada satu masa? Antara 1 hingga 100 ID. Had ini ditetapkan untuk memastikan antara muka kekal responsif dan senarai mudah dibaca. Jika anda memerlukan lebih, ulangi proses penjanaan.
6. Adakah ID ini dijana di pelayan atau di pelayar saya?
Semua penjanaan berlaku setempat di pelayar anda menggunakan fungsi crypto.getRandomValues(). Tiada data dihantar ke mana-mana pelayan. Oleh itu, ID anda kekal peribadi dan tidak boleh dipintas oleh pihak ketiga.
Penjana ULID ini adalah alat praktikal yang menggabungkan kesederhanaan dengan kuasa pengecam berstruktur. Sama ada anda membina sistem baru atau menambah baik sistem sedia ada, ULID menawarkan keseimbangan antara panjang, rawak, kebolehurutan, dan kemudahan penggunaan yang sukar ditandingi oleh format lain.