Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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. Például a NoSQL-dokumentumtár használatakor az adatok gyakran összesítések sorozataként jelenik meg, amelyek mindegyike az adott entitás összes információját tartalmazza.
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 a nézetet manuálisan újra kell generálni. Az á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-generálódik, bár ez túlzott erőforrás-felhasználáshoz 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 amikor az Event Sourcing mintát használva csak az adatokat módosító események tárolóját tartja karban, materializált nézetekre van szükség. Az eseménytárból való információszerzés egyetlen módja lehet, ha minden eseményt megvizsgál az aktuális állapot meghatározásához, és előre feltölti a nézeteket. Ha nem használ Event Sourcingot, érdemes megfontolni, hogy hasznos-e egy materializált nézet. A materializált nézetek általában egy vagy kevés lekérdezéshez igazodnak. 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, valamint a frissítések ütemezett módon történő elvégzésekor. 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. Lehet egy részhalmaz a több különböző partíció kombinációjából.
A nézet újra lehet építeni, 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.
Terhelés tervezés
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:
| Alappillé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.
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.
Kapcsolódó erőforrások
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 táblázat mintázat. 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.