Patrones de datos de consulta optimizados

El patrón de consulta de datos más simple y rápido es:

  1. Una sola tabla o vista
  2. Prefiltrado en el servidor a lo que necesita
  3. Las columnas están indexadas correctamente para las consultas esperadas

Cuando diseña su aplicación, debe pensar en cómo consultar los datos rápidamente. La mejor manera de consultar datos es utilizar una única tabla o vista que tenga toda la información que necesita y filtrarla en el servidor antes de mostrarla en su aplicación. También debe asegurarse de que las columnas que utiliza para filtrar u ordenar los datos estén indexadas correctamente. Esto hace que su aplicación sea más rápida y fluida.

Por ejemplo, suponga que tiene una galería que muestra una lista de clientes y sus vendedores. Si almacena la información del cliente y del vendedor en tablas separadas, deberá utilizar búsquedas para obtener el nombre del vendedor de cada cliente. Esto ralentiza su aplicación porque necesita ejecutar muchas consultas en la otra tabla. Una mejor manera es crear una vista que combine la información del cliente y del vendedor en una tabla y usar esa vista como origen de datos para su galería. Luego, su aplicación solo necesita ejecutar una consulta para obtener todos los datos que necesita.

Existe un equilibrio entre la velocidad de consulta y la normalización de datos. La normalización de datos significa que los datos se almacenan solo una vez y se evita la duplicación. Esto ayuda a mantener los datos consistentes y precisos. Sin embargo, a veces es necesario duplicar algunos datos para que las consultas sean más rápidas y sencillas. Debe equilibrar estos dos objetivos en el diseño de su aplicación y en la estructura de la tabla. De lo contrario, su aplicación será lenta porque necesita realizar numerosos trabajos para filtrar y unir los datos de diferentes tablas.

Utilice vistas del lado del servidor

Las vistas son probablemente la herramienta más común para ayudar a equilibrar estos objetivos. Presentan una estructura de tabla única para consultas, filtran previamente los datos para lo que necesita en la consulta y permiten búsquedas y uniones a otras tablas. Debido a que los filtros, búsquedas y uniones para la vista se calculan en el servidor, se minimizan tanto la carga útil como el cálculo del lado del cliente.

Una galería puede mostrar muchos registros de un archivo origen de datos. Pero a veces es necesario mostrar información adicional de otro origen de datos que esté relacionado con el original. Por ejemplo, tiene una galería que muestra una lista de clientes y desea mostrar el nombre del vendedor asignado a cada cliente. El nombre del vendedor se almacena en un origen de datos diferente al de la información del cliente. Para mostrar el nombre del vendedor, debe utilizar una función de búsqueda que encuentre el registro coincidente en el otro origen de datos. Esto expande la tabla original con los valores de búsqueda.

Sin embargo, expandir la tabla puede resultar muy lento si tiene muchos registros y muchas búsquedas. Para cada registro de la galería, la aplicación debe ejecutar una consulta independiente al otro origen de datos y obtener el valor de búsqueda. Esto significa que es posible que la aplicación necesite ejecutar muchas consultas para cada registro, lo que puede llevar mucho tiempo y afectar el rendimiento de la aplicación. Este antipatrón a veces se conoce como problema de "N cuadrado, (n^2)" o "N+1".

Usar StartsWith o Filter

Power Fx proporciona varias formas de buscar datos. En general, utilice una expresión que aproveche un índice como StartsWith o Filter en lugar de uno que lea toda la tabla como In. El operador In está bien para colecciones en memoria o si la tabla externa origen de datos es muy pequeña.

Piense en duplicar los datos

A veces, es lento acceder a los datos en una consulta porque están almacenados en una ubicación o formato diferente. Para agilizar la consulta, puede copiar los datos lentos y almacenarlos localmente en una tabla que sea rápida y fácil de consultar. Sin embargo, esto significa que es posible que los datos locales no sean la versión más actualizada de los datos originales. Luego ejecute otro proceso para actualizar los datos locales periódicamente. Este proceso puede ser un flujo de Power Automate, un complemento, un procedimiento almacenado o cualquier otro método que pueda mover datos de un lugar a otro.

El requisito de frecuencia para actualizar los datos locales depende de las necesidades de su negocio. ¿Qué tan actualizados deben estar los datos para su aplicación? Por ejemplo, supongamos que trabaja para Contoso, una empresa que vende bicicletas. La lista de bicicletas disponibles se almacena en una base de datos de Productos a la que puede acceder a través de una API en un conector personalizado. Pero supongamos que la llamada a la API es lenta y decide copiar los datos del producto y almacenarlos localmente en una tabla. Luego crea una vista que combina su tabla con otros datos relevantes para su aplicación. También crea un flujo de Power Automate que se ejecuta todos los días y actualiza su tabla con los datos de productos más recientes de la API. Entonces su aplicación puede consultar los datos locales más rápido y los datos tienen solo un día de antigüedad como máximo.

La duplicación de datos es un tipo común de técnica en aplicaciones de nivel empresarial para garantizar un buen rendimiento. Puedes usar complementos de Dataverse, procedimientos almacenados o movimiento de datos para duplicar datos en una sola tabla optimizada para consultas. La pregunta clave es: ¿qué tan actualizados deben estar estos datos? Si puede permitirse algún retraso, puede utilizar esta técnica para acelerar su aplicación.

Sugerencias

Para lograr este objetivo, considere las siguientes preguntas y sugerencias:

  1. ¿Qué importancia tiene para un cliente ver el valor de los datos en una galería o cuadrícula de datos? ¿Sería aceptable seleccionar primero un registro y luego mostrar los datos en un formulario?
  2. ¿Puede una vista realizar el trabajo previo necesario para ver los datos en el formato correcto?
  3. ¿Está utilizando un operador "IN" donde funcionará "StartsWith"?
  4. ¿Cómo de actualizados tienen que estar sus datos? ¿Existe alguna estrategia de duplicación de datos que pueda utilizar para que su consulta funcione en una sola tabla de forma predeterminada?