Sdílet prostřednictvím


Optimalizované vzory dotazů na data

Nejjednodušší a nejrychlejší vzor dotazu na data je:

  1. Jedna tabulka nebo zobrazení
  2. Předfiltrováno na serveru podle toho, co potřebujete
  3. Sloupce jsou správně indexovány pro očekávané dotazy

Když navrhujete aplikaci, musíte přemýšlet, jak rychle dotazovat data. Nejlepší způsob, jak se dotazovat na data, je použít jednu tabulku nebo zobrazení, který obsahuje všechny informace, které potřebujete, a filtrovat je na serveru, než je zobrazíte ve své aplikaci. Musíte se také ujistit, že sloupce, které používáte k filtrování nebo řazení dat, jsou správně indexovány. Díky tomu je vaše aplikace rychlejší a plynulejší.

Předpokládejme například, že máte galerii, která zobrazuje seznam zákazníků a jejich prodejců. Pokud uchováváte informace o zákaznících a prodejcích v samostatných tabulkách, musíte k získání jména prodejce pro každého zákazníka použít vyhledávání. To zpomaluje vaši aplikaci, protože je nutné spustit mnoho dotazů na druhou tabulku. Lepším způsobem je vytvořit zobrazení, které sloučí informace o zákazníkovi a prodejci do jedné tabulky, a použít toto zobrazení jako zdroj dat pro vaši galerii. Potom vaší aplikaci stačí spustit jeden dotaz, aby získala všechna data, která potřebuje.

Mezi rychlostí dotazů a normalizací dat existuje kompromis. Normalizace dat znamená, že data ukládáte pouze jednou bez duplicit. To pomáhá udržovat data konzistentní a přesná. Někdy však potřebujete duplikovat některá data, aby byly dotazy rychlejší a jednodušší. V návrhu aplikace a struktuře tabulky musíte tyto dva cíle vyvážit. V opačném případě bude vaše aplikace pomalá a zpožděná, protože potřebuje vykonat mnoho práce, aby filtrovala a spojila data z různých tabulek.

Použijte zobrazení na straně serveru

Zobrazení jsou pravděpodobně nejběžnějším nástrojem, který pomáhá vyrovnávat tyto cíle. Představují strukturu jediné tabulky pro dotazy, předfiltrují data potřebná pro dotaz a umožňují vyhledávání a spojení s jinými tabulkami. Protože se filtry, vyhledávání a spojení pro zobrazení počítají na serveru, je minimalizována jak datová část, tak výpočet na straně klienta.

Galerie může zobrazit mnoho záznamů ze zdroje dat. Někdy však potřebujete zobrazit další informace z jiného zdroje dat, která souvisí s původní. Máte například galerii, která zobrazuje seznam zákazníků, a chcete zobrazit jméno prodejce, který je přiřazen ke každému zákazníkovi. Jméno prodejce je uloženo v jiném zdroji dat než informace o zákazníkovi. Chcete-li zobrazit jméno prodejce, musíte použít vyhledávací funkci, která najde odpovídající záznam v jiném zdroj dat. Tím se původní tabulka rozšíří o vyhledávací hodnoty.

Rozšiřování tabulky však může být velmi pomalé, pokud máte mnoho záznamů a mnoho vyhledávání. Pro každý záznam v galerii musí aplikace spustit samostatný dotaz na jiný zdroj dat a získat hodnotu vyhledávání. To znamená, že aplikace může vyžadovat spuštění mnoha dotazů pro každý záznam, což může trvat dlouho a ovlivnit výkon aplikace. Tento protivzor je někdy znám jako problém „N na druhou, (n^2)“ nebo „N+1“.

Použijte StartsWith nebo Filter

Power Fx poskytuje několik způsobů vyhledávání dat. Obecně použijte výraz, který využívá index jako StartsWith nebo Filter místo operátoru In, který čte celou tabulku. Operátor In je vhodný pro kolekce v paměti nebo pokud je externí tabulka zdroje dat velmi malá.

Zvažte duplikaci dat

Někdy je přístup k datům v dotazu pomalý, protože jsou uložena v jiném umístění nebo formátu. Chcete-li dotaz urychlit, můžete zkopírovat pomalá data a uložit je lokálně do tabulky, jejíž dotazování je rychlé a jednoduché. To však znamená, že místní data nemusí být nejaktuálnější verzí původních dat. Poté spusťte další proces, který pravidelně aktualizuje místní data. Tento proces může být tok, modul plug-in, uložená procedura nebo jakákoli jiná metoda Power Automate, která umí přesunout data z jednoho místa na druhé.

Požadavek na četnost aktualizace místních dat závisí na vašich obchodních potřebách. Jak čerstvá musí být data pro vaši aplikaci? Předpokládejme například, že pracujete pro společnost Contoso, která prodává jízdní kola. Seznam dostupných kol je uložen v databázi produktů, ke které můžete přistupovat prostřednictvím rozhraní API ve vlastním konektoru. Řekněme však, že volání rozhraní API je pomalé, a tak se rozhodnete zkopírovat data produktu a uložit je lokálně do tabulky. Poté vytvoříte zobrazení, které sloučí vaši tabulku s dalšími relevantními daty pro vaši aplikaci. Vytvoříte také tok Power Automate, který se spustí každý den a aktualizuje vaši tabulku nejnovějšími daty produktu z rozhraní API. Vaše aplikace pak může vyhledávat místní data rychleji a data jsou stará maximálně jeden den.

Duplikování dat je běžným typem techniky v podnikových aplikacích k zajištění dobrého výkonu. Můžete použít moduly plugin, uložené procedury nebo přesun dat Dataverse k duplikování dat do jediné tabulky, která je optimalizována pro dotazování. Klíčová otázka zní: jak aktuální musí být tato data? Pokud si můžete dovolit nějaké zpoždění, tuto techniku můžete použít ke zrychlení aplikace.

Návrhy

K dosažení tohoto cíle zvažte následující otázky a návrhy:

  1. Jak důležité je pro zákazníka vidět hodnotu dat v galerii nebo datové mřížce? Bylo by přijatelné nejprve vybrat záznam a poté zobrazit data ve formuláři?
  2. Dokáže zobrazení provést předběžnou práci potřebnou k zobrazení dat ve správném formátu?
  3. Používáte operátor „IN“, kde by fungovalo „StartsWith“?
  4. Jak aktuální musí být vaše data? Máte strategii duplikace dat, kterou můžete použít, aby váš dotaz ve výchozím nastavení fungoval s jedinou tabulkou?