UUIDv7 PostgreSQL 18'e geliyor
(thenile.dev)- 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_uringtabanlı asenkron giriş/çıkış ile sequence scan ve vacuum işlemlerinde 2~3 kat hız artışı - Çok sütunlu btree indekslerinde Skip scan,
OR/INsorgu 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.
- Async I/O:
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 üretimiuuidv7(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
Ben bunun yerine Prisma + ULID kullanıyorum. Çok daha kısa ve daha iyi.
uuid_generate_v7()gibi bir fonksiyon oluşturup kullanıyordum; bu sevindirici bir haber.Vay!!
O...!