Optimización por combinación
La optimización por combinación permite acelerar la ejecución de asignaciones de datos en las que se pueden filtrar o combinar conjuntos de datos de gran tamaño.
La optimización por combinación funciona eliminando bucles anidados que ocurren durante la ejecución de la asignación de datos. Los bucles anidados se producen cuando la asignación recorre cada elemento de un conjunto tantas veces como elementos existan en otro conjunto de datos. Recuerde que es normal que el motor* de ejecución de asignaciones efectúe bucles (iteraciones) en varias secuencias de elementos. Cuando se producen bucles anidados independientes (es decir, bucles que recorren otros bucles), la asignación puede favorecerse de la optimización por combinación, que permite reducir el tiempo necesario para ejecutar la asignación. Los bucles anidados casi no se perciben durante la ejecución de asignaciones cuyos datos de entrada no son de grant amaño. Sin embargo, cuando se trata de asignaciones que procesan archivos o bases de datos compuestos por un gran número de registros, los bucles anidados pueden dar lugar a complicaciones.
* El motor de ejecución de una asignación puede ser MapForce, MapForce Server o código de programa C#, C++ o Java generado con MapForce. La optimización por combinación es una característica exclusiva de MapForce Server Advanced Edition.
Para designar MapForce Server como motor de ejecución de destino, haga clic en el botón BUILT-IN de la barra de herramientas de MapForce. Esta opción también activa la gran mayoría de características de MapForce. Si selecciona otro lenguaje de transformación, ciertas características de MapForce pueden ser incompatibles. |
Según lo anterior, la prioridad de la optimización por combinación es ocuparse de los bucles anidados de forma eficaz. Para poder entenderlo es necesario comprender cómo se producen los bucles anidados.
La situación más común que da lugar a un bucle anidado es cuando la asignación contiene un componente de combinación y no es posible utilizar el modo de combinación JOIN SQL**.
** Cuando se dan ciertas condiciones en MapForce, las asignaciones admiten un modo de ejecución especial llamado "modo de combinación JOIN SQL" (esto solo es relevante si la asignación lee datos de una base de datos). Cuando los datos se combinan de esta forma, es la base de datos quien lleva a cabo la operación de combinación (es decir, se produce una combinación JOIN SQL) y se evitan los bucles anidados en el motor de ejecución de la asignación. Para más información sobre el modo de combinación JOIN SQL consulte la documentación de MapForce (https://www.altova.com/es/documentation.html). |
Por ejemplo, a continuación puede ver una asignación diseñada con Altova MapForce que combina datos de dos archivos XML mediante un componente de combinación. En el equipo donde está instalado MapForce, esta asignación está en la ruta de acceso ..\Documentos\Altova\MapForce2023\MapForceExamples\Tutorial\JoinPeopleInfo.mfd. Los datos de algunas personas solamente están disponibles en el primer archivo XML (Email, Phone), mientras que otros datos solamente están en el segundo archivo XML (City, Street, Number). El objetivo de la asignación es escribir en el archivo XML de destino los datos combinados de todas las personas cuyos elementos FirstName y LastName sean idénticos en ambas estructuras.
JoinPeopleInfo.mfd
En MapForce el componente de combinación agrupa los elementos en dos conjuntos en base a determinada condición, lo cual implica comparar cada elemento del conjunto 1 con cada elemento del conjunto 2. El número total de comparaciones representa la combinación cruzada (producto cartesiano) de ambos conjuntos. Por ejemplo, si el primer conjunto contiene 50 elementos y el segundo contiene 100 elementos, entonces se producirá un total de 5000 comparaciones (50 x 100). En la asignación de la imagen anterior, los conjuntos que se comparan equivalen a todos los elementos de instancia de las dos estructuras XML que están conectadas al componente de combinación.
Nota: la optimización por combinación (característica exclusiva de MapForce Server Advanced Edition) no debe confundirse con los componentes de combinación (característica de Altova MapForce). Para más información sobre los componentes de combinación consulte la documentación de Altova MapForce (https://www.altova.com/es/documentation.html).
Desde el punto de vista del rendimiento, las asignaciones que contienen bucles anidados tardan más en ejecutarse. Imagine un caso en el que ambos conjuntos combinados contienen millones de registros. Esto afectaría lógicamente al rendimiento y la optimización por combinación sería de gran ayuda. Por lo general, la optimización por combinación funciona como cualquier motor de base de datos optimizado para consultar (indizar) conjuntos de datos de enorme tamaño. La excepción es que, como puede verse en la imagen anterior, la optimización por combinación no solo se ocupa de datos procedentes de bases de datos. La optimización por combinación elimina los bucles anidados, independientemente del tipo de datos, mediante la generación de tablas de consulta internas que se consultan en tiempo de ejecución. Esto mejora considerablemente el rendimiento de la asignación y en definitiva reduce el tiempo necesario para ejecutar la asignación.
Nota: | cuando se produce la optimización por combinación, la ejecución de la asignación tardará menos pero necesitará más memoria. Tenga en cuenta que los patrones de uso de memoria dependen de varios factores complejos y, por tanto, el funcionamiento exacto dependerá de cada caso. |
La optimización por combinación no solo puede acelerar las asignaciones de datos que incluyan combinaciones, sino también las que incluyan componentes de filtrado. En MapForce, los filtros procesan secuencias de elementos (es decir, comprueban si se cumple cierta condición binaria en cada instancia del elemento que está conectado a la entrada node/row). Si la condición binaria está conectada a una función que, a su vez, debe recorrer otra secuencia de elementos y si el contexto de asignación así lo requiere, entonces tendremos una situación parecida a cuando se produce una combinación. Si el filtro debe realizar una comparación cruzada de cada elemento de los dos conjuntos, entonces puede optimizarse por combinación.
Para poder favorecerse de la optimización por combinación, la asignación debe ejecutarse con MapForce Server Advanced Edition. Para ejecutar una asignación con MapForce Server Advanced Edition abra la asignación en MapForce y compílela en un archivo de ejecución (.mfx) (con el comando de menú Archivo | Compilar en archivo de ejecución de MapForce Server). Después ejecute el archivo .mfx con ayuda de un método de la API en el lenguaje que prefiera (o con el comando run de la interfaz de la línea de comandos). Consulte el apartado How It Works para obtener más información.