Whiz Tools

UUID Generator

Generisani UUID

Struktura UUID-a
Vreme nisko

Генератор UUID

Увод

Универзално јединствено идентификатор (UUID) је 128-битни број који се користи за идентификацију информација у рачунарским системима. UUID-ови су стандартизовани од стране Отворене софтверске фондације (OSF) као део Распределеног рачунарског окружења (DCE). Ови идентификатори су дизајнирани да буду јединствени у простору и времену, што их чини идеалним за разне апликације у расподељеним системима и изван њих.

Овај алат за генерисање UUID-ова вам омогућава да креирате и верзију 1 (на основу времена) и верзију 4 (случајно) UUID-ове. Ови идентификатори су корисни у разним сценаријима где је потребна јединствена идентификација, као што су кључеви база података, расподељени системи и мрежни протоколи.

Како UUID-ови раде

Структура UUID-а

UUID се обично представља као 32 хексадецималне цифре, приказане у пет група одвојених хипенима, у облику 8-4-4-4-12 за укупно 36 знакова (32 алфанумеричка знака и 4 хипена). На пример:

550e8400-e29b-41d4-a716-446655440000

128 бита UUID-а је подељено у специфична поља, при чему свако носи различите информације у зависности од верзије UUID-а:

  • 32 бита за поље time_low
  • 16 бита за поље time_mid
  • 16 бита за поље time_hi_and_version
  • 8 бита за поље clock_seq_hi_and_reserved
  • 8 бита за поље clock_seq_low
  • 48 бита за поље node

Ево дијаграма који илуструје структуру UUID-а:

A B C D E F A: time_low (32 бита) B: time_mid (16 бита) C: time_hi_and_version (16 бита) D: clock_seq_hi_and_reserved (8 бита) E: clock_seq_low (8 бита) F: node (48 бита)

Верзије UUID-а

Постоји неколико верзија UUID-ова, од којих свака има свој метод генерисања:

  1. Верзија 1 (на основу времена): Користи тренутни временски жиг и MAC адресу рачунара.
  2. Верзија 2 (DCE безбедност): Слично верзији 1, али укључује локални идентификатор домена.
  3. Верзија 3 (на основу имена, MD5): Генерише се хеширањем идентификатора простора имена и имена.
  4. Верзија 4 (случајно): Генерише се помоћу случајног или псеудослучајног броја.
  5. Верзија 5 (на основу имена, SHA-1): Слично верзији 3, али користи SHA-1 хеширање.

Овај алат се фокусира на генерисање верзије 1 и верзије 4 UUID-ова.

Формула

Генерација UUID-а верзије 1

UUID-ови верзије 1 се генеришу коришћењем следећих компоненти:

  1. Временски жиг: 60-битна вредност која представља број интервала од 100 наносекунди од 15. октобра 1582. (датум Грегоријанске реформе хришћанског календара).
  2. Секвенца сата: 14-битна вредност која се користи за избегавање дупликата у случају да се сат подеси уназад.
  3. Чвор: 48-битна вредност, обично добијена из MAC адресе рачунара.

Формула за генерисање UUID-а верзије 1 може се изразити као:

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

Генерација UUID-а верзије 4

UUID-ови верзије 4 се генеришу коришћењем криптографски јаких генератора случајних бројева. Формула је једноставно:

UUID = random_128_bit_number

Са специфичним битовима подешеним да указују на верзију (4) и варијанту.

Користи

UUID-ови имају бројне апликације у различитим областима рачунарских наука и софтверског инжењеринга:

  1. Кључеви база података: UUID-ови се често користе као примарни кључеви у базама података, посебно у расподељеним системима где више чворова може истовремено генерисати записе.

  2. Распределени системи: У великим расподељеним системима, UUID-ови помажу у јединственом идентификовању ресурса, трансакција или догађаја у више чворова или дата центара.

  3. Адресирање садржаја: UUID-ови се могу користити за креирање јединствених идентификатора за садржај у системима за складиштење заснованим на адреси садржаја.

  4. Управљање сесијама: Веб апликације често користе UUID-ове за управљање корисничким сесијама, осигуравајући да свака сесија има јединствени идентификатор.

  5. Идентификација IoT уређаја: У апликацијама Интернета ствари (IoT), UUID-ови се могу користити за јединствено идентификовање појединачних уређаја у мрежи.

Алтернативе

Иако су UUID-ови широко коришћени, постоје алтернативни приступи за генерисање јединствених идентификатора:

  1. ID-ови са аутоматским инкрементом: Једноставни и често коришћени у системима са једном базом података, али нису погодни за расподељене средине.

  2. ID-ови на основу времена: Могу бити корисни за податке у временском редоследу, али могу имати проблеме са колизијом у сценаријима са великом конкоренцијом.

  3. Snowflake ID-ови: Развили их Твитер, ови ID-ови комбинују временски жиг и број радника за генерисање јединствених ID-ова у расподељеним системима.

  4. ULID (Универзално јединствено лексикографски сортирано идентификатор): Новија алтернатива која има за циљ да буде пријатнија за људе и сортирана од UUID-ова.

Историја

Концепт UUID-ова први пут је уведен у Аполоновом мрежном рачунарском систему и касније стандаризован од стране Отворене софтверске фондације (OSF) као део Распределеног рачунарског окружења (DCE) 1990-их. Прва спецификација објављена је 1997. године као ISO/IEC 11578:1996 и касније ревидирана 2005. године као део ISO/IEC 9834-8:2005.

Кључни догађаји у историји UUID-а:

  • 1980-их: Аполонова компјутерска компанија развија концепт UUID-а за свој мрежни рачунарски систем.
  • 1997: Прва спецификација UUID-а објављена као ISO/IEC 11578:1996.
  • 2005: Спецификација UUID-а ревидирана и објављена као део ISO/IEC 9834-8:2005.
  • 2009: RFC 4122 дефинише формат UUID-а и алгоритме генерисања који се данас користе.

Током времена, UUID-ови су постали основни алат у расподељеним системима и дизајну база података, са различитим имплементацијама и адаптацијама у различитим програмским језицима и платформама.

Примери кода

Ево примера генерисања UUID-ова у различитим програмским језицима:

import uuid

## Генерисање UUID-а верзије 4 (случајно)
random_uuid = uuid.uuid4()
print(f"UUID верзије 4: {random_uuid}")

## Генерисање UUID-а верзије 1 (на основу времена)
time_based_uuid = uuid.uuid1()
print(f"UUID верзије 1: {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Генерисање UUID-а верзије 4 (случајно)
const randomUuid = uuidv4();
console.log(`UUID верзије 4: ${randomUuid}`);

// Генерисање UUID-а верзије 1 (на основу времена)
const timeBasedUuid = uuidv1();
console.log(`UUID верзије 1: ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // Генерисање UUID-а верзије 4 (случајно)
        UUID randomUuid = UUID.randomUUID();
        System.out.println("UUID верзије 4: " + randomUuid);

        // Генерисање UUID-а верзије 1 (на основу времена)
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("UUID верзије 1: " + timeBasedUuid);
    }
}
require 'securerandom'

## Генерисање UUID-а верзије 4 (случајно)
random_uuid = SecureRandom.uuid
puts "UUID верзије 4: #{random_uuid}"

## Руби нема уграђену методу за UUID-ове верзије 1
## Требаће вам гем као што је 'uuidtools' за то
<?php
// Генерисање UUID-а верзије 4 (случајно)
$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 "UUID верзије 4: " . $randomUuid . "\n";

// PHP нема уграђену методу за UUID-ове верзије 1
// Требаће вам библиотека као што је 'ramsey/uuid' за то
?>

Референце

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. Међународна организација за стандардизацију. (2005). Информационе технологије – Отворена системска интерконекција – Процедуре за рад ОSI регистрационих власти: Генерација и регистрација универзално јединствених идентификатора (UUID) и њихова употреба као компоненти ASN.1 Object Identifier. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. Универзално јединствени идентификатор. (2023). У Википедији. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. (2023). У Википедији. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Спецификација. (н.д.). GitHub. https://github.com/ulid/spec
Feedback