UUID (Universally Unique Identifier), merkezi bir otorite olmadan benzersiz kimlikler oluşturmayı sağlayan 128-bit'lik bir standarttır. Dağıtık sistemlerde, veritabanlarında ve API'lerde kaynakları benzersiz şekilde tanımlamak için yaygın olarak kullanılır.
UUID Nedir ve Neden Gereklidir?
Geleneksel artan sayılar (auto-increment) merkezi bir veritabanına bağımlıdır. Birden fazla sunucu veya servisin aynı anda kayıt oluşturduğu dağıtık sistemlerde, çakışma riski olmadan benzersiz kimlik üretmek için UUID kullanılır.
Bir UUID şu formatta 32 heksadesimal karakterden oluşur:
550e8400-e29b-41d4-a716-446655440000
│ │ │ │ │
│ │ │ │ └── Düğüm (node)
│ │ │ └─────── Saat dizisi / varyant
│ │ └──────────── Versiyon
│ └───────────────── Zaman damgası (bazı versiyonlarda)
└────────────────────────── Zaman damgası (bazı versiyonlarda)
UUID Versiyonları
UUID v1 — Zaman ve MAC Adresi
Oluşturulma zamanı ve bilgisayarın MAC adresinden türetilir:
- Avantaj: Kronolojik sıralama mümkündür
- Dezavantaj: MAC adresi bilgisini içerdiği için gizlilik riski taşır
- Kullanım: Günümüzde gizlilik endişeleri nedeniyle pek tercih edilmez
UUID v4 — Rastgele
Tamamen rastgele sayılardan oluşur ve en yaygın kullanılan versiyondur:
// JavaScript (Web Crypto API)
crypto.randomUUID();
// "3b241101-e2bb-4d7a-8613-e4a28db31cf1"
// Node.js
import { randomUUID } from 'crypto';
randomUUID();
// Python
import uuid
str(uuid.uuid4())
- Avantaj: Basit, güvenli, gizlilik dostu
- Dezavantaj: Sıralama yapılamaz, veritabanı indeks performansı düşük olabilir
- Kullanım: Genel amaçlı benzersiz kimlik ihtiyacı
UUID v7 — Zaman Tabanlı (Yeni Standart)
2024'te onaylanan en yeni UUID versiyonudur. Unix milisaniye zaman damgası ile başlar:
// Yapı: milisaniye zaman damgası + rastgele
018f1c7c-8e80-7000-8000-1a2b3c4d5e6f
│ │
└── zaman ─────┘ └── rastgele ──────┘
- Avantaj: Kronolojik sıralama mümkün, veritabanı indeks performansı iyi, gizlilik dostu
- Dezavantaj: Henüz tüm dillerde/kütüphanelerde yaygın değil
- Kullanım: Yeni projelerde v4 yerine tercih edilmesi önerilen versiyon
UUID vs Auto-Increment
İki yaklaşımın karşılaştırması:
- Benzersizlik: Auto-increment tek veritabanında benzersiz; UUID evrensel olarak benzersiz
- Dağıtık sistem: Auto-increment merkezi koordinasyon gerektirir; UUID bağımsız üretilebilir
- Güvenlik: Auto-increment tahmin edilebilir (ID:42 → ID:43); UUID tahmin edilemez
- Boyut: Auto-increment 4-8 byte; UUID 16 byte (2-4 kat daha büyük)
- Okunabilirlik: Auto-increment kolay okunur; UUID uzun ve karmaşık
- İndeks performansı: Auto-increment sıralı olduğu için B-tree indekslerinde mükemmel; UUID v4 rastgele dağılır ve indeks parçalanmasına yol açabilir (v7 bu sorunu çözer)
Çarpışma Olasılığı
UUID v4'te 122 bit rastgelelik vardır. Bu, astronomik düzeyde düşük bir çarpışma olasılığı anlamına gelir:
- Toplam olası UUID sayısı: 2^122 ≈ 5.3 × 10^36
- 1 milyar UUID üretseniz bile çarpışma olasılığı: ~10^-18 (bir milyar milyarda bir)
- %50 çarpışma olasılığına ulaşmak için yaklaşık 2.71 × 10^18 UUID üretmeniz gerekir
Pratikte, UUID çarpışması konusunda endişelenmenize gerek yoktur. Donanım hatası olasılığı UUID çarpışmasından çok daha yüksektir.
ULID: Alternatif Bir Yaklaşım
ULID (Universally Unique Lexicographically Sortable Identifier), UUID'nin sıralanamaz olma dezavantajını gideren bir alternatiftir:
01ARZ3NDEKTSV4RRFFQ69G5FAV
│ │
└── zaman (48-bit) ────────┘ └── rastgele (80-bit) ─┘
- 128-bit, UUID ile aynı boyut
- Crockford's Base32 kodlama — 26 karakter, URL uyumlu
- Kronolojik sıralama mümkün (milisaniye hassasiyetinde)
- Büyük/küçük harf duyarsız
Ancak UUID v7'nin standartlaşmasıyla ULID'nin avantajı azalmıştır. Yeni projeler için UUID v7 önerilir.
Ne Zaman Ne Kullanmalı?
- Tek veritabanı, dahili kullanım: Auto-increment yeterlidir
- API'de açık kimlikler: UUID v4 veya v7 (tahmin edilemezlik için)
- Dağıtık sistem: UUID v7 (sıralama + benzersizlik)
- Yüksek performans gereksinimi: UUID v7 veya ULID (indeks dostu)
Hızlıca UUID oluşturmak mı istiyorsunuz? SiteScripti'nin UUID Oluşturucu aracıyla farklı UUID versiyonlarını anında üretebilirsiniz.
Bu konuyla ilgili araçlarımızı da deneyin: JSON Formatter, Regex Test Aracı, cURL Builder