Modele de date de interogare optimizate

Cel mai simplu și mai rapid model de interogare a datelor este:

  1. Un singur tabel sau vizualizare
  2. Prefiltrat pe server la ceea ce aveți nevoie
  3. Coloanele sunt indexate corect pentru interogările așteptate

Când proiectați aplicația, trebuie să vă gândiți cum să interogați rapid datele. Cel mai bun mod de a interoga date este să utilizați un singur tabel sau vizualizare care conține toate informațiile de care aveți nevoie și să le filtrați pe server înainte de a le afișa în aplicație. De asemenea, trebuie să vă asigurați că coloanele pe care le utilizați pentru a filtra sau sorta datele sunt indexate corect. Acest lucru face ca aplicația să fie mai rapidă și mai fluidă.

De exemplu, să presupunem că aveți o galerie care afișează o listă de clienți și agenții de vânzări ai acestora. Dacă stocați informațiile despre client și agent de vânzări în tabele separate, trebuie să utilizați căutări pentru a obține numele de agent de vânzări pentru fiecare client. Acest lucru încetinește aplicația, deoarece trebuie să ruleze multe interogări către celălalt tabel. O modalitate mai bună este să creați o vizualizare care combină informațiile despre client și agent de vânzări într-un singur tabel și să utilizați acea vizualizare ca sursă de date pentru galeria dvs. Apoi, aplicația trebuie să ruleze o singură interogare pentru a obține toate datele de care are nevoie.

Există un compromis între viteza interogării și normalizarea datelor. Normalizarea datelor înseamnă că stocați datele o singură dată și evitați duplicarea. Acest lucru ajută la menținerea datelor consistente și precise. Cu toate acestea, uneori trebuie să duplicați unele date pentru a face interogările mai rapide și mai ușoare. Trebuie să echilibrați aceste două obiective în designul aplicației și structura tabelului. În caz contrar, aplicația ta va fi lentă și întârziată, deoarece trebuie să facă numeroase lucrări pentru a filtra și alătura datele din diferite tabele.

Utilizarea vizualizărilor de pe partea de server

Vizualizările sunt probabil cel mai comun instrument pentru a ajuta la echilibrarea acestor obiective. Acestea prezintă o singură structură de tabel pentru interogări, prefiltrează datele pentru ceea ce aveți nevoie în interogare și permit căutări și asocieri la alte tabele. Deoarece filtrele, căutările și asocierile pentru vizualizare sunt calculate pe server, atât sarcina utilă, cât și calculul pe partea client sunt reduse la minimum.

O galerie poate afișa multe înregistrări dintr-o sursă de date. Dar, uneori, trebuie să afișați informații suplimentare dintr-o altă sursă de date care este legată de cea originală. De exemplu, aveți o galerie care afișează o listă de clienți și doriți să afișați numele agentului de vânzări care este atribuit fiecărui client. Numele vânzătorului este stocat într-o sursă de date diferită de informațiile clientului. Pentru a afișa numele agentului de vânzări, trebuie să utilizați o funcție de căutare care găsește înregistrarea potrivită în cealaltă sursă de date. Acest lucru extinde tabelul original cu valorile de căutare.

Cu toate acestea, extinderea tabelului poate fi foarte lentă dacă aveți multe înregistrări și multe căutări. Pentru fiecare înregistrare din galerie, aplicația trebuie să ruleze o interogare separată către cealaltă sursă de date și să obțină valoarea de căutare. Aceasta înseamnă că aplicația poate avea nevoie să ruleze mai multe interogări pentru fiecare înregistrare, ceea ce poate dura mult timp și poate afecta performanța aplicației. Acest anti-model este uneori cunoscut sub numele de "N pătrat, (n^2)" sau o problemă "N+1".

Utilizați StartsWith sau Filter

Power Fx oferă mai multe moduri de a căuta date. În general, utilizați o expresie care utilizează un index precum StartsWith sau Filter în loc de una care citește întregul tabel, cum ar fi In. Operatorul In este bun pentru colecții în memorie sau dacă tabelul sursei de date externe este foarte mic.

Luați în considerare duplicarea datelor

Uneori, datele sunt lente de accesat într-o interogare, deoarece sunt stocate într-o locație sau format diferit. Pentru a face interogarea mai rapidă, puteți copia datele lente și le puteți stoca local într-un tabel rapid și ușor de interogat. Cu toate acestea, acest lucru înseamnă că este posibil ca datele locale să nu fie cea mai actualizată versiune a datelor originale. Apoi rulați un alt proces pentru a actualiza periodic datele locale. Acest proces poate fi un flux Power Automate, un plugin, o procedură stocată sau orice altă metodă care poate muta date dintr-un loc în altul.

Cerința de frecvență a actualizării datelor locale depinde de nevoile afacerii dvs. Cât de proaspete trebuie să fie datele pentru aplicația dvs.? De exemplu, să presupunem că lucrați pentru Contoso, o companie care vinde biciclete. Lista bicicletelor disponibile este stocată într-o bază de date de produse pe care o puteți accesa printr-un API într-un conector personalizat. Dar să spunem că apelul API este lent, așa că decideți să copiați datele produsului și să le stocați local într-un tabel. Apoi creați o vizualizare care combină tabelul cu alte date relevante pentru aplicația dvs. De asemenea, creați un flux Power Automate care rulează în fiecare zi și vă actualizează tabelul cu cele mai recente date de produs din API. Apoi, aplicația poate interoga datele locale mai repede, iar datele sunt vechi de cel mult o zi.

Duplicarea datelor este un tip comun de tehnică în aplicațiile de nivel enterprise pentru a asigura performanțe bune. Puteți utiliza pluginuri Dataverse, proceduri stocate sau mișcare de date pentru a duplica datele într-un singur tabel optimizat pentru interogare. Întrebarea cheie este: cât de actualizate trebuie să fie aceste date? Dacă vă puteți permite o anumită întârziere, puteți utiliza această tehnică pentru a vă accelera aplicația.

Sugestii

Pentru a atinge acest obiectiv, luați în considerare următoarele întrebări și sugestii:

  1. Cât de important este pentru un client să vadă valoarea datelor într-o galerie sau într-o grilă de date? Ar fi acceptabil să selectați mai întâi o înregistrare și apoi să afișați datele într-un formular?
  2. Poate o vizualizare să facă prelucrarea necesară pentru a vedea datele în formatul potrivit?
  3. Utilizați un operator "IN" unde va funcționa un "StartsWith"?
  4. Cât de actuale trebuie să fie datele dvs.? Există o strategie de duplicare a datelor pe care o puteți utiliza pentru a vă face interogarea să funcționeze pe un singur tabel în mod implicit?