Sdílet prostřednictvím


Materializovaná zobrazení

Materializovaná zobrazení zpřístupňují agregační dotaz ve zdrojové tabulce nebo v jiném materializovaném zobrazení.

Materializovaná zobrazení vždy vrací aktuální výsledek agregačního dotazu (vždy aktuální). Dotazování materializovaného zobrazení je výkonnější než spuštění agregace přímo přes zdrojovou tabulku.

Poznámka:

Proč používat materializovaná zobrazení?

Díky investici prostředků (úložiště dat, cyklů procesoru na pozadí) pro materializovaná zobrazení běžně používaných agregací získáte následující výhody:

  • Zlepšení výkonu: Dotazování materializovaného zobrazení obvykle funguje lépe než dotazování zdrojové tabulky pro stejné agregační funkce.

  • Aktuálnost: Dotaz materializovaného zobrazení vždy vrací nejaktuálnější výsledky nezávisle na tom, kdy se materializace naposledy uskutečnila. Dotaz kombinuje materializovanou část zobrazení se záznamy ve zdrojové tabulce, které ještě nebyly materializovány (část delta ), vždy poskytují nejaktuálnější výsledky.

  • Snížení nákladů: Dotazování materializovaného zobrazení spotřebovává méně prostředků z clusteru než agregace ve zdrojové tabulce. Zásady uchovávání zdrojové tabulky je možné snížit, pokud je vyžadována pouze agregace. Toto nastavení snižuje náklady na horkou mezipaměť zdrojové tabulky.

Příklady použití najdete v tématu Materializované případy použití zobrazení.

Jak materializovaná zobrazení fungují

Materializované zobrazení je tvořeno dvěma součástmi:

  • Materializovaná část – tabulka obsahující agregované záznamy ze zdrojové tabulky, které už byly zpracovány. Tato tabulka vždy obsahuje jeden záznam podle kombinace agregace seskupování.
  • Rozdíl – nově ingestované záznamy ve zdrojové tabulce, které ještě nebyly zpracovány.

Dotazování materializovaného zobrazení kombinuje materializovanou část s rozdílovou částí a poskytuje aktuální výsledek agregačního dotazu. Offline proces materializace ingestuje nové záznamy z rozdílu do materializované tabulky a aktualizuje existující záznamy. Pokud je průnik mezi rozdílovou a materializovanou částí velký a mnoho záznamů vyžaduje aktualizace, může to mít negativní dopad na proces materializace. Podívejte se na monitorování materializovaných zobrazení o řešení takových situací.

Dotazy materializovaných zobrazení

Existují 2 způsoby dotazování materializovaného zobrazení:

  • Dotazování celého zobrazení: Když dotazujete materializované zobrazení podle názvu, podobně jako dotazování na tabulku, materializovaný dotaz zobrazení kombinuje materializovanou část zobrazení se záznamy ve zdrojové tabulce, které ještě nebyly materializovány (the delta).

    • Dotazování materializovaného zobrazení vždy vrátí nejaktuálnější výsledky na základě všech záznamů přijatých do zdrojové tabulky. Další informace o materializovaných a ne materializovaných částech v materializovaném zobrazení naleznete v tom, jak materializovaná zobrazení fungují.
    • Tato možnost nemusí být nejlepší, protože potřebuje materializovat delta část během dotazu. Výkon v tomto případě závisí na věku zobrazení a filtrech použitých v dotazu. Část optimalizátoru dotazů materializovaného zobrazení obsahuje možné způsoby, jak zlepšit výkon dotazů při dotazování na celé zobrazení.
  • Dotazování pouze materializované části: Dalším způsobem dotazování zobrazení je použití materialized_view() funkce. Tato možnost podporuje dotazování pouze materializované části zobrazení a určení maximální latence, kterou chce uživatel tolerovat.

    • Tato možnost nezaručuje vrácení nejaktuálnějších záznamů, ale vždy by měla být výkonnější než dotazování na celé zobrazení.
    • Tato funkce je užitečná pro scénáře, ve kterých jste ochotni obětovat určitou aktuálnost pro výkon, například pro řídicí panely telemetrie.

Tip

Dotazy nad materializovanou částí vždy fungují lépe než dotazování na celé zobrazení. Funkci vždy používejte materialized_view() , pokud je to možné pro váš případ použití.

  • Materializovaná zobrazení se účastní dotazů napříč clustery nebo mezi databázemi, ale nejsou zahrnuta do sjednocení nebo hledání se zástupnými cardy.

    • Všechny následující příklady zahrnují materializovaná zobrazení podle názvu ViewName:
    cluster('cluster1').database('db').ViewName
    cluster('cluster1').database('*').ViewName
    database('*').ViewName
    database('DB*').ViewName
    database('*').materialized_view('ViewName')
    database('DB*').materialized_view('ViewName')
    
    • Následující příklady nezahrnují záznamy z materializovaných zobrazení:
    cluster('cluster1').database('db').*
    database('*').View*
    search in (*)
    search * 
    

Optimalizátor dotazů materializovaného zobrazení

Při dotazování celého zobrazení se materializovaná část zkombinuje s dobou dotazování delta . To zahrnuje agregaci delta a spojení s materializovanou částí.

  • Dotazování celého zobrazení funguje lépe, pokud dotaz obsahuje filtry ve skupině podle klíčů materializovaného dotazu zobrazení. Další tipy k vytvoření materializovaného zobrazení na základě vzoru dotazu najdete v části Tipy k výkonu..create materialized-view
  • Optimalizátor dotazů zvolí strategie sumarizace a spojení, u které se očekává zlepšení výkonu dotazů. Například rozhodnutí o náhodném náhodném prohazování dotazu vychází z počtu záznamů v delta části. Následující vlastnosti požadavku klienta poskytují určitou kontrolu nad použitými optimalizacemi. Tyto vlastnosti můžete otestovat pomocí materializovaných dotazů zobrazení a vyhodnotit jejich dopad na výkon dotazů.
Název vlastnosti požadavku klienta Typ Popis
materialized_view_query_optimization_costbased_enabled bool Pokud je tato možnost nastavená na false, zakáže optimalizace souhrnů a spojení v dotazech materializovaného zobrazení. Používá výchozí strategie. Výchozí hodnota je true.
materialized_view_shuffle dynamic Vynuťte náhodné prohazování materializovaného dotazu zobrazení a (volitelně) zadejte konkrétní klíče pro náhodné prohazování. Podívejte se na příklady níže.

Příklady

  1. Zadejte dotaz na celé zobrazení. Patří sem nejnovější záznamy ve zdrojové tabulce:

    ViewName
    
  2. Dotazujte pouze materializovanou část zobrazení bez ohledu na to, kdy byla naposledy materializována.

    materialized_view("ViewName")
    
  3. Zadejte dotaz na celé zobrazení a zadejte "tip" pro použití shuffle strategie. Patří sem nejnovější záznamy ve zdrojové tabulce:

    • Příklad č. 1: náhodné prohazení na Id základě sloupce (podobně jako při použití hint.shufflekey=Id):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]);
    ViewName
    
    • Příklad č. 2: náhodné prohazení na základě všech klíčů (podobně jako při použití hint.strategy=shuffle):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]);
    ViewName
    

Důležité informace o výkonu

Hlavní přispěvatelé, kteří můžou ovlivnit materializovaný stav zobrazení, jsou:

  • Prostředky clusteru: Stejně jako jakýkoli jiný proces spuštěný v clusteru spotřebovávají materializovaná zobrazení prostředky (procesor, paměť) z clusteru. Pokud je cluster přetížený, může přidání materializovaných zobrazení způsobit snížení výkonu clusteru. Monitorujte stav clusteru pomocí metrik stavu clusteru. Optimalizované automatické škálování v současné době nebere v úvahu materializované zobrazení v rámci pravidel automatického škálování.

    • Proces materializace je omezený množstvím paměti a procesoru, který může spotřebovat. Tyto limity jsou definovány a lze je změnit ve skupině úloh materializovaných zobrazení.
  • Překrývají se s materializovanými daty: Během materializace se všechny nové záznamy ingestované do zdrojové tabulky od poslední materializace (rozdílu) zpracovávají a materializují do zobrazení. Čím vyšší je průnik mezi novými záznamy a již materializovanými záznamy, tím horší bude výkon materializovaného zobrazení. Materializované zobrazení funguje nejlépe, pokud je počet aktualizovaných záznamů (například v arg_max zobrazení) malou podmnožinou zdrojové tabulky. Pokud je potřeba aktualizovat všechny nebo většinu materializovaných záznamů zobrazení v každém materializačním cyklu, nemusí materializované zobrazení dobře fungovat.

  • Rychlost příjmu dat: Ve zdrojové tabulce materializovaného zobrazení neexistují žádná pevně zakódovaná omezení objemu dat nebo míry příjmu dat. Doporučená míra příjmu materializovaných zobrazení však není větší než 1–2 GB/s. Vyšší míra příjmu dat může stále dobře fungovat. Výkon závisí na velikosti clusteru, dostupných prostředcích a množství průniku s existujícími daty.

  • Počet materializovaných zobrazení v clusteru: Výše uvedené aspekty platí pro každé individuální materializované zobrazení definované v clusteru. Každé zobrazení využívá své vlastní prostředky a mnoho zobrazení vzájemně soupeří o dostupné prostředky. I když neexistuje žádné pevně zakódované omezení počtu materializovaných zobrazení v clusteru, cluster nemusí být schopen zpracovat všechna materializovaná zobrazení, pokud je definováno mnoho. Zásady kapacity je možné upravit, pokud je v clusteru více než jedno materializované zobrazení. Zvyšte hodnotu ClusterMinimumConcurrentOperations v zásadě, aby se souběžně spouštěla více materializovaných zobrazení.

  • Definice materializovaného zobrazení: Definice materializovaného zobrazení musí být definována v souladu s osvědčenými postupy dotazu pro zajištění nejlepšího výkonu dotazů. Další informace najdete v tématu Vytváření tipů pro zvýšení výkonu příkazů.

Materializované zobrazení nad materializovaným zobrazením

Materializované zobrazení lze vytvořit prostřednictvím jiného materializovaného zobrazení, pokud je zdrojové materializované zobrazení zobrazením odstranění duplicitních dat. Konkrétně musí být take_any(*) agregace zdrojového materializovaného zobrazení určená k odstranění duplicitních dat zdrojových záznamů. Druhé materializované zobrazení může používat všechny podporované agregační funkce. Konkrétní informace o tom, jak vytvořit materializované zobrazení v materializovaném zobrazení, naleznete .create materialized-view v příkazu.

Tip

Při dotazování materializovaného zobrazení, které je definováno v jiném materializovaném zobrazení, doporučujeme dotazovat materializovanou část pouze pomocí materialized_view() funkce. Dotazování na celé zobrazení není výkonné, pokud nejsou obě zobrazení plně materializovaná. Další informace najdete v dotazech materializovaných zobrazení.