w

UUID Oluşturucu

UUID Nedir?

UUID (Universally Unique Identifier, Evrensel Benzersiz Tanımlayıcı), bilgisayar sistemlerinde bilgileri benzersiz şekilde tanımlamak için kullanılan 128 bitlik bir sayıdır. UUID ayrıca GUID (Globally Unique Identifier, Küresel Benzersiz Tanımlayıcı) olarak da adlandırılır.

UUID'nin Özellikleri

  • Benzersizlik: Dağıtık bir sistemde yinelenen UUID'ler oluşturma olasılığı son derece düşüktür
  • Standardizasyon: RFC 4122 standardına uygun
  • Platform bağımsızlığı: Farklı işletim sistemleri ve programlama dillerinde kullanılabilir
  • Merkezi olmayan: Merkezi koordinasyon otoritesi gerektirmez

UUID'nin Uygulama Senaryoları

  1. Veritabanı birincil anahtarı: Dağıtık veritabanlarda birincil anahtar olarak kullanılır
  2. Dosya tanımlama: Dosya sistemindeki dosyaları tanımlama
  3. Oturum yönetimi: Web uygulamalarında oturum tanımlayıcısı
  4. Mesaj kuyruğu: Mesajların benzersiz tanımlaması
  5. API arayüzü: API isteklerinin ve yanıtlarının tanımlaması

UUID Sürümlerinin Detayları

UUID v1 (zaman ve düğüm tabanlı)

Format: xxxxxxxx-xxxx-1xxx-yxxx-xxxxxxxxxxxx

Özellikler:

  • Mevcut zaman ve düğüm ID'sine dayalı (genellikle MAC adresi)
  • Zaman damgası bilgilerini içerir, zamana göre sıralanabilir
  • MAC adresi bilgilerini açığa çıkarabilir

Oluşturma algoritması:

// Sözde kod örneği
function generateUUIDv1() {
  const timestamp = Date.now();
  const nodeId = getMACAddress();
  const clockSeq = random16Bit();

  return formatUUID(timestamp, clockSeq, nodeId);
}

UUID v3 (ad alanı ve MD5 tabanlı)

Format: xxxxxxxx-xxxx-3xxx-yxxx-xxxxxxxxxxxx

Özellikler:

  • Ad alanı UUID'si ve adın MD5 hash'ine dayalı
  • Aynı ad alanı ve aynı ad her zaman aynı UUID'yi üretir
  • Belirleyici UUID gerektiren senaryolar için uygundur

Oluşturma algoritması:

function generateUUIDv3(namespace, name) {
  const namespaceBytes = parseUUID(namespace);
  const nameBytes = Buffer.from(name, 'utf8');
  const hash = crypto
    .createHash('md5')
    .update(Buffer.concat([namespaceBytes, nameBytes]))
    .digest();

  return formatUUIDv3(hash);
}

UUID v4 (rastgele oluşturma)

Format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx

Özellikler:

  • Tamamen rastgele oluşturma
  • En yaygın kullanılan UUID sürümü
  • Anlamlı bilgi içermez

Oluşturma algoritması:

function generateUUIDv4() {
  const bytes = crypto.randomBytes(16);
  bytes[6] = (bytes[6] & 0x0f) | 0x40; // Sürüm 4
  bytes[8] = (bytes[8] & 0x3f) | 0x80; // Varyant

  return formatUUID(bytes);
}

UUID v5 (ad alanı ve SHA-1 tabanlı)

Format: xxxxxxxx-xxxx-5xxx-yxxx-xxxxxxxxxxxx

Özellikler:

  • Ad alanı UUID'si ve adın SHA-1 hash'ine dayalı
  • v3'ten daha güvenli (MD5 yerine SHA-1 kullanır)
  • Belirleyici UUID gerektiren senaryolar için uygundur

UUID NIL (boş UUID)

Format: 00000000-0000-0000-0000-000000000000

Özellikler:

  • Tüm bitler 0'dır
  • "UUID yok" veya "bilinmeyen UUID" temsil etmek için kullanılır
  • Veritabanı tasarımında varsayılan değer olarak kullanılır

Önceden Tanımlanmış Ad Alanları

Standart Ad Alanı UUID'leri

  • DNS ad alanı: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
  • URL ad alanı: 6ba7b811-9dad-11d1-80b4-00c04fd430c8
  • OID ad alanı: 6ba7b812-9dad-11d1-80b4-00c04fd430c8
  • X.500 DN ad alanı: 6ba7b814-9dad-11d1-80b4-00c04fd430c8

Kullanım örneği

// DNS ad alanını kullanarak UUID v3 oluşturma
const dnsNamespace = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
const uuid = generateUUIDv3(dnsNamespace, 'example.com');
// Sonuç: 5df41881-3aed-3515-88a7-2f4a814cf09e

API Arayüzü

Tekil UUID Oluşturma

// UUID v4 oluşturma
const uuid = generateUUID('v4');

// UUID v1 oluşturma
const uuid = generateUUID('v1');

// UUID v3 oluşturma
const uuid = generateUUID('v3', {
  namespace: '6ba7b810-9dad-11d1-80b4-00c04fd430c8',
  name: 'example.com',
});

Toplu UUID Oluşturma

// Toplu UUID oluşturma
const uuids = generateMultipleUUIDs('v4', 10);

// Farklı sürümlerde UUID'ler oluşturma
const mixedUUIDs = generateMultipleUUIDs(['v1', 'v4', 'v5'], 5);

UUID Doğrulama

// UUID formatını doğrulama
const isValid = validateUUID('550e8400-e29b-41d4-a716-446655440000');

// UUID sürümünü alma
const version = getUUIDVersion('550e8400-e29b-41d4-a716-446655440000');

Performans Hususları

Oluşturma hızı

  • v4 (rastgele): En hızlı, yaklaşık 100.000 UUID/saniye
  • v1 (zaman): Orta, yaklaşık 50.000 UUID/saniye
  • v3/v5 (hash): Daha yavaş, yaklaşık 10.000 UUID/saniye

Bellek kullanımı

  • Her UUID 16 byte kaplar
  • Toplu oluşturma sırasında bellek kullanımına dikkat edin

Eşzamanlılık güvenliği

  • v4 kriptografik olarak güvenli rastgele sayı üreteci kullanır
  • v1 saat dizisinin benzersizliğini sağlamayı gerektirir

En İyi Uygulamalar

UUID Sürüm Seçimi

  1. Genel kullanım: UUID v4 kullanın
  2. Zaman sıralaması gerekli: UUID v1 kullanın
  3. Belirleyicilik gerekli: UUID v3 veya v5 kullanın
  4. Veritabanı birincil anahtarı: UUID v4 önerin

Depolama optimizasyonu

-- PostgreSQL'de UUID depolama
CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name VARCHAR(255)
);

-- İndeks oluşturma
CREATE INDEX idx_users_id ON users(id);

Performans optimizasyonu

// Bellek ayırımını azaltmak için nesne havuzu kullanma
const uuidPool = new Array(1000).fill(null).map(() => generateUUIDv4());

// Toplu oluşturma için Web Workers kullanma
const worker = new Worker('uuid-worker.js');
worker.postMessage({ type: 'generate', count: 1000 });

Sık Sorulan Sorular

S: UUID ve GUID arasındaki fark nedir?

C: UUID ve GUID özünde aynıdır, sadece isimler farklıdır. UUID RFC standart terimidir, GUID Microsoft terimidir.

S: UUID'ler yinelenebilir mi?

C: Teorik olarak mümkündür, ancak olasılık son derece düşüktür. v4 UUID'nin yinelenme olasılığı yaklaşık 2,71 × 10^-36'dır.

S: UUID sürümünü nasıl seçerim?

C: Gereksinimlere göre seçin:

  • Rastgelelik gerekli: v4
  • Zaman bilgisi gerekli: v1
  • Belirleyicilik gerekli: v3 veya v5

S: UUID veritabanı performansını etkiler mi?

C: UUID tam sayı birincil anahtardan daha büyük olduğu için etkileyebilir. Öneriler:

  • B-tree indeksleri kullanın
  • UUID v1 (zaman sıralaması) kullanmayı düşünün
  • Uygun durumlarda tam sayı birincil anahtarlar kullanın

İlgili Araçlar

Teknik Özellikler

RFC Standartları

  • RFC 4122: UUID Özellikleri
  • RFC 4122 Section 4.1.3: UUID Sürüm Tanımları

Programlama Dili Desteği

  • JavaScript: crypto.randomUUID() (Node.js 14.17+)
  • Python: uuid modülü
  • Java: java.util.UUID
  • C#: System.Guid

Son güncelleme: 20 Ocak 2024

Was this page helpful?