Generator KSUID - Buat Pengenal Unik yang Dapat Diurutkan
Hasilkan Pengenal Unik K-Sortable (KSUID) secara daring. Buat ID yang dapat diurutkan berdasarkan waktu dan tahan terhadap tabrakan untuk sistem terdistribusi dan basis data secara instan.
Generator KSUID
Dokumentasi
Generator KSUID
KSUID (K-Sortable Unique Identifier) adalah kode sepanjang 27 karakter yang digunakan untuk memberi label pada catatan seperti baris basis data, entri log, atau permintaan API. Kode ini menggabungkan stempel waktu dengan data acak, sehingga ID yang dibuat belakangan selalu diurutkan setelah ID yang dibuat lebih awal, meskipun masing-masing tetap secara efektif unik. Alat ini menghasilkan satu KSUID di browser dan memungkinkan pengguna menyalinnya.
KSUID terdiri dari apa?
KSUID memiliki panjang 20 byte, yang dibagi menjadi dua bagian:
- Stempel waktu (4 byte): jumlah detik sejak titik awal tetap yang disebut epoch KSUID.
- Payload acak (16 byte): data yang dihasilkan oleh generator bilangan acak kriptografis browser.
20 byte tersebut kemudian dikonversi menjadi teks menggunakan pengodean base62, yaitu sistem yang merepresentasikan angka menggunakan 62 karakter: digit 0-9, huruf besar A-Z, dan huruf kecil a-z. Hasilnya selalu diberi padding hingga tepat 27 karakter, misalnya 0qjBBlJIfbVLKwnJn4xpLGDr00e.
Karena stempel waktu berada di bagian awal, dua KSUID yang dibuat dengan selisih satu detik biasanya akan diurutkan dalam urutan yang sama dengan waktu pembuatannya jika dibandingkan sebagai teks biasa. Karena 16 byte terakhir bersifat acak, dua KSUID yang dibuat pada detik yang sama hampir pasti tetap berbeda.
Epoch KSUID
Sebagian besar sistem komputer menghitung waktu dalam detik sejak 1 Januari 1970 (disebut "epoch Unix"). KSUID menggunakan titik awal yang berbeda, yaitu epoch KSUID: 1.400.000.000 detik setelah epoch Unix, yaitu 13 Mei 2014, 16:53:20 UTC.
Penggunaan titik awal yang lebih akhir memungkinkan bidang stempel waktu sepanjang 4 byte mencakup lebih banyak tahun yang berguna sebelum kehabisan kapasitas. Penghitung sepanjang 4 byte (32 bit) dapat menampung paling banyak 4.294.967.295 detik. Jika dihitung sejak epoch KSUID, rentang waktu tersebut berakhir sekitar 19 Juni 2150.
Rumus KSUID
String KSUID dibuat melalui tiga langkah.
-
Temukan nilai stempel waktu:
T = floor(current_unix_time_in_seconds) − 1,400,000,000 -
Hasilkan 16 byte acak,
R, menggunakan pembangkit bilangan acak yang aman secara kriptografi. -
Gabungkan stempel waktu sepanjang 4 byte dan 16 byte acak menjadi satu blok sepanjang 20 byte, lalu enkodekan blok tersebut dalam base62 dengan memberi padding pada hasilnya hingga 27 karakter:
KSUID = Base62( T ‖ R )
Di sini, ‖ berarti "menempatkan satu setelah yang lain." Byte stempel waktu selalu berada di bagian awal, sehingga string akhir dapat diurutkan dengan benar berdasarkan waktu.
Contoh perhitungan
Misalkan bagian stempel waktu suatu KSUID adalah 100000000. Karena epoch KSUID berada 1.400.000.000 detik setelah epoch Unix, stempel waktu ini menunjukkan 14 Juli 2017, 02:40:00 UTC.
Padukan stempel waktu tersebut dengan urutan 16 byte 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (digunakan di sini hanya agar contoh dapat direproduksi; generator sebenarnya menggunakan byte acak), dan pengodean base62 menghasilkan:
0qjBBlJIfbVLKwnJn4xpLGDr00e
String tersebut memiliki panjang 27 karakter, hanya terdiri dari digit dan huruf, serta aman digunakan langsung dalam URL atau nama berkas.
Cara menggunakan alat generator KSUID
- Buka halaman generator KSUID.
- Pilih tombol "Generate KSUID".
- Alat ini membuat satu KSUID baru menggunakan waktu saat ini dan byte acak baru, lalu menampilkannya di halaman.
- Pilih tombol "Copy KSUID" untuk menyalin nilainya ke papan klip.
- Pilih "Reset" untuk menghapus hasil. Tombol Reset hanya muncul setelah KSUID dibuat.
Setiap kali tombol "Generate KSUID" diklik, tepat satu identifier dihasilkan. Untuk membuat beberapa KSUID, klik tombol tersebut lagi untuk setiap KSUID baru; alat ini tidak memiliki mode batch atau ekspor berkas.
Generator ini mengandalkan Web Crypto API yang tersedia di browser modern. Jika API tersebut tidak tersedia, alat akan menampilkan kesalahan dan tidak menghasilkan ID, karena generator bilangan acak yang tidak aman secara kriptografis dapat menghasilkan identifier yang lebih mudah ditebak atau mengalami tabrakan.
KSUID dibandingkan dengan UUID
UUID (Universally Unique Identifier) adalah format pengenal alternatif yang umum. Versi yang paling banyak digunakan, UUID v4, memiliki panjang 36 karakter dan hampir seluruhnya tersusun dari bit acak, sehingga dua UUID tidak memberikan petunjuk tentang mana yang dibuat lebih dahulu.
KSUID berbeda dalam tiga hal:
- Dapat diurutkan berdasarkan waktu. Byte stempel waktu di bagian awalnya membuat pengurutan alfabetis biasa terhadap string KSUID juga mengurutkannya berdasarkan waktu pembuatan.
- Lebih pendek. KSUID memiliki 27 karakter, dibandingkan dengan 36 karakter untuk UUID standar.
- Tanpa pemisah. UUID biasanya ditulis dengan tanda hubung (
xxxxxxxx-xxxx-...); KSUID tidak memilikinya.
Kedua format dapat dibuat secara independen di komputer yang berbeda tanpa memeriksa ke server pusat, sehingga keduanya menghindari kemacetan yang ditimbulkan oleh penghitung auto-increment dalam basis data bersama.
Pertanyaan yang sering diajukan
Apa kepanjangan KSUID? K-Sortable Unique Identifier. Huruf "K" mengacu pada kemampuan identifier ini untuk diurutkan ("agak dapat diurutkan" dalam catatan desain awal dari Segment, perusahaan yang membuat format tersebut).
Berapa panjang KSUID? 27 karakter, dienkodekan menggunakan base62 (digit 0-9, huruf besar, dan huruf kecil).
Apa epoch KSUID? 13 Mei 2014, 16:53:20 UTC, yaitu 1.400.000.000 detik setelah epoch Unix standar, 1 Januari 1970.
Bisakah dua KSUID mengalami tabrakan? Kemungkinannya sangat kecil. Setiap KSUID mencakup 16 byte acak (128 bit), yang dihasilkan oleh pembangkit bilangan acak yang aman secara kriptografi. Bahkan jika banyak KSUID dibuat pada detik yang sama, kemungkinan dua di antaranya secara kebetulan memiliki nilai yang sama tetap sangat kecil.
Bisakah waktu pembuatan dipulihkan dari KSUID? Ya. 4 byte pertama dari nilai yang didekodekan merupakan stempel waktu. Menambahkan jumlah detik tersebut ke epoch KSUID akan menghasilkan waktu pembuatan awal.
Apakah alat ini mendukung pembuatan banyak KSUID sekaligus? Tidak. Alat ini menghasilkan satu KSUID setiap kali tombol "Generate KSUID" diklik. Tidak ada input jumlah, bidang stempel waktu khusus, atau fitur ekspor/pengunduhan.
Apakah KSUID aman dimasukkan ke dalam URL? Ya. Pengodean base62 hanya menggunakan digit dan huruf, sehingga KSUID tidak memerlukan pelolosan tambahan untuk digunakan dalam URL, nama berkas, atau kunci basis data.
Referensi
- Repositori GitHub KSUID milik Segment: https://github.com/segmentio/ksuid
- "Generating good unique identifiers" oleh Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html