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ı
- Veritabanı birincil anahtarı: Dağıtık veritabanlarda birincil anahtar olarak kullanılır
- Dosya tanımlama: Dosya sistemindeki dosyaları tanımlama
- Oturum yönetimi: Web uygulamalarında oturum tanımlayıcısı
- Mesaj kuyruğu: Mesajların benzersiz tanımlaması
- 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
- Genel kullanım: UUID v4 kullanın
- Zaman sıralaması gerekli: UUID v1 kullanın
- Belirleyicilik gerekli: UUID v3 veya v5 kullanın
- 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