Tényleges táblán alapuló nézetek

A materializált nézetek egy összesítő lekérdezést tehetnek közzé egy forrástáblán vagy egy másik materializált nézeten keresztül.

A materializált nézetek mindig az összesítő lekérdezés naprakész eredményét adják vissza (mindig friss). A materializált nézet lekérdezése sokkal hatékonyabb, mint az összesítés közvetlenül a forrástáblán keresztül történő futtatása.

Megjegyzés

Miért érdemes materializált nézeteket használni?

Ha erőforrásokat (adattárolást, háttér cpu-ciklusokat) fektet be a gyakran használt összesítések materializált nézeteibe, az alábbi előnyökkel jár:

  • Teljesítménybeli javulás: A materializált nézet lekérdezése általában jobban teljesít, mint a forrástábla lekérdezése ugyanazon összesítő függvény(ek)hez.

  • Frissesség: A materializált nézetes lekérdezések mindig a legfrissebb eredményeket adnak vissza, függetlenül attól, hogy mikor történt az utolsó materializálás. A lekérdezés egyesíti a nézet materializált részét a forrástábla rekordjaival, amelyek még nem lettek materializálva (a delta rész), mindig a legfrissebb eredményeket nyújtják.

  • Költségcsökkentés:A materializált nézet lekérdezése kevesebb erőforrást használ fel a fürtből, mint a forrástábla összesítése. A forrástábla adatmegőrzési szabályzata csökkenthető, ha csak aggregációra van szükség. Ez a beállítás csökkenti a gyakori elérésű gyorsítótár költségeit a forrástáblában.

Például használati esetek: Materialized view use cases (Materialized view use cases).

A materializált nézetek működése

A materializált nézet két összetevőből áll:

  • Materializált rész – egy tábla, amely a forrástáblából származó összesített rekordokat tartalmazza, amelyeket már feldolgoztak. Ez a tábla mindig egyetlen rekordot tartalmaz az összesítés csoportosítási kombinációi alapján.
  • Változás – a forrástábla újonnan betöltött rekordjai, amelyeket még nem dolgoztak fel.

A materializált nézet lekérdezése egyesíti a materializált részt a delta résztel, így naprakész eredményt ad az összesítő lekérdezésnek. Az offline materializálási folyamat új rekordokat foglal le a deltából a materializált táblába, és frissíti a meglévő rekordokat. Ha a delta és a materializált rész metszete nagy, és sok rekord frissítéseket igényel, ez negatív hatással lehet a materializálási folyamatra. Lásd: Az ilyen helyzetek elhárításának materializált nézeteinek monitorozása .

Materializált nézetek lekérdezései

A materializált nézeteket kétféleképpen kérdezheti le:

  • A teljes nézet lekérdezése: amikor a materializált nézetet a nevével kérdezi le, a tábla lekérdezéséhez hasonlóan a materializált nézet lekérdezése egyesíti a nézet materializált részét a forrástábla még nem materializált rekordjaival (a delta).

    • A materializált nézet lekérdezése mindig a legfrissebb eredményeket adja vissza a forrástáblába betöltött összes rekord alapján. A materializált és a nem materializált részekről a materializált nézetben a materializált nézetek működése című témakörben olvashat bővebben.
    • Előfordulhat, hogy ez a beállítás nem teljesít a legjobban, mivel a lekérdezési idő alatt materializálnia kell a delta részt. Ebben az esetben a teljesítmény a nézet korától és a lekérdezésben alkalmazott szűrőktől függ. A materializált nézet lekérdezésoptimalizáló szakasza lehetővé teszi a lekérdezési teljesítmény javítását a teljes nézet lekérdezése során.
  • Csak a materializált rész lekérdezése: a nézet lekérdezésének másik módja a materialized_view() függvény használata. Ez a beállítás csak a nézet materializált részének lekérdezését támogatja, miközben megadja azt a maximális késést, amelyet a felhasználó hajlandó elviselni.

    • Ez a beállítás nem garantálja, hogy a legfrissebb rekordokat adja vissza, de mindig nagyobb teljesítményűnek kell lennie, mint a teljes nézet lekérdezése.
    • Ez a függvény olyan forgatókönyvek esetén hasznos, amelyekben hajlandó feláldozni némi frissességet a teljesítményért, például telemetriai irányítópultok esetében.

Tipp

A materializált részre vonatkozó lekérdezések mindig jobban teljesítenek, mint a teljes nézet lekérdezése. Mindig használja a függvényt materialized_view() , ha alkalmazható a használati esethez.

  • A materializált nézetek részt vesznek a fürtök közötti vagy adatbázisközi lekérdezésekben, de nem szerepelnek helyettesítő karakterekből vagy keresésekből.

    • Az alábbi példák mindegyike a név ViewNamealapján materializált nézeteket tartalmaz:
    cluster('cluster1').database('db').ViewName
    cluster('cluster1').database('*').ViewName
    database('*').ViewName
    database('DB*').ViewName
    database('*').materialized_view('ViewName')
    database('DB*').materialized_view('ViewName')
    
    • Az alábbi példák nem tartalmaznak materializált nézetekből származó rekordokat:
    cluster('cluster1').database('db').*
    database('*').View*
    search in (*)
    search * 
    

Materializált nézet lekérdezésoptimalizálója

A teljes nézet lekérdezésekor a materializált rész össze lesz kötve a delta lekérdezési idő alatt. Ez magában foglalja a materializált rész összesítését delta és összekapcsolását.

  • A teljes nézet lekérdezése jobban teljesít, ha a lekérdezés szűrőket tartalmaz a csoporton a materializált nézetlekérdezés kulcsai alapján. A teljesítménytippek szakaszban további tippeket talál arról, hogyan hozhat létre materializált nézetet a .create materialized-view lekérdezési minta alapján.
  • A lekérdezésoptimalizáló olyan összegzési/illesztési stratégiákat választ, amelyek várhatóan javítják a lekérdezési teljesítményt. Például az a döntés, hogy a lekérdezést el szeretné-e keverni , részben a rekordok delta számán alapul. Az alábbi ügyfélkérési tulajdonságok némi vezérlést biztosítanak az alkalmazott optimalizálásokkal szemben. Ezeket a tulajdonságokat a materializált nézet lekérdezéseivel tesztelheti, és kiértékelheti a lekérdezések teljesítményére gyakorolt hatásukat.
Ügyfélkérés tulajdonságának neve Típus Description
materialized_view_query_optimization_costbased_enabled bool Ha a értékre falsevan állítva, letiltja az összegzési/illesztésoptimalizálásokat a materializált nézet lekérdezéseiben. Alapértelmezett stratégiákat használ. Az alapértelmezett szint a true.
materialized_view_shuffle dynamic A materializált nézetlekérdezés kényszerítése, és (opcionálisan) adott kulcsokat ad meg az elosztáshoz. Lásd az alábbi példákat .

Példák

  1. A teljes nézet lekérdezése. A forrástábla legutóbbi rekordjai a következők:

    ViewName
    
  2. Csak a nézet materializált részét kérdezheti le, függetlenül attól, hogy mikor volt utoljára materializálva.

    materialized_view("ViewName")
    
  3. Kérdezze le a teljes nézetet, és adjon meg egy "tippet" a stratégia használatához shuffle . A forrástábla legutóbbi rekordjai a következők:

    • 1. példa: elosztás az Id oszlop alapján (a használatához hint.shufflekey=Idhasonlóan):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]);
    ViewName
    
    • 2. példa: elosztás az összes kulcs alapján (a használatához hint.strategy=shufflehasonlóan):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]);
    ViewName
    

A teljesítménnyel kapcsolatos megfontolások

A materializált nézet állapotát befolyásoló fő közreműködők a következők:

  • Fürterőforrások: A fürtön futó többi folyamathoz hasonlóan a materializált nézetek is felhasználják a fürt erőforrásait (CPU, memória). Ha a fürt túlterhelt, a materializált nézetek hozzáadása a fürt teljesítményének romlásához vezethet. A fürt állapotának figyelése fürtállapot-metrikákkal. Az optimalizált automatikus skálázás jelenleg nem veszi figyelembe a materializált nézetek állapotát az automatikus skálázási szabályok részeként.

  • Átfedés a materializált adatokkal: A materializálás során a rendszer az utolsó materializálás óta a forrástáblába betöltött összes új rekordot feldolgozzák és materializálják a nézetbe. Minél nagyobb a metszet az új rekordok és a már materializált rekordok között, annál rosszabb lesz a materializált nézet teljesítménye. A materializált nézet akkor működik a legjobban, arg_max ha a frissítendő rekordok száma (például nézetben) a forrástábla kis része. Ha az összes materializált nézetrekordot vagy a legtöbb rekordot frissíteni kell minden materializálási ciklusban, akkor előfordulhat, hogy a materializált nézet nem működik megfelelően.

  • Betöltési sebesség: A materializált nézet forrástáblájában nincsenek szigorúan kódolt korlátozások az adatmennyiségre vagy a betöltési sebességre vonatkozóan. A materializált nézetek ajánlott betöltési sebessége azonban legfeljebb 1-2 GB/s lehet. A magasabb betöltési arányok továbbra is jól teljesíthetnek. A teljesítmény a fürt méretétől, a rendelkezésre álló erőforrásoktól és a meglévő adatokkal való metszet mennyiségétől függ.

  • A fürtön lévő materializált nézetek száma: A fenti szempontok a fürtön definiált minden egyes materializált nézetre vonatkoznak. Minden nézet saját erőforrásokat használ fel, és számos nézet verseng egymással az elérhető erőforrásokon. Bár a fürtökben nincsenek szigorúan kódolt korlátozások a materializált nézetek számára, előfordulhat, hogy a fürt nem tudja kezelni az összes materializált nézetet, ha sok a definiált nézet. A kapacitásszabályzat módosítható, ha a fürtben több materializált nézet is található. Növelje a szabályzat értékét ClusterMinimumConcurrentOperations , hogy egyidejűleg több materializált nézetet futtasson.

  • Materializált nézetdefiníció: A materializált nézetdefiníciót a lekérdezési ajánlott eljárásoknak megfelelően kell definiálni a legjobb lekérdezési teljesítmény érdekében. További információ: Parancsteljesítmény-tippek létrehozása.

Materializált nézet materializált nézeten keresztül

Egy materializált nézet létrehozható egy másik materializált nézeten keresztül, ha a forrás materializált nézete deduplikációs nézet. Pontosabban a forrás materializált nézet összesítésének a forrásrekordok deduplikálásához kell lennie take_any(*) . A második materializált nézet bármilyen támogatott összesítési függvényt használhat. A materializált nézet materializált nézeten keresztüli létrehozásával kapcsolatos további információkért lásd a .create materialized-view parancsot.

Tipp

Ha egy materializált nézetet kérdez le, amely egy másik materializált nézetben van definiálva, azt javasoljuk, hogy csak a függvény használatával kérdezi le a materialized_view() materializált részt. A teljes nézet lekérdezése nem működik, ha mindkét nézet nincs teljesen materializálva. További információ: materializált nézetek lekérdezései.