Whiz Tools

UUID Generátor

Generált UUID

UUID Szerkezet
Idő alacsony

UUID Generátor

Bevezetés

A Globálisan Egyedi Azonosító (UUID) egy 128 bites szám, amelyet az információk azonosítására használnak számítógépes rendszerekben. Az UUID-ket az Open Software Foundation (OSF) szabványosította a Distributed Computing Environment (DCE) részeként. Ezeket az azonosítókat úgy tervezték, hogy egyediek legyenek térben és időben, így ideálisak különböző alkalmazásokhoz elosztott rendszerekben és azon túl.

Ez az UUID generátor eszköz lehetővé teszi az 1. verzió (időalapú) és a 4. verzió (véletlenszerű) UUID-k létrehozását. Ezek az azonosítók hasznosak különböző forgatókönyvekben, ahol egyedi azonosításra van szükség, például adatbázis kulcsok, elosztott rendszerek és hálózati protokollok esetén.

Hogyan működnek az UUID-k

UUID Struktúra

Az UUID-t általában 32 hexadecimális számjegyként ábrázolják, öt csoportba rendezve, amelyeket kötőjelek választanak el, a következő formában: 8-4-4-4-12, összesen 36 karakter (32 alfanumerikus karakter és 4 kötőjel). Például:

550e8400-e29b-41d4-a716-446655440000

Az UUID 128 bitje specifikus mezőkre van felosztva, amelyek mindegyike különböző információt hordoz az UUID verziójától függően:

  • 32 bit a time_low mezőhöz
  • 16 bit a time_mid mezőhöz
  • 16 bit a time_hi_and_version mezőhöz
  • 8 bit a clock_seq_hi_and_reserved mezőhöz
  • 8 bit a clock_seq_low mezőhöz
  • 48 bit a node mezőhöz

Íme egy diagram, amely bemutatja az UUID struktúráját:

A B C D E F A: time_low (32 bit) B: time_mid (16 bit) C: time_hi_and_version (16 bit) D: clock_seq_hi_and_reserved (8 bit) E: clock_seq_low (8 bit) F: node (48 bit)

UUID Verziók

Több verzió létezik az UUID-kből, mindegyik saját generálási módszerrel:

    1. verzió (Időalapú): A jelenlegi időbélyeget és a számítógép MAC címét használja.
    1. verzió (DCE Biztonság): Hasonló az 1. verzióhoz, de tartalmaz egy helyi domain azonosítót.
    1. verzió (Név-alapú, MD5): Egy névterület-azonosító és név hash-elésével generálódik.
    1. verzió (Véletlenszerű): Véletlenszerű vagy álnéven generált számot használ.
    1. verzió (Név-alapú, SHA-1): Hasonló a 3. verzióhoz, de SHA-1 hash-elést használ.

Ez az eszköz az 1. és 4. verzió UUID-k generálására összpontosít.

Fórmák

1. verzió UUID Generálás

Az 1. verzió UUID-k a következő összetevőkkel generálódnak:

  1. Időbélyeg: Egy 60 bites érték, amely a 100 nanomásodperces intervallumok számát jelenti 1582. október 15. óta (a Gergely-naptár reformjának dátuma).
  2. Óra szekvencia: Egy 14 bites érték, amelyet a visszaállítások elkerülésére használnak.
  3. Node: Egy 48 bites érték, amely általában a számítógép MAC címéből származik.

Az 1. verzió UUID generálásának képlete a következőképpen fejezhető ki:

UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node

4. verzió UUID Generálás

A 4. verzió UUID-ket kriptográfiailag erős véletlenszám-generátorral generálják. A képlet egyszerűen:

UUID = random_128_bit_number

A specifikus bitek beállításával a verzió (4) és a variáns jelzésére.

Felhasználási esetek

Az UUID-knak számos alkalmazása van a számítástechnika és a szoftverfejlesztés különböző területein:

  1. Adatbázis Kulcsok: Az UUID-ket gyakran használják elsődleges kulcsokként adatbázisokban, különösen elosztott rendszerekben, ahol több csomópont is generálhat rekordokat egyidejűleg.

  2. Elosztott Rendszerek: Nagy léptékű elosztott rendszerekben az UUID-k segítenek az erőforrások, tranzakciók vagy események egyedi azonosításában több csomópont vagy adatközpont között.

  3. Tartalom Címkézés: Az UUID-ket egyedi azonosítók létrehozására használják a tartalom-címkéző tárolórendszerekben.

  4. Üléskezelés: A webalkalmazások gyakran használnak UUID-ket a felhasználói ülések kezelésére, biztosítva, hogy minden ülésnek egyedi azonosítója legyen.

  5. IoT Eszköz Azonosítás: Az Internet of Things (IoT) alkalmazásokban az UUID-ket egyedi azonosítók létrehozására használják az egyes eszközök számára egy hálózatban.

Alternatívák

Bár az UUID-k széles körben használatosak, léteznek alternatív megközelítések az egyedi azonosítók generálására:

  1. Automatikusan növekvő azonosítók: Egyszerűek és gyakran használják egyetlen adatbázis-rendszerekben, de nem alkalmasak elosztott környezetekre.

  2. Időbélyeg-alapú azonosítók: Hasznosak lehetnek időrendben történő adatokhoz, de ütközési problémákkal szembesülhetnek magas egyidejűségű forgatókönyvekben.

  3. Snowflake azonosítók: A Twitter által kifejlesztett azonosítók, amelyek az időbélyeget és a munkás számát kombinálják az elosztott rendszerekben történő egyedi azonosítók generálásához.

  4. ULID (Globálisan Egyedi Lexikográfiai Rendezett Azonosító): Egy újabb alternatíva, amely célja, hogy emberbarátabb és rendezhetőbb legyen, mint az UUID-k.

Történelem

Az UUID-k koncepcióját először az Apollo Network Computing System-ben vezették be, majd az Open Software Foundation (OSF) szabványosította a Distributed Computing Environment (DCE) részeként az 1990-es években. Az első specifikációt 1997-ben publikálták ISO/IEC 11578:1996 néven, majd 2005-ben felülvizsgálták az ISO/IEC 9834-8:2005 részeként.

A UUID történetének kulcsfontosságú mérföldkövei:

  • 1980-as évek: Az Apollo Computer kifejleszti az UUID koncepciót a Network Computing System számára.
  • 1997: Az első UUID specifikációt publikálják ISO/IEC 11578:1996 néven.
  • 2005: Az UUID specifikációt felülvizsgálják és publikálják az ISO/IEC 9834-8:2005 részeként.
  • 2009: Az RFC 4122 meghatározza az UUID formátumát és generálási algoritmusait, amelyeket ma használnak.

Idővel az UUID-k alapvető eszközzé váltak az elosztott rendszerek és az adatbázis tervezés terén, különböző implementációkkal és alkalmazásokkal, amelyek különböző programozási nyelvekben és platformokon találhatók.

Kód példák

Íme példák az UUID-k generálására különböző programozási nyelvekben:

import uuid

## Generálj egy 4. verzió (véletlenszerű) UUID-t
random_uuid = uuid.uuid4()
print(f"4. verzió UUID: {random_uuid}")

## Generálj egy 1. verzió (időalapú) UUID-t
time_based_uuid = uuid.uuid1()
print(f"1. verzió UUID: {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Generálj egy 4. verzió (véletlenszerű) UUID-t
const randomUuid = uuidv4();
console.log(`4. verzió UUID: ${randomUuid}`);

// Generálj egy 1. verzió (időalapú) UUID-t
const timeBasedUuid = uuidv1();
console.log(`1. verzió UUID: ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // Generálj egy 4. verzió (véletlenszerű) UUID-t
        UUID randomUuid = UUID.randomUUID();
        System.out.println("4. verzió UUID: " + randomUuid);

        // Generálj egy 1. verzió (időalapú) UUID-t
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("1. verzió UUID: " + timeBasedUuid);
    }
}
require 'securerandom'

## Generálj egy 4. verzió (véletlenszerű) UUID-t
random_uuid = SecureRandom.uuid
puts "4. verzió UUID: #{random_uuid}"

## A Ruby nem rendelkezik beépített módszerrel az 1. verzió UUID-k generálására
## Ehhez egy 'uuidtools' nevű gem használatára lenne szükség
<?php
// Generálj egy 4. verzió (véletlenszerű) UUID-t
$randomUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
    mt_rand(0, 0xffff), mt_rand(0, 0xffff),
    mt_rand(0, 0xffff),
    mt_rand(0, 0x0fff) | 0x4000,
    mt_rand(0, 0x3fff) | 0x8000,
    mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
echo "4. verzió UUID: " . $randomUuid . "\n";

// A PHP nem rendelkezik beépített módszerrel az 1. verzió UUID-k generálására
// Ehhez egy 'ramsey/uuid' nevű könyvtár használatára lenne szükség
?>

Referenciák

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Globálisan Egyedi Azonosító (UUID) URN Névterület. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. Nemzetközi Szabványügyi Szervezet. (2005). Információs technológia – Nyílt Rendszerek Összekapcsolása – Az OSI Regisztrációs Hatóságok működési eljárásai: Globálisan Egyedi Azonosítók (UUID-k) generálása és regisztrálása, valamint azok használata ASN.1 Objektum Azonosító összetevőkként. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. Globálisan egyedi azonosító. (2023). A Wikipédiában. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. (2023). A Wikipédiában. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec
Feedback