Materialiserade vyer

Materialiserade vyer exponerar en aggregeringsfråga över en källtabell eller över en annan materialiserad vy.

Materialiserade vyer returnerar alltid ett uppdaterat resultat av aggregeringsfrågan (alltid färsk). Det är bättre att köra frågor mot en materialiserad vy än att köra aggregeringen direkt över källtabellen.

Anteckning

Varför ska man använda materialiserade vyer?

Genom att investera resurser (datalagring, processorcykler i bakgrunden) för materialiserade vyer av vanliga aggregeringar får du följande fördelar:

  • Prestandaförbättring: Att fråga en materialiserad vy presterar vanligtvis bättre än att fråga källtabellen om samma sammansättningsfunktioner.

  • Friskhet: En materialiserad vyfråga returnerar alltid de mest aktuella resultaten, oberoende av när materialiseringen senast ägde rum. Frågan kombinerar den materialiserade delen av vyn med posterna i källtabellen, som ännu inte har materialiserats ( delta delen), vilket alltid ger de mest aktuella resultaten.

  • Kostnadsminskning:Att fråga en materialiserad vy förbrukar mindre resurser från klustret än att utföra aggregeringen över källtabellen. Kvarhållningsprincipen för källtabellen kan minskas om endast aggregering krävs. Den här konfigurationen minskar kostnaderna för frekvent cachelagring för källtabellen.

Exempel på användningsfall finns i Användningsfall för materialiserad vy.

Så här fungerar materialiserade vyer

En materialiserad vy består av två komponenter:

  • En materialiserad del – en tabell som innehåller aggregerade poster från källtabellen, som redan har bearbetats. Den här tabellen innehåller alltid en enda post per sammansättnings kombination gruppera efter.
  • En delta – de nyligen inmatade posterna i källtabellen som ännu inte har bearbetats.

När du kör frågor mot den materialiserade vyn kombineras den materialiserade delen med deltadelen, vilket ger ett uppdaterat resultat av aggregeringsfrågan. Materialiseringsprocessen offline matar in nya poster från delta till den materialiserade tabellen och uppdaterar befintliga poster. Om skärningspunkten mellan deltat och den materialiserade delen är stor och många poster kräver uppdateringar, kan detta ha en negativ inverkan på materialiseringsprocessen. Se Övervaka materialiserade vyer om hur du felsöker sådana situationer.

Frågor om materialiserade vyer

Det finns två sätt att köra frågor mot en materialiserad vy:

  • Fråga hela vyn: när du frågar den materialiserade vyn efter dess namn, på samma sätt som du frågar en tabell, kombinerar den materialiserade vyfrågan den materialiserade delen av vyn med posterna i källtabellen som inte har materialiserats ännu ( delta).

    • Om du frågar den materialiserade vyn returneras alltid de mest aktuella resultaten, baserat på alla poster som matas in i källtabellen. Mer information om materialiserade och icke-materialiserade delar i materialiserad vy finns i hur materialiserade vyer fungerar.
    • Det här alternativet kanske inte presterar bäst eftersom det behöver materialisera delta delen under frågetiden. Prestanda i det här fallet beror på vyns ålder och de filter som tillämpas i frågan. Avsnittet för frågeoptimerare för materialiserad vy innehåller möjliga sätt att förbättra frågeprestanda när du kör frågor mot hela vyn.
  • Fråga endast den materialiserade delen: ett annat sätt att fråga vyn är att använda materialized_view() funktionen . Det här alternativet stöder endast frågor mot den materialiserade delen av vyn, samtidigt som du anger den maximala svarstid som användaren är villig att tolerera.

    • Det här alternativet är inte garanterat att returnera de mest aktuella posterna, men det bör alltid vara mer högpresterande än att fråga hela vyn.
    • Den här funktionen är användbar för scenarier där du är villig att offra viss aktualitet för prestanda, till exempel för telemetriinstrumentpaneler.

Tips

Frågor över den materialiserade delen presterar bara bättre än att fråga hela vyn. Använd materialized_view() alltid funktionen när det är tillämpligt för ditt användningsfall.

  • Materialiserade vyer deltar i frågor mellan kluster eller mellan databaser, men ingår inte i unioner eller sökningar med jokertecken.

    • I följande exempel ingår alla materialiserade vyer med namnet ViewName:
    cluster('cluster1').database('db').ViewName
    cluster('cluster1').database('*').ViewName
    database('*').ViewName
    database('DB*').ViewName
    database('*').materialized_view('ViewName')
    database('DB*').materialized_view('ViewName')
    
    • I följande exempel ingår inte poster från materialiserade vyer:
    cluster('cluster1').database('db').*
    database('*').View*
    search in (*)
    search * 
    

Frågeoptimerare för materialiserad vy

När du kör frågor mot hela vyn kombineras den materialiserade delen med delta under frågetiden. Detta inkluderar att aggregera delta och koppla den med den materialiserade delen.

  • Det går bättre att köra frågor mot hela vyn om frågan innehåller filter i gruppen efter nycklar för den materialiserade vyfrågan. Se fler tips om hur du skapar en materialiserad vy, baserat på ditt frågemönster, i .create materialized-view avsnittet prestandatips .
  • Frågeoptimeraren väljer sammanfatta/koppla strategier som förväntas förbättra frågeprestanda. Till exempel baseras beslutet om huruvida frågan ska blandas på ett visst antal poster delta . Följande egenskaper för klientbegäran ger viss kontroll över de optimeringar som tillämpas. Du kan testa dessa egenskaper med dina materialiserade vyfrågor och utvärdera deras inverkan på frågeprestanda.
Egenskapsnamn för klientbegäran Typ Description
materialized_view_query_optimization_costbased_enabled bool Om det är inställt på falseinaktiveras summarize/join-optimeringar i materialiserade vyfrågor. Använder standardstrategier. Standardvärdet är true.
materialized_view_shuffle dynamic Framtvinga blandning av den materialiserade vyfrågan och (om du vill) ange specifika nycklar att blanda med. Se exempel nedan.

Exempel

  1. Fråga hela vyn. De senaste posterna i källtabellen ingår:

    ViewName
    
  2. Fråga endast den materialiserade delen av vyn, oavsett när den senast materialiserades.

    materialized_view("ViewName")
    
  3. Fråga hela vyn och ange ett "tips" för att använda shuffle en strategi. De senaste posterna i källtabellen ingår:

    • Exempel 1: blanda baserat på Id kolumnen (på samma sätt som med ):hint.shufflekey=Id
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]);
    ViewName
    
    • Exempel 2: blanda baserat på alla nycklar (på samma sätt som när du använder hint.strategy=shuffle):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]);
    ViewName
    

Saker att tänka på gällande prestanda

De viktigaste bidragande faktorerna som kan påverka en materialiserad vyhälsa är:

  • Klusterresurser: Precis som andra processer som körs i klustret förbrukar materialiserade vyer resurser (CPU, minne) från klustret. Om klustret är överbelastat kan det orsaka en försämring av klustrets prestanda om du lägger till materialiserade vyer i det. Övervaka klustrets hälsa med hjälp av hälsomått för kluster. Optimerad autoskalning tar för närvarande inte hänsyn till materialiserade vyers hälsa som en del av reglerna för autoskalning.

  • Överlappa med materialiserade data: Under materialiseringen bearbetas och materialiseras alla nya poster som matats in i källtabellen sedan den senaste materialiseringen (deltat) i vyn. Ju högre skärningspunkten mellan nya poster och redan materialiserade poster är, desto sämre blir prestandan för den materialiserade vyn. En materialiserad vy fungerar bäst om antalet poster som uppdateras (till exempel i arg_max vyn) är en liten delmängd av källtabellen. Om alla eller de flesta av de materialiserade vyposterna behöver uppdateras i varje materialiseringscykel kanske den materialiserade vyn inte fungerar bra.

  • Inmatningshastighet: Det finns inga hårdkodade gränser för datavolymen eller datainmatningshastigheten i källtabellen för den materialiserade vyn. Den rekommenderade inmatningshastigheten för materialiserade vyer är dock högst 1–2 GB/s. Högre datainmatningshastigheter kan fortfarande fungera bra. Prestanda beror på klusterstorlek, tillgängliga resurser och mängden skärningspunkt med befintliga data.

  • Antal materialiserade vyer i klustret: Ovanstående överväganden gäller för varje enskild materialiserad vy som definierats i klustret. Varje vy förbrukar sina egna resurser och många vyer konkurrerar med varandra om tillgängliga resurser. Även om det inte finns några hårdkodade gränser för antalet materialiserade vyer i ett kluster kanske klustret inte kan hantera alla materialiserade vyer när många har definierats. Kapacitetsprincipen kan justeras om det finns mer än en enda materialiserad vy i klustret. Öka värdet ClusterMinimumConcurrentOperations för i principen för att köra mer materialiserade vyer samtidigt.

  • Definition av materialiserad vy: Definitionen av den materialiserade vyn måste definieras enligt bästa praxis för frågor för bästa frågeprestanda. Mer information finns i Skapa tips för kommandoprestanda.

Materialiserad vy över materialiserad vy

En materialiserad vy kan skapas över en annan materialiserad vy om den materialiserade källvyn är en dedupliceringsvy. Mer specifikt måste aggregeringen av den materialiserade källvyn vara take_any(*) för att deduplicera källposter. Den andra materialiserade vyn kan använda alla aggregeringsfunktioner som stöds. Specifik information om hur du skapar en materialiserad vy över en materialiserad vy finns i.create materialized-view kommandot .

Tips

När du kör frågor mot en materialiserad vy som definieras över en annan materialiserad vy rekommenderar vi att du bara frågar den materialiserade delen med hjälp av materialized_view() funktionen. Det går inte att köra frågor mot hela vyn när båda vyerna inte är helt materialiserade. Mer information finns i materialiserade vyer frågor.