Compartilhar via


Padrões de dados de consulta otimizados

O padrão de consulta de dados mais simples e rápido é:

  1. Uma tabela ou exibição única
  2. Pré-filtrado no servidor ao que você precisa
  3. As colunas são indexadas corretamente para as consultas esperadas

Ao projetar o aplicativo, você precisa pensar em como consultar rapidamente os dados. A melhor maneira de consultar dados é usar uma única tabela ou exibição que tenha todas as informações necessárias, além de filtrá-las no servidor antes de exibi-las no aplicativo. Você também precisa garantir que as colunas usadas para filtrar ou classificar os dados estejam indexadas corretamente. Isso deixa o aplicativo mais rápido e suave.

Por exemplo, suponhamos que você tenha uma galeria que mostre uma lista de clientes e os vendedores. Se armazenar as informações do cliente e do vendedor em tabelas à parte, você precisará usar pesquisas para obter o nome do vendedor de cada cliente. Isso reduz a velocidade do aplicativo porque ele precisa executar muitas consultas na outra tabela. A melhor maneira é criar uma exibição que combine as informações do cliente e do vendedor em uma tabela e usar essa exibição como a fonte de dados para a galeria. Em seguida, o aplicativo só precisa executar uma consulta para obter todos os dados necessários.

Há uma compensação entre a velocidade da consulta e a normalização dos dados. A normalização de dados significa que você armazena os dados apenas uma vez e evita a duplicação. Isso ajuda a manter os dados consistentes e precisos. Porém, às vezes, você precisa duplicar alguns dados para deixar as consultas mais rápidas e fáceis. Você precisa equilibrar essas duas metas no design do aplicativo e na estrutura da tabela. Do contrário, o aplicativo ficará lento porque ele precisa realizar inúmeros trabalhos para filtrar e unir os dados de tabelas diferentes.

Usar exibições do lado do servidor

As exibições provavelmente são a ferramenta mais comum para ajudar a equilibrar essas metas. Elas apresentam uma estrutura de tabela única para consultas, pré-filtram os dados de acordo com o que você precisa na consulta e habilitam pesquisas e junções com outras tabelas. Como os filtros, as pesquisas e as junções da exibição são computados no servidor, a carga útil e a computação do lado do cliente são minimizadas.

Uma galeria pode exibir muitos registros de uma fonte de dados. Mas, às vezes, você precisa mostrar informações adicionais de outra fonte de dados relacionada à original. Por exemplo, você tem uma galeria que mostra uma lista de clientes e deseja mostrar o nome do vendedor atribuído a cada cliente. O nome do vendedor é armazenado em uma fonte de dados diferente das informações do cliente. Para mostrar o nome do vendedor, você precisa usar uma função de pesquisa que encontra o registro correspondente na outra fonte de dados. Isso expande a tabela original com os valores de pesquisa.

No entanto, a expansão da tabela poderá ser muito lenta se você tiver muitos registros e muitas pesquisas. Para cada registro na galeria, o aplicativo precisa executar uma consulta à parte para a outra fonte de dados e obter o valor de pesquisa. Isso significa que o aplicativo talvez precise executar muitas consultas para cada registro, o que pode demorar muito e afetar o desempenho do aplicativo. Às vezes, esse antipadrão é conhecido como problema "N ao quadrado, (n^2)" ou "N+1"

Usar StartsWith ou Filter

O Power Fx oferece diversas maneiras de pesquisar dados. Em geral, use uma expressão que aproveite um índice como StartsWith ou Filter, em vez de uma que leia a tabela inteira como In. O operador In é indicado para coleções em memória ou se a tabela da fonte de dados externa for muito pequena.

Levar em consideração a duplicação de dados

Às vezes, o acesso aos dados em uma consulta é lento porque eles são armazenados em um local ou formato diferente. Para deixar a consulta mais rápida, você pode copiar os dados lentos e armazená-los localmente em uma tabela que seja rápida e fácil de consultar. No entanto, isso significa que os dados locais talvez não sejam a versão mais atualizada dos dados originais. Em seguida, execute outro processo para atualizar periodicamente os dados locais. Esse processo pode ser um fluxo do Power Automate, um plugin, um procedimento armazenado ou qualquer outro método que possa mover dados de um lugar para outro.

O requisito da frequência de atualização dos dados locais depende das necessidades de negócios. Qual é a atualização dos dados necessária para que sejam do aplicativo? Por exemplo, vamos supor que você trabalhe para a Contoso, uma empresa que vende bicicletas. A lista de bicicletas disponíveis é armazenada em um banco de dados de produtos que você pode acessar por meio de uma API em um conector personalizado. Mas, digamos que a chamada à API seja lenta e você decida copiar os dados do produto e armazená-los localmente em uma tabela. Em seguida, você cria uma exibição que combina a tabela com outros dados relevantes para o aplicativo. Você também cria um fluxo do Power Automate executado diariamente e atualiza a tabela com os dados de produto mais recentes da API. Assim, o aplicativo pode consultar os dados locais com mais rapidez, e os dados têm apenas um dia, no máximo.

A duplicação de dados é um tipo comum de técnica em aplicativos de nível empresarial para garantir um bom desempenho. Você pode usar plugins do Dataverse, procedimentos armazenados ou movimentação de dados para duplicar dados em uma única tabela otimizada para consulta. A questão-chave é: até que ponto os dados devem estar atualizados? Se puder pagar algum atraso, você poderá usar essa técnica para acelerar o aplicativo.

Sugestões

Para atingir essa meta, leve em consideração as seguintes perguntas e sugestões:

  1. Qual é a importância para um cliente ver o valor dos dados em uma galeria ou uma grade de dados? Seria aceitável selecionar primeiro um registro e depois mostrar os dados em um formulário?
  2. Uma exibição pode fazer o pré-trabalho necessário para ver dados no formato certo?
  3. Você está usando um operador "IN" em que um "StartsWith" funcionará?
  4. Qual atualização os dados precisam ter? Existe uma estratégia de duplicação de dados que você pode usar para que a consulta funcione em uma tabela única por padrão?