15 puan yazan GN⁺ 2025-05-22 | 4 yorum | WhatsApp'ta paylaş
  • PostgreSQL 18, UUIDv7 için yerleşik destek sunuyor ve sıralanabilir, indeks dostu benzersiz tanımlayıcılar sağlıyor
  • UUIDv7, mevcut UUID'lerin dağıtık ortamlarda benzersizlik ve güvenlik özelliklerini korurken, btree indeksleri için avantajlı zaman tabanlı bir sıralama yapısı benimsiyor
  • Mevcut UUID kullanımının dezavantajları olan sıralanamama, indeks dağınıklığı, bellek boyutu sorunlarından ilk ikisini çözüp zaman sıralı düzenleme ve ekleme optimizasyonu sağlıyor
  • PostgreSQL 18'de uuidv7() fonksiyonuyla UUID üretilebiliyor; ayrıca timestamp çıkarma ve özel zaman girişi özellikleri de sunuluyor
  • Böylece UUID'yi birincil anahtar olarak kullanma konusundaki tereddütlerin nedenleri büyük ölçüde ortadan kalkıyor ve UUID, dağıtık sistemler ile çok kiracılı ortamlarda daha uygun bir seçenek haline geliyor

PostgreSQL 18

  • PostgreSQL 18'in beta sürümü yayımlandı ve Eylül ayındaki resmi sürüm hedefiyle testler sürüyor
  • Başlıca özellikler:
    • Async I/O: io_uring tabanlı asenkron giriş/çıkış ile sequence scan ve vacuum işlemlerinde 2~3 kat hız artışı
    • Çok sütunlu btree indekslerinde Skip scan, OR/IN sorgu optimizasyonu
    • Yükseltmeler arasında planner istatistiklerinin korunması
    • UUIDv7 fonksiyonu
    • Sanal üretilmiş sütunlar, OAuth oturumu açma, EXPLAIN'e I/O/CPU/WAL bilgisi eklenmesi vb.

UUID'nin avantajları

  • Dağıtık ortamlarda benzersiz kimlik üretimi mümkün
  • Tahmin edilemeyen herkese açık tanımlayıcılar ile daha güçlü güvenlik
  • İstemcide doğrudan kimlik üretimi sayesinde sunucu iletişimini en aza indirme

Mevcut UUID'nin dezavantajları

  • Sıralanamaz
  • İndeks yerelliğinin olmaması nedeniyle ekleme performansında düşüş
  • 128 bit boyutun getirdiği ek yük

UUIDv7'nin çözümü

  • RFC 9562'ye (Mayıs 2024'te yayımlandı) göre tanıtılan yeni UUID sürümü
  • İlk 48 bitte Unix Epoch tabanlı timestamp, kalan kısımda ise rastgele değer + sayaç birleşimi bulunuyor
  • Zaman sıralı olarak dizilebiliyor ve indeks ekleme verimliliğini artırıyor
  • UUIDv6 geriye dönük uyumluluk için, UUIDv8 ise deneysel/vendor genişletmeleri için
  • Pratikte anlamlı olan tek yeni standart UUIDv7

PostgreSQL 18'de UUIDv7 kullanımı

  • uuidv7() fonksiyonuyla geçerli zamana dayalı UUID üretimi
  • uuidv7(INTERVAL) ile istenen zaman offset'inin uygulanması
  • uuid_extract_version(), uuid_extract_timestamp() fonksiyonlarıyla UUID sürümü ve üretim zamanının çıkarılması
  • Örnek:
    CREATE TABLE test (  
        id uuid DEFAULT uuidv7() PRIMARY KEY,  
        name text  
    );  
    
    INSERT INTO test (name) VALUES ('foo');  
    INSERT INTO test (name) VALUES ('bar');  
    INSERT INTO test (id, name) VALUES (uuidv7(INTERVAL '-1 hour'), 'oldest');  
    
    SELECT uuid_extract_timestamp(id), name FROM test ORDER BY id;  
    
  • uuidv4(), gen_random_uuid() için bir takma ad olarak eklendi

Sonuç ve öneriler

  • UUIDv7, mevcut UUID kullanımında performans sorunları yaşayan kullanıcılar için uygun
  • Sıralanabilirlik ve indeks performansı sağlarken UUID'nin avantajlarını koruyor
  • PostgreSQL 18 beta sürümünde hemen test edilebilir
  • Dağıtık sistemler, çok kiracılı uygulamalar ve sunucusuz ortamlarda kimlik üretimi için uygun bir seçenek
    > “UUIDv7, sessiz ama güçlü bir özellik eklemesi; Postgres'te UUID'yi birincil anahtar olarak kullanmayı yeniden düşünmeye değer kılıyor”

4 yorum

 
jaylee 2025-05-23

Ben bunun yerine Prisma + ULID kullanıyorum. Çok daha kısa ve daha iyi.

 
ssssut 2025-05-22

uuid_generate_v7() gibi bir fonksiyon oluşturup kullanıyordum; bu sevindirici bir haber.

 
stomx 2025-05-22

Vay!!

 
halfenif 2025-05-22

O...!