A Materialized View minta

Azure Storage

Létrehozhat előre kitöltött nézeteket egy vagy több adattár adataiból, ha az adatok formázása nem ideális a szükséges lekérdezési műveletekhez. Ez segíthet a hatékony lekérdezésben és adatkinyerésben, valamint az alkalmazás teljesítményének javításában.

Kontextus és probléma

Az adatok tárolásakor a fejlesztők és adat-rendszergazdák gyakran az adatok tárolásának módjára, nem pedig az írás módjára összpontosítanak. A kiválasztott tárolási formátum általában szorosan összefügg az adatok formátumával, az adatok méret- és integritáskezelési követelményeivel és a használt tároló típusával. NoSQL-dokumentumtároló használata esetén például az adatok gyakran szerepelnek összesítések sorozataként, és mindegyik sorozat minden információt tartalmaz az adott entitásról.

Azonban ez negatív hatással lehet a lekérdezésekre. Ha egy lekérdezésnek bizonyos entitások adatainak egy részére van szüksége (például néhány ügyfél rendeléseinek egyes részletei), a kapcsolódó entitás összes adatát ki kell nyernie a szükséges információ beszerzéséhez.

Megoldás

A hatékony lekérdezések támogatásához gyakori megoldás egy olyan nézet létrehozása, amely a szükséges eredménykészlethez megfelelő formátumban materializálja az adatokat. A Materialized View minta előre feltöltött adatnézetek létrehozását jelenti az olyan környezetekben, ahol a forrásadatok nem a lekérdezésnek megfelelő formátumban vannak, a megfelelő lekérdezés létrehozása bonyolult, vagy a lekérdezés teljesítménye nem megfelelő az adatok vagy az adattár természete miatt.

Ezek a materializált nézetek, amelyek csak a lekérdezéshez szükséges adatokat tartalmazzák, lehetővé teszik, hogy az alkalmazások gyorsan beszerezzék a számukra szükséges információkat. A táblázatok összekapcsolása és az adatentitások kombinálása mellett a materializált nézetek tartalmazhatják a számított oszlopok vagy adatelemek aktuális értékeit, az értékek kombinálásának vagy adatelemek átalakításának eredményeit, illetve a lekérdezés részeként megadott értékeket is. A materializált nézet egyetlen lekérdezéshez is optimalizálható.

A lényeg az, hogy a materializált nézet és a benne található adatok teljesen pótolhatók, mivel teljesen újraépíthetők a forrásadattárakból. A materializált nézetet soha nem közvetlenül egy alkalmazás frissíti, ezért ez egy specializált gyorsítótár.

Ha a nézet forrásadatai megváltoznak, az új információk megjelenítéséhez frissíteni kell a nézetet. Ezt ütemezheti úgy, hogy automatikusan történjen, vagy amikor a rendszer az eredeti adatok módosítását érzékeli. Egyes esetekben előfordulhat, hogy manuálisan újra létre kell hoznia a nézetet. Az ábra a Materialized View minta használatának példáját tartalmazza.

Az 1. ábra a Materialized View minta használatának példáját tartalmazza.

Problémák és megfontolandó szempontok

A minta megvalósítása során az alábbi pontokat vegye figyelembe:

Hogyan és mikor fog frissülni a nézet. Ideális esetben a forrásadatok változását jelző eseményre adott válaszként újra létrejön a nézet, de ez túlzott terheléshez vezethet, ha a forrásadatok gyorsan változnak. Másik megoldásként fontolja meg egy ütemezett feladat, külső eseményindító vagy manuális művelet használatát a nézet újbóli létrehozásához.

Egyes rendszerekben, például ha az Event Sourcing mintával tartja fenn az adatokat módosító események tárolóját, szükségesek a materializált nézetek. Előfordulhat, hogy az eseménytár információi csak úgy szerezhetők be, ha előre feltölti a nézeteket az aktuális állapot meghatározásához. Ha nem használ Event Sourcing mintát, fontolja meg, hogy a materializált nézet hasznos-e. A materializált nézetek általában kifejezetten egyetlen vagy kis számú lekérdezéshez vannak igazítva. Ha sok lekérdezést használ, a materializált nézetek túlzott tárkapacitási követelményeket és tárolási költségeket eredményezhetnek.

Vegye figyelembe az adatkonzisztenciára gyakorolt hatást a nézet létrehozásakor, illetve ütemezett frissítések használatakor. Ha a forrásadatok változnak a nézet létrehozásakor, az adatok nézetben található másolata nem lesz teljesen konzisztens az eredeti adatokkal.

Fontolja meg, hol fogja tárolni a nézetet. A nézetnek nem kell ugyanazon a tárolóban vagy partíción lennie, mint az eredeti adatoknak. Több különböző partíció részeiből is származhat.

A nézet újraépíthető, ha elveszik. Ezért ha a nézet átmeneti, és csak a lekérdezési teljesítmény vagy a méretezhetőség javítására szolgál az adatok aktuális állapotának megjelenítésével, akkor tárolható egy gyorsítótárban vagy egy kevésbé megbízható helyen.

Materializált nézetek meghatározásakor maximalizálhatja a nézet értékét, ha a meglévő adatelemek számításának vagy átalakításának alapján, a lekérdezésben átadott értékek alapján, vagy ahol lehetséges, ezen értékek kombinációjának alapján adatelemeket vagy oszlopokat ad hozzá.

Ahol a tárolási mechanizmus támogatja, fontolja meg a materializált nézet indexelését a teljesítmény további növelése érdekében. A legtöbb relációs adatbázis támogatja a nézetek indexelését, ahogy az Apache Hadoopon alapuló big data-megoldások is.

Mikor érdemes ezt a mintát használni?

Ez a minta az alábbi esetekben hasznos:

  • Materializált nézetek létrehozása olyan adatok helyett, amelyeket nehéz közvetlenül lekérdezni, vagy ahol a lekérdezéseknek nagyon összetettnek kell lenniük a normalizált, részben strukturált vagy strukturálatlan módon tárolt adatok kinyeréséhez.
  • Ideiglenes nézetek létrehozása, amelyek jelentősen javíthatják a lekérdezés teljesítményét, vagy közvetlenül a felhasználói felület forrásnézeteiként vagy adatátviteli objektumaiként működhetnek jelentéskészítéshez vagy megjelenítéshez.
  • Átmenetileg csatlakoztatott vagy leválasztott forgatókönyvek támogatása, ahol nem mindig lehet csatlakozni az adattárhoz. Ebben az esetben a nézet helyileg gyorsítótárazható.
  • Lekérdezések egyszerűsítése és adatok felfedése kísérletezéshez anélkül, hogy szükség lenne a forrásadatok formátumának ismeretére. Ilyen eset például, ha egy vagy több adatbázisban található táblákat, illetve egy vagy több NoSQL-tárolóban található tartományokat kapcsol össze, majd formázza az adatokat a kívánt felhasználásnak megfelelően.
  • A forrásadatok adott részhalmazaihoz való hozzáférés biztosítása, amelyeket biztonsági vagy adatvédelmi okokból nem kíván általános elérhetővé, módosíthatóvá vagy a felhasználók által láthatóvá tenni.
  • Különböző adattárolók áthidalása az egyes tárolók képességeinek kihasználása érdekében. Ilyen eset például, ha materializált nézetek tárolására kíván használni egy felhőalapú tárolót, amely referencia-adattárként hatékony az írásban, valamint egy relációs adatbázist, amely jó lekérdezési és olvasási teljesítményt kínál.
  • Mikroszolgáltatások használata esetén ajánlott lazán összekapcsolni őket, beleértve az adattárolásukat is. Ezért a materializált nézetek segíthetnek a szolgáltatásokból származó adatok összevonásában. Ha a materializált nézetek nem megfelelőek a mikroszolgáltatás-architektúrában vagy adott forgatókönyvben, fontolja meg a tartományalapú tervezéshez (DDD) igazodó, jól definiált határokat, és igény szerint összesítheti az adatokat.

A minta használata a következő esetekben nem hasznos:

  • A forrásadatok egyszerűek és könnyen lekérdezhetők.
  • A forrásadatok gyorsan változnak vagy nézet használata nélkül is elérhetők. Ezekben az esetekben kerülje el a nézetek létrehozásával járó többletterhelést.
  • A konzisztencia kiemelt fontosságú. Előfordulhat, hogy a nézetek nem teljesen konzisztensek az eredeti adatokkal.

Számítási feladatok tervezése

Az tervezőknek értékelniük kell, hogyan használható a Materialized View minta a számítási feladat kialakításában az Azure Well-Architected Framework pilléreiben foglalt célok és alapelvek kezelésére. Példa:

Pillér Hogyan támogatja ez a minta a pillércélokat?
A teljesítményhatékonyság a skálázás, az adatok és a kód optimalizálásával segíti a számítási feladatok hatékony kielégítését . A materializált nézetek az összetett számítások vagy lekérdezések eredményeit tárolják anélkül, hogy az adatbázismotor vagy az ügyfél minden kéréshez újrafordítanák. Ez a kialakítás csökkenti a teljes erőforrás-felhasználást.

- PE:08 Adatteljesítmény

Mint minden tervezési döntésnél, fontolja meg az ezzel a mintával bevezethető többi pillér céljaival szembeni kompromisszumokat.

Példa

Az alábbi ábra egy példát mutat be egy értékesítési összesítés létrehozására a Materialized View minta használatával. Az Azure Storage-tárfiók különböző partícióin lévő Order, OrderItem és Customer táblázatokban található adatokat kombinálja egy olyan nézet létrehozásához, amely tartalmazza az Elektronikai termékek kategória minden termékének teljes értékesítési értékét, valamint az egyes elemeket megvásárló ügyfelek számát.

2. ábra: A Materialized View minta használata értékesítési összesítés létrehozására

Ennek a materializált nézetnek a létrehozásához összetett lekérdezések szükségesek. Ha azonban materializált nézetként teszi elérhetővé a lekérdezés eredményét, a felhasználók könnyen beszerezhetik az eredményeket, és közvetlenül felhasználhatják, illetve belefoglalhatják őket egy másik lekérdezésbe. A nézetet valószínűleg egy jelentéskészítési rendszerben vagy irányítópulton fogják használni, és ütemezés szerint (például hetente) frissíthető.

Bár ez a példa Az Azure Table Storage-t használja, számos relációs adatbázis-kezelő rendszer natív támogatást nyújt a materializált nézetekhez is.

Következő lépések

  • Adatkonzisztencia – Ismertető. A materializált nézet összegző információit karban kell tartani, hogy az alapul szolgáló adatok értékeit tükrözze. Az adatértékek változásával nem biztos, hogy praktikus az összegző adatok valós idejű frissítése, és olyan módszert kell helyette alkalmazni, amely végül konzisztens adatokat eredményez. A cikk összefoglalja az elosztott adatok konzisztenciájának megőrzésével kapcsolatos problémákat, és bemutatja a különböző konzisztenciamodellek előnyeit és hátrányait.

A minta megvalósításakor az alábbi minták is relevánsak lehetnek:

  • Command and Query Responsibility Segregation (CQRS) minta. A materializált nézetben lévő információk frissítésére szolgál úgy, hogy válaszol az alapul szolgáló adatok módosításakor fellépő eseményekre.
  • Event Sourcing minta. Használja a CQRS mintával együtt a materializált nézetben található információk karbantartásához. Ha a materializált nézet alapját képző adatértékek változnak, a rendszer ezeket a változásokat leíró eseményeket indíthat, és mentheti őket egy eseménytárban.
  • Index Table minta. A materializált nézet adatainak rendszerezése általában egy elsődleges kulcs szerint történik, de előfordulhat, hogy a lekérdezéseknek másik mezőkben lévő adatok vizsgálatával kell lekérniük az információkat ebből a nézetből. A használatával másodlagos indexek hozhatók létre az adatkészletekből olyan adattárakban, amelyek nem támogatják a natív másodlagos indexeket.