Materialized View — Pano Her Açılışta Neden Bütün Günü Yeniden Topluyor?
Önce şunu oku: Pencere Fonksiyonları — Ekstrede Yürüyen Bakiye Nasıl Hesaplanır?
30 saniyede özet
Şube panosu her açılışta günün bütün hareketlerini yeniden toplar. Materialized view sonucu saklar; okumak hızlanır, ama veri son yenileme kadar günceldir. CONCURRENTLY, yenileme sırasında okuyucuları bekletmez.
Uzun bir koşuda biri her baktığında hakem bütün turları baştan sayıyor. Kesin ama yavaş. Bunun yerine saatte bir güncellenen bir tabela asılıyor ve altına güncelleme saati yazılıyor.
-
Bayt: Şube panosu bugünkü toplamları gösteriyor. Her açılışta günün bütün hareketlerini topluyoruz.
-
Sen: Sabah dokuzda yirmi müdür aynı anda açtı. Veritabanı aynı hesabı yirmi kez yaptı.
-
Bayt: Üstelik o toplamın saniyesi saniyesine doğru olmasına gerek yok. Bir saat önceki de iş görür!
-
Bayt: Bir kez hesaplayıp asalım; altına da saatini yazalım.
Sonucu saklamak
Bir materialized viewBir sorgunun sonucunu tablo gibi saklayan, istendiğinde yenilenen görünüm. Okuması hızlıdır, son yenileme kadar günceldir.Sözlükte gör →, sorgunun sonucunu tablo gibi saklar. Ağır hesap yalnızca yenilemede yapılır; pano, saklanmış küçük sonucu okur.
Bunun bedeli güncelliktir. Son yenilemeden sonra gelen hareketler, bir sonraki yenilemeye kadar görünmez.
Kafam karıştı, daha basit anlat
Sonuç bir kez hesaplanıp saklanır. Okumak hızlıdır, ama son yenileme kadar günceldir.
Materialized view nedir?
Sıradan bir view ile materialized view arasındaki fark nedir?
Yenilerken ne olur?
Pano materialized view'dan okuyor. Saat on birde düz REFRESH başladı ve bir dakika sürüyor. 11:01'de bir müdür panoyu açarsa ne görür? Cevabı göster
Hiçbir şey; yenileme bitene kadar bekler. Düz yenileme, view yeniden hesaplanırken okuyucuları kilitler. CONCURRENTLY ile müdür eski sonucu görmeye devam ederdi.
Adım adım oku
- Her soran için turları baştan say.
- Bir tabela: saatte bir güncellenir.
- Boyanırken eski tabela yerinde kalır.
- Hızlı okunur, son güncelleme kadar günceldir.
REFRESH CONCURRENTLYMaterialized view'ı, yenileme sırasında okuyucuları bekletmeden yenilemek. View üzerinde benzersiz bir indeks ister.Sözlükte gör →, yenileme sürerken okuyucuların eski sonucu görmesine izin verir. Bunun için view üzerinde benzersiz bir indeks gerekir.
Hangi ekranın materialized view’a uygun olduğuna da bakmak gerekir. Şube toplamları biraz eski olabilir; müşterinin anlık bakiyesi olamaz.
Kafam karıştı, daha basit anlat
CONCURRENTLY yenileme sırasında kimseyi bekletmez. Anlık doğruluk gereken yerde saklanmış sonuç kullanma.
Panoyu materialized view'dan okumanın bedeli nedir?
Düz REFRESH MATERIALIZED VIEW çalışırken panoyu açan biri ne yaşar?
Kendin gör
Şube özet panosu
Tohum 230144- 09:00 Müdür panoyu açtı
- 10:00 Yeni hareketler geldi
- 11:00 Özet yenileniyor
- 11:01 Yenileme sürerken pano açıldı
- 12:00 Yeni hareketler geldi
- 12:30 Müdür panoyu açtı
Toplam iş: 0 blok
Şu an ne oldu?
Her açılışta toplamı yeniden hesapla
Bir günün olayları sırayla oynuyor.
Görevler0/3
Her açılış ağır hesabı baştan yapsınaçık
İpucu
Canlı sorgu.
Yenileme sırasında pano açılamasınaçık
İpucu
Düz REFRESH.
Kimse beklemesin ve toplam iş canlı sorgudan az olsunaçık
İpucu
Materialized view ve CONCURRENTLY.
Olay günlüğü (0)
Henüz olay yok. Oynat veya adımla.
- Varsayılanla oynat. Canlı sorgu: üç açılış, üç ağır hesap; hep en güncel toplam.
- “Materialized view” seç. Ağır hesap bir kez yapıldı; ama yenileme sırasında açılan pano bekledi.
- CONCURRENTLY’yi aç. Kimse beklemedi; iki açılış son yenilemedeki toplamı gösterdi.
REFRESH MATERIALIZED VIEW CONCURRENTLY için ne gerekir?
Panoda materialized view kullanılıyorsa ekranda ne yazmalı?
Tuzaklar
Güncelleme saatini göstermemek. Saklanmış sonuç ekranda şimdiki gibi görünürse kullanıcı yanılır. Son yenileme zamanını yanına yaz.
Yenilemeyi her kopyada çalıştırmak. Uygulama birkaç kopyada çalışıyorsa, zamanlanmış yenileme her birinde tekrarlanır. Tek bir kopyada çalışması için bir kilit kullan.
Büyüyen veride tam yenileme. PostgreSQL’in materialized view’ı her seferinde baştan hesaplanır. Veri çok büyürse, değişen kısmı güncelleyen bir özet tablosu düşün.
Kafam karıştı, daha basit anlat
Saatini yaz, yenilemeyi tek kopyada çalıştır, büyüyünce özet tablosuna bak.
Hangi ekran materialized view için uygun değildir?
Derinleş · Şube panosu: saklanmış günlük toplamlar 3 dosya · ~56 satır · ilk okumada atlayabilirsin
Kendini sına
Sıradan bir view sorgunun sonucunu saklar.
Yenileme her seferinde bütün hesabı baştan yapar. Veri çok büyürse ne düşünülür?
Aklında kalacak üç şey
- 1 Materialized view bir sorgunun sonucunu tablo gibi saklar. Ağır hesap yalnızca yenilemede yapılır, okumalar hızlıdır.
- 2 Saklanmış sonuç son yenileme kadar günceldir. Ekranda son güncelleme zamanı yazmalı; anlık doğruluk gereken yerde kullanılmaz.
- 3 Düz yenileme okuyucuları bekletir. REFRESH ... CONCURRENTLY eski sonucu okutmaya devam eder ve benzersiz bir indeks ister.
4 kart sonraki derste seni bekliyor