UUID generálása (v1, v4, v5, v7)

generálja UUID-jeit (Universally Unique Identifier) v1, v4, v5 (determinisztikus) vagy v7 (time-ordered) formátumban, RFC 4122 szabványnak megfelelően

Miért érdemes UUID-ket használni?

Az UUID-k (Universally Unique Identifiers) egyedi azonosítók, amelyek a különböző rendszerek és adatbázisok egyediségének biztosítására szolgálnak anélkül, hogy központi koordinációra lenne szükség. Általában elosztott rendszerekben és webalkalmazásokban használják egyedi azonosítók létrehozására az erőforrásokhoz.

Támogatott UUID verziók

Ez az eszköz a következő UUID-verziókat támogatja:

  • 1. verzió: időbélyeg és MAC-cím alapján.
  • 4-es verzió: véletlenszerűen generált (leggyakrabban használt).
  • 5-ös verzió: egy névtér és egy név SHA-1 ujjlenyomatán alapul (determinisztikus: ugyanaz a névtér + név pár mindig ugyanazt az UUID-t hozza létre).
  • 7-es verzió: időlegesen rendezett, modern adatbázis-elsődleges kulcsokhoz ajánlott (lexikográfiai rendezés = kronológiai rendezés).

UUID v5: névtér és név

A v5 UUID létrehozásához ki kell választania egy szabványos névteret, és meg kell adnia egy nevet:

  • DNS: akkor használható, ha a név egy domain név (például cdrn.fr).
  • URL: akkor használható, ha a név URL (például https://cdrn.fr/).
  • OID: Akkor használja, ha a név ISO objektumazonosító.
  • X500: Akkor használja, ha a név X.500 megkülönböztető név.

Mivel a generálás determinisztikus, az UUID v5 különösen alkalmas arra, hogy stabil adatokból reprodukálható azonosítókat állítson elő.

Hogyan lehet UUID-ket generálni

A kezdőlapon úgy hozhat létre UUID-ket, hogy egy legördülő menüből kiválasztja a kívánt verziót, és rákattint a generálás gombra. Az 5-ös verzió esetén adja meg a névteret és a nevet is.

Amint létrejön egy UUID, az egy zöld eredménysorban jelenik meg, jelezve, hogy sikeresen létrejött. Ha hiba történik, piros vonal jelzi a megfelelő hibaüzenetet.

Kódpéldák generált UUID-k használatához

Használhatja az előállított UUID-ket alkalmazásaiban, ha közvetlenül integrálja őket a kódjába. Itt van egy példa PHP-ben:


toString() . PHP_EOL;
echo "UUID v5: ". $uuidV5->toString() . PHP_EOL;
echo "UUID v7: ". $uuidV7->toString() . PHP_EOL;
?>

    

Az UUID-k érvényesítése és elemzése

Érvényesítheti és elemezheti a meglévő UUID-ket is, hogy meghatározza azok verzióját és érvényességét. Íme egy példa PHP kódra:


getFields()->getVersion();
} másik {
    echo "Érvénytelen UUID";
}
?>

    

Gyakran ismételt kérdések

Mi a különbség az UUID v1, v4, v5 és v7 között?

A v1 egy időbélyeget és a gép MAC-címét kombinálja, amely érzékeny információkat fedhet fel. A v4 teljesen véletlenszerű (122 véletlenszerű bit), ez a leggyakrabban használt verzió. A v5 determinisztikus: ugyanaz a névtér + név pár mindig ugyanazt az UUID-t állítja elő az SHA-1 hashnek köszönhetően. A v7 egy ezredmásodpercben megadott időbélyeget tartalmaz az azonosító elején, ami időrendi sorrendbe teszi, és ideális az elsődleges kulcsokhoz.

Mekkora a v4 UUID ütközési valószínűsége?

A v4 UUID 122 véletlenszerű bitet tartalmaz, vagyis körülbelül 5,3 × 10^36 lehetséges értéket. Az 50%-os ütközési valószínűség eléréséhez (születésnapi paradoxon) körülbelül 2,7 × 10^18 UUID-t kell létrehozni. A gyakorlatban egy szabványos alkalmazásnál az ütközés valószínűsége elhanyagolható. Ez az, ami lehetővé teszi a kliensoldali azonosítók generálását a központi szerverrel való egyeztetés nélkül.

Miért használjunk UUID v7-et adatbázis elsődleges kulcsához?

A B-fa indexbe beillesztett UUID v4 erős töredezettséget okoz: minden beillesztés véletlenszerű pozícióba esik, ami rontja a teljesítményt és a gyorsítótár-használatot. Az UUID v7 ezredmásodpercben megadott időbélyeggel kezdődik, így az új sorok mindig az index végére kerülnek beszúrásra. A beillesztési teljesítmény ekkor megközelíti a BIGSERIAL-ét, miközben megtartja az univerzális azonosító előnyeit.

Mire használják az UUID v5 DNS, URL, OID és X500 névtereit?

Ezek a névterek az RFC 4122 szabványban előre meghatározott UUID-k, amelyek a determinisztikus generálás környezeti előtagjaként működnek. A DNS domain névvel, az URL teljes URL-lel, az OID objektum ISO-azonosítóval, az X500 LDAP megkülönböztető névvel használható. Meghatározhatja saját privát névterét is: egy v4 UUID-t, amelyet egyszer generál az alkalmazás számára, amelyet újra felhasznál minden v5 azonosítója determinisztikus gyökérként.

UUID vagy automatikus növekedés az alapazonosítókhoz?

Az automatikus növelés továbbra is nagyon hatékony monolitikus adatbázisok esetén, és könnyen felfedi az írási sorrendet, ami nemkívánatos lehet a nyilvános API-oldalon. Az UUID-k a legalkalmasabbak az elosztott architektúrákhoz, az ügyféloldali generáláshoz, az adatbázis-összevonásokhoz és az átlátszatlan azonosítók nyilvános közzétételéhez. Az ideális kompromisszum 2026-ban: UUID v7 az elsődleges kulcsban, amely egyesíti az egyetemességet, a megfelelő átlátszatlanságot és a jó indexteljesítményt.

Átmennek a generált UUID-k harmadik fél szerverén?

Az előállítás a cdrn.fr környezetben, külső szolgáltatás hívása nélkül történik. A tisztán véletlenszerű (v4) vagy időbeli (v7) verziók esetén nincs szükség érzékeny információra bemenetként. A v5 esetében az Ön által megadott névteret és nevet csak a helyi SHA-1 számításhoz használja. A generált azonosítók nem kerülnek naplózásra, az eszköz segítségével bizalmas környezetekhez szánt UUID-ket hozhat létre.

Kérés példa

curl -X POST https://cdrn.fr/api/v1/tools/uuid-generator/execute \
  -H "Content-Type: application/json" \
  -d '{"version":"uuid_version_1","quantity":3,"namespace":"namespace_dns","name":"..."}'

Bemeneti séma

Mező Típus Kötelező Alapértelmezett
version choice (uuid_version_1, uuid_version_4, uuid_version_5, uuid_version_7)
quantity integer 3
namespace choice (namespace_dns, namespace_url, namespace_oid, namespace_x500)
name string

Végpontok

  • GET https://cdrn.fr/api/v1/tools - listázza az összes elérhető eszközt
  • GET https://cdrn.fr/api/v1/tools/uuid-generator - lekéri ezen eszköz sémáját
  • POST https://cdrn.fr/api/v1/tools/uuid-generator/execute - végrehajtja ezen eszközt JSON payloaddal