Ugrás a tartalomra

Hatékony CUID generátor egyedi azonosítókhoz rendszerekben

Ütközésmentes egyedi azonosítók (CUID-ok) generálása elosztott rendszerekhez, adatbázisokhoz és webes alkalmazásokhoz. Skálázható, rendezhető azonosítók azonnali létrehozása.

CUID-generátor

Generáljon gyorsan és egyszerűenütközésmentes azonosítót.

Kattints a(z) „Új CUID generálása” gombra azonosító létrehozásához.
Betöltési kalkulátor...
📚

Dokumentáció

Mi az a CUID?

A CUID (ütközésálló egyedi azonosító) betűkből és számjegyekből álló rövid karakterlánc, amely egy rekord, fájl vagy esemény megjelölésére szolgál, hogy két elemnek ne lehessen azonos neve. Ez az eszköz a formátum jelenlegi verzióját, a CUID2 azonosítókat generálja az @paralleldrive/cuid2 könyvtár használatával. Minden azonosító 25 karakter hosszú, csak kisbetűket és számjegyeket tartalmaz, és teljes egészében a böngészőben jön létre — semmi sem kerül elküldésre egy szerverre.

A CUID-generátor használata

  1. Kattintson a Generate New CUID gombra egy azonosító létrehozásához.
  2. Kattintson a Copy to Clipboard gombra a másolásához.
  3. Illessze be az azonosítót egy adatbázisba, fájlnévbe vagy alkalmazásba.
  4. Kattintson ismét a generálás gombra egy újabb azonosító létrehozásához. A különálló CUID2 értékek közötti ütközés rendkívül valószínűtlen, matematikailag azonban nem lehetetlen.
  5. Az eredmény törléséhez kattintson a Reset gombra.

A generált azonosító az oldal URL-jében is tárolódik, ezért az eredményre mutató hivatkozás megosztható vagy könyvjelzőként menthető.

A CUID2 felépítése és képlete

Egy CUID2 felépítése a következő:

1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2

A hashfüggvény négy privát bemenetet kever össze: az aktuális időt, a munkamenetenkénti számlálót, a gazdagép egyedi jellemzőit és a véletlen entrópiát. Ezeket a SHA3-512 algoritmuson futtatja át, az eredményt 36-os számrendszerbe alakítja (0–9 számjegyek és a–z betűk), majd ezekből a karakterekből 24 darabot megtart. A véletlenszerű kezdőbetű a kész azonosító hosszát 25 karakterre növeli, amire ez az eszköz be van állítva.

Csak az első karakter áll önállóan: ez egy véletlenszerű betű az elején, amely biztosítja, hogy minden azonosító betűvel, ne pedig számjeggyel kezdődjön. Számos rendszer, például az SQL-táblák és -oszlopok neve, megköveteli, hogy az azonosítók betűvel kezdődjenek, így a CUID2 szinte bárhol biztonságosan használható névként. Az első betű után minden karakter egyetlen összefüggő, átláthatatlan hash törzsének része — nincsenek külön szakaszai.

Mivel a hash csak egy irányban működik, egyik bemenete sem nyerhető vissza a kész azonosítóból. Egy CUID2 nem tartalmaz visszanyerhető időbélyeget, számlálót vagy egyedi jellemzőt. Ez tudatos adatvédelmi és biztonsági döntés: önmagában az azonosító nem árulja el, mikor vagy hol jött létre.

Megoldott példa

Az azonosító generálása ezzel az eszközzel például a következőt eredményezheti:

1vcpuhcj51eomj1o31dnlqopu0
2

Itt a v a véletlenszerű kezdőbetű, a cpuhcj51eomj1o31dnlqopu0 pedig (24 karakterből álló) hash törzse. A két rész csak azért néz ki különbözően, mert az első karakter garantáltan betű — a hash törzse betűk és számjegyek keverékét is tartalmazhatja.

Miért használnak a rendszerek CUID2 azonosítókat?

  • Nincs szükség összehangolásra. Bármely gép önállóan létrehozhat érvényes azonosítót anélkül, hogy a következő értékért egy központi szervertől vagy adatbázistól kellene kérnie.
  • Ütközésállóság. Az idő, a számláló, a gazdagép egyedi jellemzői és a véletlen entrópia kombinációja miatt rendkívül valószínűtlen, hogy két gép ugyanazt az azonosítót hozza létre, még akkor is, ha másodpercenként sok azonosítót generálnak.
  • URL-barát. A CUID2 csak kisbetűket és számjegyeket használ, ezért webcímben való használatához soha nem kell kódolni.
  • Gyors és privát generálás. Mivel ez az eszköz a böngészőben futtatja a generátort, az azonosítók azonnal létrejönnek, és soha nem hagyják el az eszközt.

A CUID2 azonosítók nem rendezhetők a létrehozás időpontja szerint. Az adatbázis automatikusan növekvő számával vagy a régebbi, 1-es verziójú CUID-formátummal ellentétben a CUID2 az időbélyeget a hash belsejében rejti el, nem pedig láthatóan tárolja. Azoknak az alkalmazásoknak, amelyeknek a rekordokat létrehozási sorrendben kell rendezniük, külön időbélyegoszlopot kell tárolniuk az azonosító mellett.

CUID2, UUID és automatikusan növekvő azonosítók

JellemzőCUID2UUID v4Automatikusan növekvő
Hossz25 karakter36 karakter (kötőjelekkel)Változó (általában rövid szám)
KarakterkészletKisbetűk és számjegyekHexadecimális számjegyek és kötőjelekSzámjegyek
Központi összehangolást igényelNemNemIgen (adatbázis-szekvencia)
Létrehozási idő szerint rendezhetőNemNemIgen
Kódolás nélkül is URL-barátIgenIgenIgen

A CUID2 és az UUID v4 ugyanazt a problémát oldja meg: azonosítók generálását központi összehangolás nélkül. A CUID2 rövidebb és kisebb karakterkészletet használ, ezért könnyebb elolvasni és URL-be beilleszteni. Az UUID webcímben is biztonságosan használható, mert a kötőjel fenntartás nélküli karakter az URL-ekben, de 11 karakterrel hosszabb.

Gyakori alkalmazások

  • Elosztott adatbázisok elsődleges kulcsai, ahol több szerver egymástól függetlenül szúr be sorokat
  • Több mikroszolgáltatáson átívelő műveletek követésére használt kérés- vagy nyomkövetési azonosítók
  • Feltöltések fájlnevei, hogy két fájl soha ne írja felül egymást
  • Webalkalmazások munkamenet- vagy tokenazonosítói
  • Üzenetsorok, például a Kafka vagy a RabbitMQ üzenetazonosítói

Rövid történeti áttekintés

Az eredeti CUID-formátumot Eric Elliott adta ki 2012-ben a UUID-k alternatívájaként elosztott alkalmazásokhoz. A CUID2 formátumot, amelyet ugyanaz a Paralleldrive-projekt tett közzé, kriptográfiai hash köré tervezték újra, és eltávolították belőle az eredeti verzió által láthatóvá tett, visszanyerhető időbélyeget és számlálót. Ez az eszköz kizárólag CUID2 azonosítókat generál.

Gyakran ismételt kérdések

Mi a különbség a CUID (v1) és a CUID2 között? A CUID v1 látható időbélyeget és számlálót tárolt az azonosítóban, ami rendezhetővé tette az azonosítókat, de azt is felfedte, mikor és hány azonosító jött létre. A CUID2 ezeket a látható mezőket egyirányú hashre cseréli, így az azonosítóból semmilyen információ nem olvasható vissza.

Az eszközből származó CUID-azonosítók rendezhetők a létrehozás időpontja szerint? Nem. Egy CUID2 nem tartalmaz visszanyerhető időbélyeget, ezért az azonosítók nem rendezhetők a létrehozásuk időpontja szerint pusztán a karakterlánc alapján.

Milyen hosszú a generált azonosító, és módosítható-e a hossza? Ez az eszköz mindig 25 karakteres azonosítókat generál. Az eszközben nincs lehetőség más hosszúság igénylésére.

Létrehozhat-e két különböző gép ugyanakkor ugyanazt a CUID2 azonosítót? Elméletben lehetséges, a gyakorlatban azonban rendkívül valószínűtlen. Minden azonosító a gazdagépre jellemző egyedi jellemzőket véletlen entrópiával keveri, ezért nagyon valószínűtlen, hogy egymástól független gépek valaha ugyanazt a hashértéket hozzák létre.

Küld ez az eszköz adatokat egy szerverre? Nem. Az azonosítót a böngészőben futó JavaScript hozza létre a helyi rendszerórával és a böngésző által biztosított véletlenszerűséggel. Semmi sem kerül továbbításra.

Használható-e egy CUID2 adatbázis elsődleges kulcsaként? Igen. A CUID2 azonosítók jól használhatók elosztott adatbázisok elsődleges kulcsaiként, mivel bármely csomópont létrehozhat egyet anélkül, hogy egyeztetnie kellene egy központi szekvenciával. Beszúrási idő szerint természetes módon nem rendezhetők, ezért az ilyen sorrendre igényt tartó alkalmazásnak külön created_at oszlopot kell fenntartania.