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 AS2SELECT 3DATE(o.order_date) as sale_date,4c.customer_name,5p.product_name,6o.quantity,7(o.quantity * p.price) as total_amount8FROM orders o9JOIN customers c ON o.customer_id = c.id10JOIN products p ON o.product_id = p.id11WHERE 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_revenue2FROM daily_sales_report3GROUP BY sale_date4ORDER BY sale_date DESC;Beklenen Çıktı:
1sale_date | daily_revenue22024-01-15 | 45230.5032024-01-14 | 38920.7542024-01-13 | 52100.00Veriyi Yenileme
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.
5 yorum
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
işte tam da orası kritik bazı veritabanları otomatik güncelleme yapıyor ama bunu ayarlamak gerekiyor
ama bir de güncelleme sorunu var dimi veri değişince o tablo da güncellenmiş olması gerekiyor
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
ay şu materialized view şeyi hep merak etmişimdir normal viewler her seferinde sorguyu