Generátor KSUID - Vytvořte seřaditelné jedinečné identifikátory
Generujte K-seřaditelné jedinečné identifikátory (KSUID) online. Okamžitě vytvářejte časově seřaditelná, kolizně odolná ID pro distribuované systémy a databáze.
Generátor KSUID
Dokumentace
Generátor KSUID
KSUID (K-Sortable Unique Identifier) je kód o délce 27 znaků, který se používá k označování záznamů, jako jsou řádky databáze, položky protokolu nebo požadavky API. Kombinuje časové razítko s náhodnými daty, takže ID vytvořená později se vždy řadí za ID vytvořená dříve, přestože každé z nich je stále prakticky jedinečné. Tento nástroj v prohlížeči vygeneruje jeden KSUID a umožní uživateli jej zkopírovat.
Z čeho se KSUID skládá?
KSUID má délku 20 bajtů a je rozdělen na dvě části:
- Časové razítko (4 bajty): počet sekund od pevně stanoveného počátečního okamžiku zvaného epocha KSUID.
- Náhodný datový obsah (16 bajtů): data vytvořená kryptografickým generátorem náhodných čísel v prohlížeči.
Těchto 20 bajtů se poté převede na text pomocí kódování base62, což je systém reprezentující čísla pomocí 62 znaků: číslic 0-9, velkých písmen A–Z a malých písmen a–z. Výsledek se vždy doplní na přesně 27 znaků, například 0qjBBlJIfbVLKwnJn4xpLGDr00e.
Protože časové razítko je na začátku, dva KSUID vytvořené s odstupem jedné sekundy se při porovnání jako prostý text obvykle seřadí ve stejném pořadí jako podle času svého vytvoření. Protože posledních 16 bajtů je náhodných, dva KSUID vytvořené ve stejné sekundě se téměř jistě budou lišit.
Epocha KSUID
Většina počítačových systémů počítá čas v sekundách od 1. ledna 1970 (takzvaná „unixová epocha“). KSUID používá jiný počáteční okamžik, epochu KSUID: 1 400 000 000 sekund po unixové epoše, což je 13. května 2014 v 16:53:20 UTC.
Pozdější počáteční okamžik umožňuje, aby časové pole o velikosti 4 bajtů pokrylo více užitečných let, než se vyčerpá jeho kapacita. Počítadlo o velikosti 4 bajtů (32 bitů) může obsahovat nejvýše 4 294 967 295 sekund. Při počítání od epochy KSUID se tento časový rozsah vyčerpá přibližně 19. června 2150.
Vzorec KSUID
Řetězec KSUID se vytváří ve třech krocích.
-
Zjistí se hodnota časového razítka:
T = floor(current_unix_time_in_seconds) − 1,400,000,000 -
Vygeneruje se 16 náhodných bajtů,
R, pomocí kryptograficky bezpečného generátoru náhodných čísel. -
Časové razítko o velikosti 4 bajtů a 16 náhodných bajtů se spojí do jednoho bloku o velikosti 20 bajtů a tento blok se zakóduje v base62; výsledek se doplní na 27 znaků:
KSUID = Base62( T ‖ R )
Zde ‖ znamená „umístit jedno za druhé“. Bajty časového razítka jsou vždy na začátku, díky čemuž se výsledný řetězec správně řadí podle času.
Příklad výpočtu
Předpokládejme, že část časového razítka KSUID má hodnotu 100000000. Protože epocha KSUID nastává 1 400 000 000 sekund po unixové epoše, toto časové razítko představuje 14. července 2017 v 02:40:00 UTC.
Po spojení tohoto časového razítka s posloupností 16 bajtů 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (zde použitou pouze kvůli reprodukovatelnosti příkladu; skutečný generátor používá náhodné bajty) vznikne kódováním base62:
0qjBBlJIfbVLKwnJn4xpLGDr00e
Tento řetězec má 27 znaků a obsahuje pouze číslice a písmena, takže jej lze přímo bezpečně použít v URL nebo názvu souboru.
Jak používat nástroj pro generování KSUID
- Otevřete stránku generátoru KSUID.
- Vyberte tlačítko „Generovat KSUID“.
- Nástroj vytvoří jeden nový KSUID pomocí aktuálního času a nových náhodných bajtů a zobrazí jej na stránce.
- Vyberte tlačítko „Kopírovat KSUID“ a zkopírujte hodnotu do schránky.
- Výběrem možnosti „Resetovat“ výsledek vymažete. Tlačítko Resetovat se zobrazí až po vygenerování KSUID.
Každé kliknutí na tlačítko „Generovat KSUID“ vytvoří právě jeden identifikátor. Chcete-li vytvořit několik KSUID, klikněte na tlačítko znovu pro každý nový identifikátor; nástroj nemá vestavěný hromadný režim ani export do souboru.
Generátor využívá Web Crypto API integrované v moderních prohlížečích. Pokud toto API není dostupné, nástroj místo vytvoření ID zobrazí chybu, protože generátor náhodných čísel, který není kryptograficky bezpečný, by mohl vytvářet identifikátory snadněji odhadnutelné nebo vedoucí ke kolizím.
KSUID ve srovnání s UUID
UUID (Universally Unique Identifier) je běžný alternativní formát identifikátoru. Nejpoužívanější verze, UUID v4, má délku 36 znaků a skládá se téměř výhradně z náhodných bitů, takže dva UUID neposkytují žádnou informaci o tom, který z nich byl vytvořen dříve.
KSUID se liší ve třech ohledech:
- Řazení podle času. Bajty časového razítka na začátku znamenají, že prosté abecední řazení řetězců KSUID je zároveň seřadí podle času vytvoření.
- Je kratší. KSUID má 27 znaků, zatímco standardní UUID jich má 36.
- Nemá oddělovače. UUID se obvykle zapisuje s pomlčkami (
xxxxxxxx-xxxx-...); KSUID žádné nemá.
Oba formáty lze generovat nezávisle na různých počítačích bez ověřování u centrálního serveru, takže se oba vyhýbají úzkému hrdlu v podobě automaticky inkrementovaného počítadla ve sdílené databázi.
Často kladené otázky
Co znamená KSUID? K-Sortable Unique Identifier. Písmeno „K“ odkazuje na skutečnost, že identifikátor lze řadit („kind of sortable“, tedy „tak trochu řaditelný“, podle původních návrhových poznámek společnosti Segment, která tento formát vytvořila).
Jak dlouhý je KSUID? 27 znaků, zakódovaných pomocí base62 (číslice 0-9, velká písmena, malá písmena).
Co je epocha KSUID? 13. května 2014 v 16:53:20 UTC, což je 1 400 000 000 sekund po standardní unixové epoše 1. ledna 1970.
Mohou se dva KSUID shodovat? Je to mimořádně nepravděpodobné. Každý KSUID obsahuje 16 náhodných bajtů (128 bitů), vygenerovaných kryptograficky bezpečným generátorem náhodných čísel. I při generování mnoha KSUID ve stejné sekundě zůstává pravděpodobnost náhodné shody dvou z nich astronomicky malá.
Lze z KSUID zjistit čas vytvoření? Ano. První 4 bajty dekódované hodnoty obsahují časové razítko. Přičtením tohoto počtu sekund k epoše KSUID se získá původní čas vytvoření.
Podporuje tento nástroj generování mnoha KSUID najednou? Ne. Nástroj generuje jeden KSUID při každém kliknutí na tlačítko „Generovat KSUID“. Neexistuje pole pro zadání množství, vlastní pole časového razítka ani funkce exportu či stažení.
Je bezpečné vložit KSUID do URL? Ano. Kódování base62 používá pouze číslice a písmena, takže KSUID nevyžaduje žádné další escapování pro použití v URL, názvu souboru nebo databázovém klíči.
Reference
- Repozitář KSUID společnosti Segment na GitHubu: https://github.com/segmentio/ksuid
- "Generating good unique identifiers" od Petera Bourgona: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html