Whiz Tools

UUID-generaattori

Luotu UUID

UUID-rakenne
Aika alhainen

UUID-generaattori

Johdanto

Yleisesti ainutkertainen tunniste (UUID) on 128-bittinen numero, jota käytetään tietojen tunnistamiseen tietokonejärjestelmissä. UUID:t ovat standardoituja Open Software Foundationin (OSF) toimesta osana hajautettua laskentaympäristöä (DCE). Nämä tunnisteet on suunniteltu olemaan ainutlaatuisia sekä tilassa että ajassa, mikä tekee niistä ihanteellisia erilaisiin sovelluksiin hajautetuissa järjestelmissä ja muualla.

Tämä UUID-generaattorityökalu mahdollistaa sekä version 1 (aikaperusteinen) että version 4 (satunnainen) UUID:ien luomisen. Nämä tunnisteet ovat hyödyllisiä erilaisissa skenaarioissa, joissa tarvitaan ainutkertaista tunnistamista, kuten tietokantavälikkeissä, hajautetuissa järjestelmissä ja verkko-protokollissa.

Kuinka UUID:t toimivat

UUID-rakenne

UUID esitetään tyypillisesti 32 heksadesimaalisen numeron muodossa, joka on esitetty viidessä ryhmässä, jotka on erotettu viivoilla, muodossa 8-4-4-4-12, yhteensä 36 merkkiä (32 alfanumeerista merkkiä ja 4 viivaa). Esimerkiksi:

550e8400-e29b-41d4-a716-446655440000

UUID:n 128 bittiä on jaettu erityisiin kenttiin, joista jokaisessa on eri tietoa riippuen UUID:n versiosta:

  • 32 bittiä time_low-kentälle
  • 16 bittiä time_mid-kentälle
  • 16 bittiä time_hi_and_version-kentälle
  • 8 bittiä clock_seq_hi_and_reserved-kentälle
  • 8 bittiä clock_seq_low-kentälle
  • 48 bittiä node-kentälle

Tässä on kaavio, joka havainnollistaa UUID-rakennetta:

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

UUID-versiot

UUID:lla on useita versioita, joilla on omat generointimenetelmänsä:

  1. Versio 1 (aikaperusteinen): Käyttää nykyistä aikaleimaa ja tietokoneen MAC-osoitetta.
  2. Versio 2 (DCE-turvallisuus): Samankaltainen kuin versio 1, mutta sisältää paikallisen alueen tunnisteen.
  3. Versio 3 (nimeen perustuva, MD5): Generoituu hashamalla nimiavaruuden tunniste ja nimi.
  4. Versio 4 (satunnainen): Generoituu satunnaisella tai pseudisatunnaisella numerolla.
  5. Versio 5 (nimeen perustuva, SHA-1): Samankaltainen kuin versio 3, mutta käyttää SHA-1-hashia.

Tämä työkalu keskittyy version 1 ja version 4 UUID:ien luomiseen.

Kaava

Version 1 UUID:n generointi

Version 1 UUID:t generoidaan seuraavien komponenttien avulla:

  1. Aikaleima: 60-bittinen arvo, joka edustaa 100-nanosekunnin välein kulunutta aikaa lokakuun 15. päivämäärästä 1582 (Gregorian kalenterin uudistuksen päivämäärä).
  2. Kellosekvenssi: 14-bittinen arvo, jota käytetään estämään kaksoiskappaleet, jos kelloa siirretään taaksepäin.
  3. Solmu: 48-bittinen arvo, joka yleensä johdetaan tietokoneen MAC-osoitteesta.

Version 1 UUID:n generointikaava voidaan ilmaista seuraavasti:

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

Version 4 UUID:n generointi

Version 4 UUID:t generoidaan käyttäen kryptografisesti vahvaa satunnaislukugeneraattoria. Kaava on yksinkertaisesti:

UUID = random_128_bit_number

Tietyt bitit asetetaan osoittamaan versiota (4) ja varianttia.

Käyttötapaukset

UUID:lla on lukuisia sovelluksia eri tietojenkäsittelytieteen ja ohjelmistosuunnittelun aloilla:

  1. Tietokannan avaimet: UUID:ita käytetään usein ensisijaisina avaimina tietokannoissa, erityisesti hajautetuissa järjestelmissä, joissa useat solmut voivat luoda tietueita samanaikaisesti.

  2. Hajautetut järjestelmät: Suurissa hajautetuissa järjestelmissä UUID:t auttavat yksilöimään resursseja, tapahtumia tai tapahtumia useiden solmujen tai datakeskusten välillä.

  3. Sisältöosoitus: UUID:ita voidaan käyttää luomaan ainutlaatuisia tunnisteita sisällölle sisältöosoitteellisissa tallennusjärjestelmissä.

  4. Istunnon hallinta: Verkkosovellukset käyttävät usein UUID:ita käyttäjäistuntojen hallintaan varmistaen, että jokaisella istunnolla on ainutlaatuinen tunniste.

  5. IoT-laitteiden tunnistus: Esineiden internetin (IoT) sovelluksissa UUID:ita voidaan käyttää yksilöimään yksittäisiä laitteita verkossa.

Vaihtoehdot

Vaikka UUID:t ovat laajalti käytettyjä, on olemassa vaihtoehtoisia lähestymistapoja ainutkertaisten tunnisteiden luomiseen:

  1. Automaattisesti kasvavat ID:t: Yksinkertaisia ja yleisesti käytettyjä yksittäisissä tietokantajärjestelmissä, mutta eivät sovellu hajautettuihin ympäristöihin.

  2. Aikaperusteiset ID:t: Voivat olla hyödyllisiä aikajärjestyksessä oleville tiedoille, mutta voivat kohdata törmäysongelmia korkean samanaikaisuuden skenaarioissa.

  3. Lumihiutale-ID:t: Twitterin kehittämä, nämä ID:t yhdistävät aikaleiman ja työntekijän numeron luodakseen ainutlaatuisia ID:t hajautetuissa järjestelmissä.

  4. ULID (Yleisesti ainutkertainen leksikografisesti järjestettävä tunniste): Uudempi vaihtoehto, joka pyrkii olemaan ihmisystävällisempi ja järjestettävämpi kuin UUID:t.

Historia

UUID:iden käsite esiteltiin ensimmäisen kerran Apollo Network Computing Systemissä ja myöhemmin standardoitiin Open Software Foundationin (OSF) toimesta osana hajautettua laskentaympäristöä (DCE) 1990-luvulla. Ensimmäinen spesifikaatio julkaistiin vuonna 1997 ISO/IEC 11578:1996 -standardina ja myöhemmin tarkistettiin vuonna 2005 osana ISO/IEC 9834-8:2005.

Tärkeitä virstanpylväitä UUID-historiassa:

  • 1980-luku: Apollo Computer kehittää UUID-käsitteen heidän verkkolaskentajärjestelmänsä käyttöön.
  • 1997: Ensimmäinen UUID-spesifikaatio julkaistaan ISO/IEC 11578:1996 -standardina.
  • 2005: UUID-spesifikaatio tarkistetaan ja julkaistaan osana ISO/IEC 9834-8:2005.
  • 2009: RFC 4122 määrittelee UUID-muodon ja generointialgoritmit, joita käytetään tänään.

Ajan myötä UUID:ista on tullut olennainen työkalu hajautetuissa järjestelmissä ja tietokannansuunnittelussa, ja niitä on sovellettu ja mukautettu eri ohjelmointikielissä ja alustoilla.

Koodiesimerkit

Tässä on esimerkkejä UUID:iden generoimisesta eri ohjelmointikielillä:

import uuid

## Generoi Version 4 (satunnainen) UUID
random_uuid = uuid.uuid4()
print(f"Version 4 UUID: {random_uuid}")

## Generoi Version 1 (aikaperusteinen) UUID
time_based_uuid = uuid.uuid1()
print(f"Version 1 UUID: {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Generoi Version 4 (satunnainen) UUID
const randomUuid = uuidv4();
console.log(`Version 4 UUID: ${randomUuid}`);

// Generoi Version 1 (aikaperusteinen) UUID
const timeBasedUuid = uuidv1();
console.log(`Version 1 UUID: ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // Generoi Version 4 (satunnainen) UUID
        UUID randomUuid = UUID.randomUUID();
        System.out.println("Version 4 UUID: " + randomUuid);

        // Generoi Version 1 (aikaperusteinen) UUID
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("Version 1 UUID: " + timeBasedUuid);
    }
}
require 'securerandom'

## Generoi Version 4 (satunnainen) UUID
random_uuid = SecureRandom.uuid
puts "Version 4 UUID: #{random_uuid}"

## Rubylla ei ole sisäänrakennettua menetelmää Version 1 UUID:iden luomiseen
## Tarvitset gemin kuten 'uuidtools' tämän tekemiseen
<?php
// Generoi Version 4 (satunnainen) UUID
$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 "Version 4 UUID: " . $randomUuid . "\n";

// PHPlla ei ole sisäänrakennettua menetelmää Version 1 UUID:iden luomiseen
// Tarvitset kirjaston kuten 'ramsey/uuid' tämän tekemiseen
?>

Viitteet

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. Kansainvälinen standardointijärjestö. (2005). Tietotekniikka – Avoimet järjestelmät – OSI-rekisteriviranomaisten toimintamenettelyt: Universaalisten ainutkertaisten tunnisteiden (UUID) generointi ja rekisteröinti sekä niiden käyttö ASN.1-objektitunnisteen komponenteina. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. Yleisesti ainutkertainen tunniste. (2023). Wikipediassa. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Lumihiutale-ID. (2023). Wikipediassa. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID-spesifikaatio. (n.d.). GitHub. https://github.com/ulid/spec
Feedback