Generátor KSUID - Vytvorte triediteľné jedinečné identifikátory
Generujte K-triediteľné jedinečné identifikátory (KSUID) online. Okamžite vytvárajte časovo triediteľné, odolné voči kolíziám ID pre distribuované systémy a databázy.
Generátor KSUID
Dokumentácia
Generátor KSUID
KSUID (K-Sortable Unique Identifier) je kód s dĺžkou 27 znakov, ktorý sa používa na označovanie záznamov, ako sú riadky databázy, položky protokolu alebo požiadavky API. Kombinuje časovú pečiatku s náhodnými údajmi, takže identifikátory vytvorené neskôr sa vždy zoradia za identifikátory vytvorené skôr, hoci každý z nich je stále prakticky jedinečný. Tento nástroj vygeneruje v prehliadači jeden KSUID a umožní používateľovi ho skopírovať.
Z čoho sa skladá KSUID?
KSUID má dĺžku 20 bajtov a delí sa na dve časti:
- Časová pečiatka (4 bajty): počet sekúnd od pevne stanoveného začiatočného bodu nazývaného epochou KSUID.
- Náhodný obsah (16 bajtov): údaje vytvorené kryptografickým generátorom náhodných čísel v prehliadači.
Týchto 20 bajtov sa potom prevedie na text pomocou kódovania base62, systému, ktorý reprezentuje čísla pomocou 62 znakov: číslic 0-9, veľkých písmen A-Z a malých písmen a-z. Výsledok sa vždy doplní na presne 27 znakov, napríklad 0qjBBlJIfbVLKwnJn4xpLGDr00e.
Keďže časová pečiatka je na začiatku, dva KSUID vytvorené s odstupom jednej sekundy sa pri porovnaní ako obyčajný text zvyčajne zoradia v rovnakom poradí ako podľa času svojho vytvorenia. Keďže posledných 16 bajtov je náhodných, dva KSUID vytvorené v rovnakej sekunde budú takmer určite odlišné.
Epocha KSUID
Väčšina počítačových systémov počíta čas v sekundách od 1. januára 1970 („unixovej epochy“). KSUID používa iný začiatočný bod, epochu KSUID: 1 400 000 000 sekúnd po unixovej epoche, čo zodpovedá 13. mája 2014 o 16:53:20 UTC.
Neskorší začiatočný bod umožňuje, aby časové pole s dĺžkou 4 bajtov pokrývalo viac užitočných rokov, kým sa vyčerpá jeho kapacita. Počítadlo s dĺžkou 4 bajtov (32 bitov) môže obsahovať najviac 4 294 967 295 sekúnd. Pri počítaní od epochy KSUID sa toto obdobie skončí približne 19. júna 2150.
Vzorec KSUID
Reťazec KSUID sa vytvára v troch krokoch.
-
Zistite hodnotu časovej pečiatky:
T = floor(current_unix_time_in_seconds) − 1,400,000,000 -
Vygenerujte 16 náhodných bajtov,
R, pomocou kryptograficky bezpečného generátora náhodných čísel. -
Spojte časovú pečiatku s dĺžkou 4 bajtov a náhodné bajty s dĺžkou 16 bajtov do jedného bloku s dĺžkou 20 bajtov a potom tento blok zakódujte v base62; výsledok doplňte na 27 znakov:
KSUID = Base62( T ‖ R )
Symbol ‖ tu znamená „umiestniť jedno za druhé“. Bajty časovej pečiatky sú vždy na začiatku, vďaka čomu sa výsledný reťazec správne zoradí podľa času.
Vyriešený príklad
Predpokladajme, že časová časť KSUID má hodnotu 100000000. Keďže epocha KSUID je 1 400 000 000 sekúnd po unixovej epoche, táto časová hodnota predstavuje 14. júla 2017 o 02:40:00 UTC.
Ak túto časovú pečiatku spojíme s postupnosťou 16 bajtov 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (použitou iba na zabezpečenie reprodukovateľnosti príkladu; skutočný generátor používa náhodné bajty), kódovanie v base62 vytvorí:
0qjBBlJIfbVLKwnJn4xpLGDr00e
Tento reťazec má 27 znakov a obsahuje iba číslice a písmená, takže ho možno priamo bezpečne použiť v URL alebo názve súboru.
Ako používať nástroj na generovanie KSUID
- Otvorte stránku generátora KSUID.
- Vyberte tlačidlo „Generate KSUID“.
- Nástroj vytvorí jeden nový KSUID pomocou aktuálneho času a nových náhodných bajtov a zobrazí ho na stránke.
- Vyberte tlačidlo „Copy KSUID“ a skopírujte hodnotu do schránky.
- Výberom možnosti „Reset“ vymažete výsledok. Tlačidlo Reset sa zobrazí až po vygenerovaní KSUID.
Každé kliknutie na „Generate KSUID“ vytvorí presne jeden identifikátor. Ak chcete vytvoriť viac KSUID, kliknite na tlačidlo znova pre každý nový identifikátor; nástroj nemá zabudovaný dávkový režim ani export do súboru.
Generátor využíva Web Crypto API zabudované v moderných prehliadačoch. Ak toto API nie je dostupné, nástroj namiesto vytvorenia identifikátora zobrazí chybu, pretože generátor náhodných čísel, ktorý nie je kryptograficky bezpečný, by mohol vytvárať identifikátory, ktoré sa dajú ľahšie uhádnuť alebo ktoré by mohli kolidovať.
KSUID v porovnaní s UUID
UUID (Universally Unique Identifier) je bežný alternatívny formát identifikátora. Najpoužívanejšia verzia, UUID v4, má 36 znakov a je tvorená takmer výlučne náhodnými bitmi, takže z dvoch UUID nemožno zistiť, ktorý z nich bol vytvorený skôr.
KSUID sa líši tromi spôsobmi:
- Zoradenie podľa času. Úvodné bajty časovej pečiatky znamenajú, že obyčajné abecedné zoradenie reťazcov KSUID ich zároveň zoradí podľa času vytvorenia.
- Je kratší. KSUID má 27 znakov v porovnaní s 36 znakmi štandardného UUID.
- Bez oddeľovačov. UUID sa zvyčajne zapisuje s pomlčkami (
xxxxxxxx-xxxx-...), KSUID ich nemá.
Oba formáty možno generovať nezávisle na rôznych počítačoch bez overovania u centrálneho servera, takže sa pri zdieľanej databáze vyhnú úzkemu hrdlu v podobe automaticky inkrementovaného počítadla.
Najčastejšie otázky
Čo znamená KSUID? K-Sortable Unique Identifier. Písmeno „K“ odkazuje na to, že identifikátor možno triediť („kind of sortable“ v pôvodných návrhových poznámkach spoločnosti Segment, ktorá tento formát vytvorila).
Akú dĺžku má KSUID? 27 znakov, zakódovaných pomocou base62 (číslice 0-9, veľké písmená a malé písmená).
Čo je epocha KSUID? 13. mája 2014 o 16:53:20 UTC, čo je 1 400 000 000 sekúnd po štandardnej unixovej epoche 1. januára 1970.
Môžu dva KSUID kolidovať? Je to mimoriadne nepravdepodobné. Každý KSUID obsahuje 16 náhodných bajtov (128 bitov), vytvorených kryptograficky bezpečným generátorom náhodných čísel. Aj pri vygenerovaní veľkého počtu KSUID v rovnakej sekunde zostáva pravdepodobnosť náhodnej zhody dvoch z nich astronomicky malá.
Dá sa z KSUID zistiť čas vytvorenia? Áno. Prvé 4 bajty dekódovanej hodnoty obsahujú časovú pečiatku. Po pripočítaní tohto počtu sekúnd k epoche KSUID získate pôvodný čas vytvorenia.
Podporuje tento nástroj generovanie viacerých KSUID naraz? Nie. Nástroj vygeneruje jeden KSUID po každom kliknutí na tlačidlo „Generate KSUID“. Nie je k dispozícii pole na zadanie počtu, vlastné pole časovej pečiatky ani funkcia exportu či stiahnutia.
Je bezpečné vložiť KSUID do URL? Áno. Kódovanie base62 používa iba číslice a písmená, takže KSUID nevyžaduje žiadne ďalšie kódovanie, ak sa nachádza v URL, názve súboru alebo kľúči databázy.
Referencie
- Repozitár KSUID spoločnosti Segment na GitHube: https://github.com/segmentio/ksuid
- "Generating good unique identifiers" od autora Petera Bourgona: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html