Whiz Tools

UUID Üretici

Üretilen UUID

UUID Yapısı
Zaman düşük

UUID Üretici

Giriş

Evrensel Benzersiz Tanımlayıcı (UUID), bilgisayar sistemlerinde bilgileri tanımlamak için kullanılan 128 bitlik bir sayıdır. UUID'ler, Dağıtılmış Bilgi İşlem Ortamı (DCE) kapsamında Açık Yazılım Vakfı (OSF) tarafından standartlaştırılmıştır. Bu tanımlayıcılar, hem mekânda hem de zamanda benzersiz olacak şekilde tasarlanmıştır, bu da onları dağıtılmış sistemler ve ötesinde çeşitli uygulamalar için ideal hale getirir.

Bu UUID üretici aracı, hem versiyon 1 (zaman tabanlı) hem de versiyon 4 (rastgele) UUID'ler oluşturmanıza olanak tanır. Bu tanımlayıcılar, veritabanı anahtarları, dağıtılmış sistemler ve ağ protokolleri gibi benzersiz tanımlamanın gerekli olduğu çeşitli senaryolar için yararlıdır.

UUID'lerin Çalışma Prensibi

UUID Yapısı

Bir UUID genellikle 32 onaltılık basamak olarak temsil edilir ve beş grup halinde, toplamda 36 karakter (32 alfanümerik karakter ve 4 tire) olacak şekilde tirelerle ayrılarak gösterilir. Örneğin:

550e8400-e29b-41d4-a716-446655440000

Bir UUID'nin 128 biti, her biri UUID versiyonuna bağlı olarak farklı bilgiler taşıyan belirli alanlara ayrılmıştır:

  • time_low alanı için 32 bit
  • time_mid alanı için 16 bit
  • time_hi_and_version alanı için 16 bit
  • clock_seq_hi_and_reserved alanı için 8 bit
  • clock_seq_low alanı için 8 bit
  • node alanı için 48 bit

İşte UUID yapısını gösteren bir diyagram:

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 Versiyonları

UUID'lerin birkaç versiyonu vardır, her birinin kendi üretim yöntemi vardır:

  1. Versiyon 1 (Zaman tabanlı): Mevcut zaman damgası ve bilgisayarın MAC adresini kullanır.
  2. Versiyon 2 (DCE Güvenliği): Versiyon 1'e benzer, ancak yerel bir alan tanımlayıcısı içerir.
  3. Versiyon 3 (İsim tabanlı, MD5): Bir alan adı tanımlayıcısı ve isminin hash'lenmesiyle üretilir.
  4. Versiyon 4 (Rastgele): Rastgele veya sahte rastgele bir sayı kullanılarak üretilir.
  5. Versiyon 5 (İsim tabanlı, SHA-1): Versiyon 3'e benzer, ancak SHA-1 hash'leme kullanır.

Bu araç, Versiyon 1 ve Versiyon 4 UUID'leri oluşturma üzerine odaklanmaktadır.

Formül

Versiyon 1 UUID Üretimi

Versiyon 1 UUID'leri aşağıdaki bileşenleri kullanarak üretilir:

  1. Zaman damgası: 15 Ekim 1582'den (Gregoryen takvim reformunun tarihi) itibaren 100 nanosaniye aralıklarının sayısını temsil eden 60 bitlik bir değer.
  2. Saat sırası: Saati geri almak durumunda çakışmaları önlemek için kullanılan 14 bitlik bir değer.
  3. Düğüm: Genellikle bilgisayarın MAC adresinden türetilen 48 bitlik bir değer.

Versiyon 1 UUID'si oluşturma formülü şu şekilde ifade edilebilir:

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

Versiyon 4 UUID Üretimi

Versiyon 4 UUID'leri, kriptografik olarak güçlü bir rastgele sayı üreteci kullanılarak üretilir. Formül basitçe:

UUID = random_128_bit_number

Belirli bitler versiyonu (4) ve varyantı belirtmek için ayarlanır.

Kullanım Alanları

UUID'lerin bilgisayar bilimi ve yazılım mühendisliği alanlarında birçok uygulaması vardır:

  1. Veritabanı Anahtarları: UUID'ler, özellikle birden fazla düğümün aynı anda kayıt oluşturabileceği dağıtılmış sistemlerde veritabanlarında genellikle birincil anahtar olarak kullanılır.

  2. Dağıtılmış Sistemler: Büyük ölçekli dağıtılmış sistemlerde, UUID'ler kaynakları, işlemleri veya olayları benzersiz bir şekilde tanımlamak için yardımcı olur.

  3. İçerik Adresleme: UUID'ler, içerik adresli depolama sistemlerinde içerik için benzersiz tanımlayıcılar oluşturmak için kullanılabilir.

  4. Oturum Yönetimi: Web uygulamaları genellikle kullanıcı oturumlarını yönetmek için UUID'ler kullanır ve her oturumun benzersiz bir tanımlayıcıya sahip olmasını sağlar.

  5. IoT Cihaz Tanımlaması: Nesnelerin İnterneti (IoT) uygulamalarında, UUID'ler bir ağdaki bireysel cihazları benzersiz bir şekilde tanımlamak için kullanılabilir.

Alternatifler

UUID'ler yaygın olarak kullanılsa da, benzersiz tanımlayıcılar oluşturmak için alternatif yaklaşımlar vardır:

  1. Otomatik artan kimlikler: Tek veritabanı sistemlerinde basit ve yaygın olarak kullanılır, ancak dağıtılmış ortamlar için uygun değildir.

  2. Zaman damgası tabanlı kimlikler: Zaman sıralı veriler için yararlı olabilir, ancak yüksek eşzamanlılık senaryolarında çakışma sorunlarıyla karşılaşabilir.

  3. Snowflake Kimlikleri: Twitter tarafından geliştirilen bu kimlikler, dağıtılmış sistemlerde benzersiz kimlikler oluşturmak için zaman damgası ve işçi numarasını birleştirir.

  4. ULID (Evrensel Benzersiz Lexikografik Olarak Sıralanabilir Tanımlayıcı): UUID'lerden daha insan dostu ve sıralanabilir olmayı amaçlayan daha yeni bir alternatiftir.

Tarihçe

UUID kavramı ilk olarak Apollo Ağ Bilgi İşlem Sistemi'nde tanıtılmış ve daha sonra 1990'larda Açık Yazılım Vakfı (OSF) tarafından standartlaştırılmıştır. İlk spesifikasyon 1997'de ISO/IEC 11578:1996 olarak yayımlanmış ve daha sonra 2005'te ISO/IEC 9834-8:2005'in bir parçası olarak revize edilmiştir.

UUID tarihindeki önemli kilometre taşları:

  • 1980'ler: Apollo Bilgisayar, UUID kavramını Ağ Bilgi İşlem Sistemi için geliştirir.
  • 1997: İlk UUID spesifikasyonu ISO/IEC 11578:1996 olarak yayımlanır.
  • 2005: UUID spesifikasyonu revize edilir ve ISO/IEC 9834-8:2005'in bir parçası olarak yayımlanır.
  • 2009: RFC 4122, günümüzde kullanılan UUID formatını ve üretim algoritmalarını tanımlar.

Zamanla, UUID'ler dağıtılmış sistemler ve veritabanı tasarımı için temel bir araç haline gelmiş, farklı programlama dilleri ve platformlar arasında çeşitli uygulamalar ve uyarlamalar yapılmıştır.

Kod Örnekleri

İşte çeşitli programlama dillerinde UUID oluşturma örnekleri:

import uuid

## Versiyon 4 (rastgele) UUID oluştur
random_uuid = uuid.uuid4()
print(f"Versiyon 4 UUID: {random_uuid}")

## Versiyon 1 (zaman tabanlı) UUID oluştur
time_based_uuid = uuid.uuid1()
print(f"Versiyon 1 UUID: {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Versiyon 4 (rastgele) UUID oluştur
const randomUuid = uuidv4();
console.log(`Versiyon 4 UUID: ${randomUuid}`);

// Versiyon 1 (zaman tabanlı) UUID oluştur
const timeBasedUuid = uuidv1();
console.log(`Versiyon 1 UUID: ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // Versiyon 4 (rastgele) UUID oluştur
        UUID randomUuid = UUID.randomUUID();
        System.out.println("Versiyon 4 UUID: " + randomUuid);

        // Versiyon 1 (zaman tabanlı) UUID oluştur
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("Versiyon 1 UUID: " + timeBasedUuid);
    }
}
require 'securerandom'

## Versiyon 4 (rastgele) UUID oluştur
random_uuid = SecureRandom.uuid
puts "Versiyon 4 UUID: #{random_uuid}"

## Ruby'de Versiyon 1 UUID'leri için yerleşik bir yöntem yoktur
## Bunun için 'uuidtools' gibi bir gem kullanmanız gerekir
<?php
// Versiyon 4 (rastgele) UUID oluştur
$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 "Versiyon 4 UUID: " . $randomUuid . "\n";

// PHP'de Versiyon 1 UUID'leri için yerleşik bir yöntem yoktur
// Bunun için 'ramsey/uuid' gibi bir kütüphane kullanmanız gerekir
?>

Referanslar

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. Uluslararası Standardizasyon Örgütü. (2005). Bilgi teknolojisi – Açık Sistemler Arası İletişim – OSI Kayıt Otoriteleri için İşlem Prosedürleri: Evrensel Benzersiz Tanımlayıcıların (UUID'ler) üretilmesi ve kaydedilmesi ve bunların ASN.1 Nesne Tanımlayıcı bileşenleri olarak kullanımı. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. Evrensel benzersiz tanımlayıcı. (2023). Vikipedi. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. (2023). Vikipedi. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Spes. (n.d.). GitHub. https://github.com/ulid/spec
Feedback