Споделяне чрез


Оптимизирани модели на данни за заявки

Най-простият и бърз шаблон за заявки за данни е:

  1. Единична таблица или изглед
  2. Предварително филтрирани на сървъра до това, от което се нуждаете
  3. Колоните се индексират правилно за очакваните заявки

Когато проектирате приложението си, трябва да помислите как бързо да потърсите данните. Най-добрият начин за заявка на данни е да използвате една таблица или изглед, който съдържа цялата информация, от която се нуждаете, и да я филтрирате на сървъра, преди да я покажете в приложението си. Също така трябва да се уверите, че колоните, които използвате за филтриране или сортиране на данните, са индексирани правилно. Това прави приложението ви по-бързо и по-гладко.

Да предположим например, че имате галерия, която показва списък с клиенти и техните търговци. Ако съхранявате информацията за клиента и търговеца в отделни таблици, трябва да използвате справки, за да получите името на търговеца за всеки клиент. Това забавя приложението ви, защото трябва да изпълнява много заявки към другата таблица. По-добър начин е да създадете изглед, който комбинира информацията за клиента и търговеца в една таблица, и да използвате този изглед като източник на данни за вашата галерия. След това приложението ви трябва да изпълни само една заявка, за да получи всички данни, от които се нуждае.

Има компромис между скоростта на заявката и нормализирането на данните. Нормализирането на данните означава, че съхранявате данните само веднъж и избягвате дублиране. Това помага да се поддържат данните последователни и точни. Понякога обаче трябва да дублирате някои данни, за да направите заявките по-бързи и по-лесни. Трябва да балансирате тези две цели в дизайна на приложението и структурата на таблицата. В противен случай приложението ви ще бъде бавно и изоставащо, защото трябва да свърши много работа, за да филтрира и да се присъедини към данните от различни таблици.

Използване на изгледи от страна на сървъра

Изгледите са може би най-често срещаният инструмент за балансиране на тези цели. Те представят единна структура на таблица за заявки, предварително филтрират данни за това, което ви трябва в заявката, и позволяват справки и съединения към други таблици. Тъй като филтрите, търсенията и съединенията за изгледа се изчисляват на сървъра, както полезният товар, така и изчисленията от страна на клиента са сведени до минимум.

Галерията може да показва много записи от източник на данни. Но понякога трябва да покажете допълнителна информация от друга източник на данни, която е свързана с оригиналната. Например имате галерия, която показва списък с клиенти, и искате да покажете името на търговеца, който е присвоен на всеки клиент. Името на търговеца се съхранява в различна източник на данни от информацията за клиента. За да покажете името на търговеца, трябва да използвате функция за справка, която намира съвпадащия запис в другата източник на данни. Това разширява първоначалната таблица със справочните стойности.

Разширяването на таблицата обаче може да бъде много бавно, ако имате много записи и много справки. За всеки запис в галерията приложението трябва да изпълни отделна заявка към другия източник на данни и да получи стойността на справката. Това означава, че може да се наложи приложението да изпълнява много заявки за всеки запис, което може да отнеме много време и да повлияе на производителността на приложението. Този анти-модел понякога е известен като "N на квадрат, (n ^ 2)" или "N + 1" проблем.

Използвай "Стартс" или "Филтър"

Power Fx предоставя няколко начина за търсене на данни. По принцип използвайте израз, който използва индекс като StartsWith или Filter, вместо такъв, който чете цялата таблица като In. Операторът In е подходящ за колекции в паметта или ако таблицата с външни източник на данни е много малка.

Обмислете дублиране на данни

Понякога достъпът до данните в заявка е бавен, защото се съхранява на друго място или формат. За да направите заявката по-бърза, можете да копирате бавните данни и да ги съхранявате локално в таблица, която е бърза и лесна за заявка. Това обаче означава, че локалните данни може да не са най-актуализираната версия на оригиналните данни. След това стартирайте друг процес, за да актуализирате периодично локалните данни. Този процес може да бъде Power Automate поток, плъгин, съхранена процедура или друг метод, който може да премества данни от едно място на друго.

Изискването за честота на актуализиране на местните данни зависи от нуждите на вашия бизнес. Колко свежи трябва да са данните за приложението ви? Например, да предположим, че работите за Contoso, компания, която продава велосипеди. Списъкът с наличните велосипеди се съхранява в база данни за продукти, до която можете да получите достъп чрез API в конектор по избор. Но да кажем, че извикването на API е бавно и затова решавате да копирате данните за продукта и да ги съхранявате локално в таблица. След това създавате изглед, който комбинира таблицата ви с други подходящи данни за приложението ви. Също така създавате Power Automate поток, който се изпълнява всеки ден и актуализирате таблицата си с най-новите данни за продукта от API. След това приложението ви може да прави заявки към локалните данни по-бързо, а данните са само на един ден.

Дублирането на данни е често срещан тип техника в приложения от корпоративен клас, за да се гарантира добра производителност. Можете да използвате Dataverse плъгини, съхранени процедури или движение на данни, за да дублирате данни в една таблица, която е оптимизирана за заявки. Ключовият въпрос е: колко актуални трябва да бъдат тези данни? Ако можете да си позволите известно забавяне, можете да използвате тази техника, за да ускорите приложението си.

Предложения

За да постигнете тази цел, обмислете следните въпроси и предложения:

  1. Колко важно е за клиента да види стойността на данните в галерия или мрежа от данни? Би ли било приемливо първо да изберете запис и след това да покажете данните във формуляр?
  2. Може ли изгледът да извърши предварителната работа, необходима, за да видите данните в правилния формат?
  3. Използвате ли оператор "IN", където ще работи "StartsWith"?
  4. Колко актуални трябва да бъдат вашите данни? Има ли стратегия за дублиране на данни, която можете да използвате, за да накарате заявката си да работи върху една таблица по подразбиране?