Penjana KSUID - Hasilkan Pengenal Unik Boleh Disusun
Hasilkan Pengenal Unik K-Boleh Disusun (KSUID) dalam talian. Hasilkan ID yang boleh disusun mengikut masa, tahan perlanggaran untuk sistem teragih dan pangkalan data serta-merta.
Penjana KSUID
Dokumentasi
Penjana KSUID
KSUID (Pengecam Unik Boleh Diisih-K) ialah kod 27 aksara yang digunakan untuk melabel rekod seperti baris pangkalan data, entri log atau permintaan API. Ia menggabungkan cap masa dengan data rawak, jadi ID yang dibuat kemudian sentiasa diisih selepas ID yang dibuat lebih awal, walaupun setiap satunya masih pada dasarnya unik. Alat ini menjana satu KSUID dalam pelayar dan membolehkan pengguna menyalinnya.
Apakah kandungan KSUID?
KSUID mempunyai panjang 20 bait, yang dibahagikan kepada dua bahagian:
- Cap masa (4 bait): bilangan saat sejak titik permulaan tetap yang dipanggil epok KSUID.
- Muatan rawak (16 bait): data yang dihasilkan oleh penjana nombor rawak kriptografi pelayar.
20 bait tersebut kemudiannya ditukar kepada teks menggunakan pengekodan base62, iaitu sistem yang mewakili nombor menggunakan 62 aksara: digit 0-9, huruf besar A-Z dan huruf kecil a-z. Hasilnya sentiasa dipadatkan kepada tepat 27 aksara, contohnya 0qjBBlJIfbVLKwnJn4xpLGDr00e.
Oleh sebab cap masa datang dahulu, dua KSUID yang dibuat dalam jarak satu saat biasanya akan diisih mengikut susunan yang sama dengan masa penciptaannya apabila dibandingkan sebagai teks biasa. Oleh sebab 16 bait terakhir adalah rawak, dua KSUID yang dibuat pada saat yang sama masih hampir pasti berbeza.
Epok KSUID
Kebanyakan sistem komputer mengira masa dalam saat sejak 1 Januari 1970 ("epok Unix"). KSUID menggunakan titik permulaan yang berbeza, iaitu epok KSUID: 1,400,000,000 saat selepas epok Unix, iaitu 13 Mei 2014, 16:53:20 UTC.
Penggunaan titik permulaan yang lebih lewat membolehkan medan cap masa 4 bait meliputi lebih banyak tahun yang berguna sebelum kehabisan ruang. Pembilang 4 bait (32 bit) boleh menyimpan paling banyak 4,294,967,295 saat. Jika dikira dari epok KSUID, tempoh tersebut berakhir sekitar 19 Jun 2150.
Formula KSUID
Rentetan KSUID dibina dalam tiga langkah.
-
Cari nilai cap masa:
T = floor(current_unix_time_in_seconds) − 1,400,000,000 -
Jana 16 bait rawak,
R, menggunakan penjana nombor rawak yang selamat dari segi kriptografi. -
Gabungkan cap masa 4 bait dan 16 bait rawak menjadi satu blok 20 bait, kemudian kodkan blok itu dalam base62 dan padatkan hasilnya kepada 27 aksara:
KSUID = Base62( T ‖ R )
Di sini ‖ bermaksud "meletakkan satu selepas yang lain." Bait cap masa sentiasa datang dahulu, dan inilah yang membolehkan rentetan akhir diisih mengikut masa dengan betul.
Contoh pengiraan
Katakan bahagian cap masa suatu KSUID ialah 100000000. Oleh sebab epok KSUID ialah 1,400,000,000 saat selepas epok Unix, cap masa ini mewakili 14 Julai 2017, 02:40:00 UTC.
Padankan cap masa itu dengan jujukan 16 bait 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (digunakan di sini hanya untuk memastikan contoh dapat dihasilkan semula; penjana sebenar menggunakan bait rawak), lalu pengekodan base62 menghasilkan:
0qjBBlJIfbVLKwnJn4xpLGDr00e
Rentetan itu mempunyai panjang 27 aksara, hanya terdiri daripada digit dan huruf, serta selamat digunakan terus dalam URL atau nama fail.
Cara menggunakan alat penjana KSUID
- Buka halaman penjana KSUID.
- Pilih butang "Jana KSUID".
- Alat ini mencipta satu KSUID baharu menggunakan masa semasa dan bait rawak baharu, lalu memaparkannya pada halaman.
- Pilih butang "Salin KSUID" untuk menyalin nilai itu ke papan keratan.
- Pilih "Tetapkan semula" untuk mengosongkan hasil. Butang Tetapkan semula hanya muncul selepas KSUID dijana.
Setiap klik pada "Jana KSUID" menghasilkan tepat satu pengecam. Untuk mencipta beberapa KSUID, klik butang itu sekali lagi bagi setiap KSUID baharu; alat ini tidak mempunyai mod kelompok atau fungsi eksport fail.
Penjana ini bergantung pada Web Crypto API yang terbina dalam pelayar moden. Jika API itu tidak tersedia, alat ini memaparkan ralat dan bukannya menghasilkan ID, kerana penjana nombor rawak yang tidak selamat dari segi kriptografi boleh menghasilkan pengecam yang lebih mudah diteka atau berlanggar.
KSUID berbanding UUID
UUID (Pengecam Unik Sejagat) ialah format pengecam alternatif yang biasa digunakan. Versi yang paling meluas digunakan, UUID v4, mempunyai panjang 36 aksara dan hampir keseluruhannya terdiri daripada bit rawak, jadi dua UUID tidak memberikan petunjuk tentang yang mana satu dicipta dahulu.
KSUID berbeza dalam tiga perkara:
- Boleh diisih mengikut masa. Bait cap masa pada permulaannya bermakna pengisihan abjad biasa bagi rentetan KSUID juga mengisihnya mengikut masa penciptaan.
- Lebih pendek. KSUID mempunyai 27 aksara, berbanding 36 aksara bagi UUID standard.
- Tiada pemisah. UUID biasanya ditulis dengan tanda sempang (
xxxxxxxx-xxxx-...); KSUID tidak mempunyainya.
Kedua-dua format boleh dijana secara berasingan pada komputer yang berbeza tanpa berhubung dengan pelayan pusat, jadi kedua-duanya mengelakkan kesesakan akibat pembilang autoinkremen dalam pangkalan data dikongsi.
Soalan lazim
Apakah maksud KSUID? Pengecam Unik Boleh Diisih-K. "K" merujuk kepada sifatnya yang boleh diisih ("agak boleh diisih" dalam nota reka bentuk asal daripada Segment, syarikat yang mencipta format ini).
Berapakah panjang KSUID? 27 aksara, dikodkan menggunakan base62 (digit 0-9, huruf besar dan huruf kecil).
Apakah epok KSUID? 13 Mei 2014, 16:53:20 UTC, iaitu 1,400,000,000 saat selepas epok Unix standard pada 1 Januari 1970.
Bolehkah dua KSUID berlanggar? Kebarangkaliannya amat rendah. Setiap KSUID mengandungi 16 bait rawak (128 bit), yang dijana menggunakan penjana nombor rawak yang selamat dari segi kriptografi. Walaupun banyak KSUID dijana pada saat yang sama, kebarangkalian dua daripadanya sepadan secara tidak sengaja masih teramat kecil.
Bolehkah saya mendapatkan semula masa penciptaan daripada KSUID? Ya. 4 bait pertama bagi nilai yang dinyahkodkan ialah cap masa. Menambahkan bilangan saat itu pada epok KSUID memberikan masa penciptaan asal.
Adakah alat ini menyokong penjanaan banyak KSUID serentak? Tidak. Alat ini menjana satu KSUID bagi setiap klik butang "Jana KSUID". Tiada input kuantiti, medan cap masa tersuai atau ciri eksport/muat turun.
Adakah selamat untuk meletakkan KSUID dalam URL? Ya. Pengekodan base62 hanya menggunakan digit dan huruf, jadi KSUID tidak memerlukan pelolosan tambahan untuk muncul dalam URL, nama fail atau kunci pangkalan data.
Rujukan
- Repositori GitHub KSUID 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