- Katılım
- 17 Eki 2024
- Mesajlar
- 2
- Tepkime puanı
- 13
- Puanları
- 1
PostgreSQL 16’da JSONB Generated Columns ile Dinamik Veri Modelleme: Geleneksel Sütunları Bileği
Merhaba veritabanı meraklıları!
Bugün sizlerle PostgreSQL 16’nın en az bilinen ama gizemli gücünü paylaşacağım: **JSONB’de Generated Columns**. Artık evrensel bir JSON yapılandırma bile, benimsediğiniz tek bir sütun tasarımıyla sanki ‘satır baryan' gibi ayağa kaldırılabiliyor.
## Neden Generated Columns?
Sadece tam metin arama değil, karmaşık JSON BLOB’ları sorgulamak da şu ana kadar parça parça kopyalama yapmak zorundaydık. Bir gün veri entegre ettiğimiz bir POI’nin “coğrafi koordinat” ikili alanını sanal sütunlarla otomatik dengeleyebilmek kadar sanal bir gücü bir veritabanı seni ürketecek?
## Örnek Tablo
```sql
CREATE TABLE mekanlar (
id serial PRIMARY KEY,
data jsonb NOT NULL,
lat double precision GENERATED ALWAYS AS (data->>'lat')::double precision STORED,
lng double precision GENERATED ALWAYS AS (data->>'lng')::double precision STORED
);
```
- **lat** ve **lng**: jsonb’deki `lat` sihirli değeri otomatik olarak alır.
- `::double precision`: JSON’daki string değerleri sayıya çevirir.
- STORED: Sabit sahne. Her güncelleme izlenir, sorgu süresi hızlıdır.
## Avantajları
1. **Tekrarlayan Tipik Altsorgu**: `JOIN`, `WHERE (data->>'lat')::double` yerine doğrudan `WHERE lat > 50`!
2. **Versiyon Kontrolü**: JSON değiştiğinde sanal sütunlar otomatik güncellenir—henüz güncellemeyi manuel yapmak zorunda değilsiniz.
3. **Karmaşık Hesaplamalar**: Koordinatları Euro dallarına dönüştürmek? Yön bilgisi eklemek? Birkaç `AS` satırı yeterli.
4. **Performans**: İndeksleyebilirsiniz; `CREATE INDEX ON mekanlar (lat, lng);` gibi.
## Sık Sorgulanan Kullanım
```sql
SELECT id, lat, lng
FROM mekanlar
WHERE lat BETWEEN 40 AND 45
AND lng BETWEEN -80 AND -75;
```
Bununla birlikte *JSONB* özelliği, aynı anda hem evrensel hem de sık sorgulanmış alanlarla kullanılabildiği için inşa ettiğiniz veritabanı camı şeffaf, esnek ve trafiğe dayanıklı bir kuleye dönüşür.
## Sonuç
PostgreSQL 16’nın bu yeteneği, **veri yapısına yeni bir yaklaşımla dalga dalga** çıkarmama izin verir. Artık JSON’un “veri zıpları” sağlıklı bir sütun gibi davranır, performans aşırlığını *model* ile birleştirir.
Yazının sonunda bir test fikri: Aynı tabloyu MongoDB’ye taşıp, nasıl farklı ideallerle çalışacağını inceleyin. Engelinizi kişisel verileri veya GDPR mekaniğini yanına getirin!
Takipte kalın, çünkü geotag ve JSON ile başka neler yapılabilir sizin tarafınızdan düşünülmezse de bir adım önde!







