KSUID Generátor - Rendezhető Egyedi Azonosítók Létrehozása
K-Rendezhető Egyedi Azonosítók (KSUIDs) generálása online. Hozzon létre időben rendezhető,ütközésmentes azonosítókat elosztott rendszerekhez és adatbázisokhoz azonnal.
KSUID Generátor
Dokumentáció
KSUID-generátor
A KSUID (K-Sortable Unique Identifier, azaz rendezhető egyedi azonosító) egy 27 karakterből álló kód, amely olyan rekordok, például adatbázissorok, naplóbejegyzések vagy API-kérések címkézésére szolgál. Időbélyeget véletlenszerű adatokkal kombinál, ezért a később létrehozott azonosítók mindig a korábban létrehozottak után rendeződnek, miközben mindegyik gyakorlatilag egyedi marad. Ez az eszköz egyetlen KSUID-t generál a böngészőben, és lehetővé teszi annak másolását.
Miből áll egy KSUID?
A KSUID hossza 20 bájt, két részre osztva:
- Időbélyeg (4 bájt): a KSUID-epochként megadott rögzített kezdőpont óta eltelt másodpercek száma.
- Véletlenszerű adatrész (16 bájt): a böngésző kriptográfiai véletlenszám-generátora által előállított adat.
Ezt a 20 bájtot ezután base62-kódolással szöveggé alakítják. Ez a rendszer 62 karakterrel jeleníti meg a számokat: a 0-9 számjegyekkel, az A–Z nagybetűkkel és az a–z kisbetűkkel. Az eredményt mindig pontosan 27 karakterre egészítik ki, például: 0qjBBlJIfbVLKwnJn4xpLGDr00e.
Mivel az időbélyeg kerül előre, az egy másodperc különbséggel létrehozott két KSUID egyszerű szövegként összehasonlítva általában ugyanabban a sorrendben rendeződik, mint a létrehozási idejük. Mivel az utolsó 16 bájt véletlenszerű, ugyanabban a másodpercben létrehozott két KSUID is szinte biztosan különböző.
KSUID-epoch
A legtöbb számítógépes rendszer az időt 1970. január 1. óta eltelt másodpercekben méri (ez az „Unix-epoch”). A KSUID más kezdőpontot használ, a KSUID-epochot: az Unix-epoch után eltelt 1 400 000 000 másodperc, azaz 2014. május 13., 16:53:20 UTC-kor.
A későbbi kezdőpont lehetővé teszi, hogy a 4 bájtos időbélyegmező több hasznos évet fedjen le, mielőtt elfogyna a kapacitása. Egy 4 bájtos (32 bites) számláló legfeljebb 4 294 967 295 másodpercet tud tárolni. A KSUID-epochtól számítva ez az időtartam körülbelül 2150. június 19. ér véget.
KSUID-képlet
A KSUID-karakterlánc három lépésben készül.
-
Az időbélyeg értékének meghatározása:
T = floor(current_unix_time_in_seconds) − 1,400,000,000 -
16 véletlenszerű bájt generálása kriptográfiailag biztonságos véletlenszám-generátorral; ezeket jelölje
R. -
A 4 bájtos időbélyeg és a 16 véletlenszerű bájt egyetlen 20 bájtos blokká egyesítése, majd a blokk base62-kódolása úgy, hogy az eredmény 27 karakteres legyen:
KSUID = Base62( T ‖ R )
Itt a ‖ jelentése: „egymás után elhelyezni”. Az időbélyeg bájtjai mindig előre kerülnek, ettől rendeződik a végső karakterlánc helyesen időrendben.
Számítási példa
Tegyük fel, hogy egy KSUID időbélyegrésze 100000000. Mivel a KSUID-epoch 1 400 000 000 másodperccel van az Unix-epoch után, ez az időbélyeg a 2017. július 14., 02:40:00 UTC-kor időpontot jelenti.
Ha ezt az időbélyeget összepárosítjuk a 16 bájtos 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 sorozattal (amelyet itt csak a példa reprodukálhatósága érdekében használunk; egy valódi generátor ehelyett véletlenszerű bájtokat használ), a base62-kódolás eredménye:
0qjBBlJIfbVLKwnJn4xpLGDr00e
Ez a karakterlánc 27 karakter hosszú, csak számjegyekből és betűkből áll, ezért közvetlenül használható URL-ben vagy fájlnévben.
A KSUID-generáló eszköz használata
- Nyissa meg a KSUID-generátor oldalát.
- Válassza a „Generate KSUID” gombot.
- Az eszköz egy új KSUID-t hoz létre az aktuális idő és friss véletlenszerű bájtok felhasználásával, majd megjeleníti az oldalon.
- Válassza a „Copy KSUID” gombot az érték vágólapra másolásához.
- Az eredmény törléséhez válassza a „Reset” lehetőséget. A Reset gomb csak KSUID generálása után jelenik meg.
A „Generate KSUID” gombra kattintva pontosan egy azonosító jön létre. Több KSUID létrehozásához kattintson újra a gombra minden egyes új azonosítóhoz; az eszköz nem támogat kötegelt feldolgozási módot vagy fájlexportálást.
A generátor a modern böngészőkbe beépített Web Crypto API-ra támaszkodik. Ha ez az API nem érhető el, az eszköz azonosító létrehozása helyett hibát jelez, mert egy kriptográfiailag nem biztonságos véletlenszám-generátor könnyebben kitalálható vagy ütköző azonosítókat állíthatna elő.
KSUID és UUID összehasonlítása
A UUID (Universally Unique Identifier, azaz univerzálisan egyedi azonosító) gyakori alternatív azonosítóformátum. A legszélesebb körben használt változat, a UUID v4, 36 karakter hosszú, és szinte teljes egészében véletlenszerű bitekből áll, így két UUID-ből nem derül ki, melyiket hozták létre előbb.
A KSUID három szempontból különbözik:
- Idő szerint rendezhető. A kezdő időbélyegbájtok miatt a KSUID-karakterláncok egyszerű betűrend szerinti rendezése egyben a létrehozási idő szerinti rendezést is jelenti.
- Rövidebb. A KSUID 27 karakterből áll, míg egy szabványos UUID 36 karakterből.
- Nincsenek elválasztók. Az UUID-t általában kötőjelekkel írják: (
xxxxxxxx-xxxx-...); a KSUID nem tartalmaz kötőjeleket.
Mindkét formátum egymástól függetlenül létrehozható különböző számítógépeken, központi szerverrel való egyeztetés nélkül, így elkerülhető a megosztott adatbázis automatikusan növekvő számlálójának szűk keresztmetszete.
Gyakran ismételt kérdések
Mit jelent a KSUID? K-Sortable Unique Identifier, azaz rendezhető egyedi azonosító. A „K” arra utal, hogy rendezhető („valamilyen módon rendezhető” a formátumot létrehozó Segment eredeti tervezési feljegyzései szerint).
Milyen hosszú egy KSUID? 27 karakter hosszú, base62-kódolással (0-9 számjegyekkel, nagybetűkkel és kisbetűkkel).
Mi a KSUID-epoch? 2014. május 13., 16:53:20 UTC-kor, ami 1 400 000 000 másodperccel van a szabványos, 1970. január 1. szerinti Unix-epoch után.
Ütközhet két KSUID? Ennek az esélye rendkívül kicsi. Minden KSUID 16 véletlenszerű bájtot (128 bitet) tartalmaz, amelyet kriptográfiailag biztonságos véletlenszám-generátor állít elő. Még ha sok KSUID készül is ugyanabban a másodpercben, annak esélye, hogy kettő véletlenül megegyezzen, csillagászatilag kicsi.
Visszakereshető a létrehozás időpontja egy KSUID-ból? Igen. A dekódolt érték első 4 bájtja az időbélyeg. E számú másodpercet a KSUID-epochhoz adva megkapjuk az eredeti létrehozási időt.
Támogatja ez az eszköz sok KSUID egyidejű generálását? Nem. Az eszköz a „Generate KSUID” gombra kattintva egy KSUID-t generál. Nincs mennyiségi beviteli mező, egyéni időbélyegmező vagy exportálási/letöltési funkció.
Biztonságos KSUID-t URL-ben elhelyezni? Igen. A base62-kódolás csak számjegyeket és betűket használ, ezért a KSUID URL-ben, fájlnévben vagy adatbáziskulcsként való megjelenítéséhez nincs szükség további escape-elésre.
Hivatkozások
- A Segment KSUID GitHub-adattára: https://github.com/segmentio/ksuid
- "Generating good unique identifiers", írta Peter Bourgon: https://peter.bourgon.org/blog/2019/05/20/generating-good-unique-ids.html