Materialized View: Ağır Sorguları Önbelleğe Alarak Hızlandırma

Raporlama ve analiz işlerinde aynı karmaşık sorguyu defalarca çalıştırmak sistem kaynağını boşa harcar. Materialized View (Somutlaştırılmış Görünüm), sorgu sonuçlarını gerçek bir tablo gibi diskte depolayarak bu sorunu çözer.

Sıradan VIEW'ler her çağrıldığında sorguyu yeniden çalıştırır. Materialized View ise sonucu önbelleğe alır ve sadece veri değiştiğinde günceller. Örneğin günlük satış raporunda milyonlarca satırı birleştiren sorgu, materialized view sayesinde saniyeler içinde döner.

Pratik Örnek: Satış Raporu

Elektronik mağazanızda her gün binlerce siparişin, müşteri bilgisinin ve ürün detayının birleştirilmesi gerekiyor. Normal VIEW kullanırken rapor açılması 30 saniye sürer.

1CREATE MATERIALIZED VIEW daily_sales_report AS
2SELECT
3DATE(o.order_date) as sale_date,
4c.customer_name,
5p.product_name,
6o.quantity,
7(o.quantity * p.price) as total_amount
8FROM orders o
9JOIN customers c ON o.customer_id = c.id
10JOIN products p ON o.product_id = p.id
11WHERE o.order_date >= CURRENT_DATE - INTERVAL 90 DAY;

Sorgu ilk kez çalışır ve sonuç diske yazılır. Artık raporunuzu saniyeler içinde açabilirsiniz:

1SELECT sale_date, SUM(total_amount) as daily_revenue
2FROM daily_sales_report
3GROUP BY sale_date
4ORDER BY sale_date DESC;

Beklenen Çıktı:

1sale_date | daily_revenue
22024-01-15 | 45230.50
32024-01-14 | 38920.75
42024-01-13 | 52100.00

Veriyi Yenileme

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Materialized view'in gücü düzenli yenilenmesinden gelir. Her gece yeni siparişleri dahil etmek için:

1REFRESH MATERIALIZED VIEW daily_sales_report;

Büyük tablolarda tam yenileme yavaş olabilir. Bazı veritabanlar (PostgreSQL, Oracle) artımlı yenilemeyi destekler:

[kod]
REFRESH MATERIALIZED VIEW CONCURRENTLY daily_sales_report;
[/cod]

Sık Yapılan Hata

Materialized view'i sık değişen veriler için kullanmak yanılgıdır. Eğer siparişler gerçek zamanlı güncelleniyorsa ve raporunuzun her saniye canlı olması gerekiyorsa, materialized view uygun değildir. Bu durumda caching katmanı (Redis) veya veritabanı indeksleri daha iyi seçimdir.

Materialized view, raporlama, analitik ve haftalık/günlük özetler için idealdir. Doğru yerde kullanıldığında sorgu hızı 10-100 kat artar.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz
  • adlı kullanıcıya yanıt verdi
    kahvekokusu

    evet ama mesela işi yoğun olduğu saatlerde o güncelleme işlemi sistem yavaşlatabilir mi yoksa arka planda sessizce mi oluyor

  • adlı kullanıcıya yanıt verdi
    papatyasuyu

    işte tam da orası kritik bazı veritabanları otomatik güncelleme yapıyor ama bunu ayarlamak gerekiyor

  • adlı kullanıcıya yanıt verdi
    kahvekokusu

    ama bir de güncelleme sorunu var dimi veri değişince o tablo da güncellenmiş olması gerekiyor

  • adlı kullanıcıya yanıt verdi
    papatyasuyu

    aynen işte normal view her açışında o sorguyu baştan çalıştırıyor materialized view ise sonucu bir tabloya kaydediyor sonra o tablodan okuyorsun veri

  • kahvekokusu

    ay şu materialized view şeyi hep merak etmişimdir normal viewler her seferinde sorguyu