Поділитися через


Оптимізовані шаблони даних для запиту

Найпростіший і найшвидший шаблон запиту даних:

  1. Одна таблиця або подання
  2. Попередньо відфільтрували на сервері те, що вам потрібно
  3. Стовпці правильно індексуються за очікуваними запитами

Коли ви розробляєте свій додаток, вам потрібно подумати про те, як швидко запитати дані. Найкращий спосіб запитувати дані – використовувати одну таблицю або представлення даних, які містять усю необхідну інформацію, і фільтрувати їх на сервері, перш ніж відображати їх у додатку. Також потрібно переконатися, що стовпці, які використовуються для фільтрації або сортування даних, проіндексовані належним чином. Це робить ваш додаток швидшим і плавнішим.

Наприклад, у вас є галерея, яка відображає список клієнтів та їхніх продавців. Якщо відомості про клієнта та продавця зберігаються в окремих таблицях, потрібно використовувати підстановку, щоб отримати ім’я продавця для кожного клієнта. Це сповільнює роботу програми, оскільки їй потрібно виконувати багато запитів до іншої таблиці. Краще створити подання, яке об’єднує відомості про клієнтів і продавців в одній таблиці, і використовувати це подання як джерело даних для галереї. Тоді вашому додатку потрібно виконати лише один запит, щоб отримати всі необхідні дані.

Існує компроміс між швидкістю запиту та нормалізацією даних. Нормалізація даних означає, що ви зберігаєте дані лише один раз і уникаєте їх дублювання. Це допомагає підтримувати послідовність і точність даних. Однак іноді потрібно продублювати деякі дані, щоб зробити запити швидшими та простішими. Вам потрібно збалансувати ці дві цілі в дизайні вашого додатка та структурі таблиці. В іншому випадку ваш додаток буде повільним і гальмуватиме, оскільки йому потрібно виконати численну роботу, щоб відфільтрувати та об’єднати дані з різних таблиць.

Використання подань на стороні сервера

Представлення даних, мабуть, є найпоширенішим інструментом, який допомагає збалансувати ці цілі. Вони представляють єдину структуру таблиць для запитів, попередньо фільтрують дані для того, що потрібно в запиті, а також дозволяють шукати та об’єднувати інші таблиці. Оскільки фільтри, пошуки та об’єднання для представлення даних обчислюються на сервері, як корисне навантаження, так і обчислення на стороні клієнта зводяться до мінімуму.

Галерея може відображати багато записів з джерело даних. Але іноді, потрібно показати додаткову інформацію з іншого джерело даних, яка пов’язана з оригінальною. Наприклад, у вас є галерея, яка відображає список клієнтів, і ви хочете показати ім’я продавця, призначеного кожному клієнту. Ім’я продавця зберігається в іншому джерело даних, ніж інформація про клієнта. Щоб відобразити ім’я продавця, потрібно скористатися функцією підстановки, яка знаходить відповідний запис в іншому джерело даних. Це розгорне вихідну таблицю значеннями підстановки.

Однак розгортання таблиці може відбуватися дуже повільно, якщо у вас багато записів і багато пошуків. Для кожного запису в галереї програмі потрібно виконати окремий запит до іншого джерело даних та отримати значення пошуку. Це означає, що програмі може знадобитися виконати багато запитів для кожного запису, що може зайняти багато часу та вплинути на продуктивність програми. Цей антипатерн іноді називають "N у квадраті, (n^2)" або проблемою "N+1".

Використовуйте StartsWith або фільтр

Power Fx Надає кілька способів пошуку даних. Загалом, використовуйте вираз, який використовує індекс, наприклад StartsWith або Filter, замість виразу, який читає всю таблицю, як In. Оператор In підходить для колекцій у пам’яті або якщо зовнішня таблиця джерело даних дуже мала.

Розгляньте можливість дублювання даних

Іноді доступ до даних у запиті відбувається повільно, оскільки вони зберігаються в іншому розташуванні або форматі. Щоб пришвидшити запит, можна скопіювати повільні дані та зберегти їх локально в таблиці, до якої можна швидко та легко запитувати. Однак це означає, що локальні дані можуть бути не найновішою версією вихідних даних. Потім запустіть інший процес, щоб періодично оновлювати локальні дані. Цей процес може бути потоком Power Automate , плагіном, збереженою процедурою або будь-яким іншим методом, який може переміщати дані з одного місця в інше.

Частота оновлення локальних даних залежить від потреб вашого бізнесу. Наскільки актуальними мають бути дані для вашого додатка? Наприклад, припустімо, що ви працюєте в компанії Contoso, яка продає велосипеди. Список доступних велосипедів зберігається в базі даних продуктів, до якої ви можете отримати доступ через API у спеціальному з’єднувачі. Але, скажімо, виклик API повільний, і тому ви вирішили скопіювати дані про товар і зберегти їх локально в таблиці. Потім ви створюєте представлення даних, яке об’єднує таблицю з іншими релевантними даними для вашого додатка. Ви також створюєте Power Automate ланцюжок, який запускається щодня, і оновлюєте таблицю останніми даними про товари з API. Тоді ваш додаток зможе швидше запитувати локальні дані, і їм не більше одного дня.

Дублювання даних є поширеним типом техніки в програмах корпоративного рівня для забезпечення хорошої продуктивності. Ви можете використовувати Dataverse плагіни, збережені процедури або переміщення даних для дублювання даних в єдину таблицю, оптимізовану для запитів. Ключове питання: наскільки актуальними мають бути ці дані? Якщо ви можете дозволити собі деяку затримку, ви можете скористатися цією технікою, щоб прискорити роботу програми.

Пропозиції

Для досягнення цієї мети поміркуйте над наступними запитаннями та пропозиціями:

  1. Наскільки важливо для клієнта бачити значення даних у галереї або сітці даних? Чи прийнятно спочатку вибрати запис, а потім відобразити дані у формі?
  2. Чи може представлення виконати попередню роботу, необхідну для відображення даних у правильному форматі?
  3. Чи використовуєте ви оператор "IN", де працюватиме "StartsWith"?
  4. Наскільки актуальними мають бути ваші дані? Чи існує стратегія дублювання даних, яку можна використовувати, щоб змусити запит працювати над однією таблицею за замовчуванням?