Almacenamiento Variable Global Versus Almacenamiento Temporal
Introducción
Dos de los tipos de almacenamiento temporal más comunes en Harmony son Variables globales y Almacenamiento temporal. Hay varias consideraciones a tener en cuenta a la hora de elegir uno u otro.
Variables Globales
Variable global fuentes y objetivos, no confundir con secuencias de comandos variables globales) son fáciles de codificar y reducen la complejidad, como se describe más adelante en esta página. Sin embargo, tienen ciertas limitaciones.
Para un escenario en el que una integración funciona con conjuntos de datos pequeños (típicos de solicitudes y respuestas de servicios web, o archivos pequeños de unos pocos cientos de registros), sugerimos utilizar variables globales.
Cuando el conjunto de datos está en el rango de megabytes, el extremo de la variable global se vuelve más lento que el extremo de almacenamiento temporal equivalente. Esto comienza a suceder cuando los datos de la variable global superan los 4 MB de tamaño.
Cuando el conjunto de datos está en el rango mayor de varios megabytes, existe el riesgo de truncamiento de datos. Recomendamos un límite de 50 MB para ser conservador y evitar cualquier riesgo de truncamiento.
El uso de extremos de variables globales en operaciones asincrónicas es un caso de uso que requiere una consideración especial. Hay un límite de 7 KB en el tamaño de un conjunto de datos utilizado en un extremo de variable global que se utiliza en una operación asincrónica. En este escenario, exceder ese límite puede resultar en el truncamiento. Ver el RunOperation()
función para obtener una descripción de cómo llamar a una operación asincrónica.
Almacenamiento Temporal
Los conjuntos de datos más grandes, como los utilizados en escenarios ETL con recuentos de registros de miles, deben manejarse mediante almacenamiento temporal.
A diferencia de las variables globales, no hay degradación del rendimiento ni truncamiento cuando se utiliza almacenamiento temporal, incluso con conjuntos de datos muy grandes. Sin embargo, el uso de almacenamiento temporal puede requerir secuencias de comandos adicionales. Al utilizar el almacenamiento temporal, no puede aprovechar la reutilización y la simplicidad de las variables globales, como se describe más adelante en esta página.
Tenga en cuenta que Agentes en Nube que sean de la versión 10.10 o superior tienen un límite de tamaño de archivo de almacenamiento temporal de 50 GB por archivo. Aquellos que necesiten crear archivos temporales de más de 50 GB necesitarán un Agente Privado.
El Uso de una Variable Global Puede Aumentar la Reutilización y Reducir la Complejidad
El uso de una variable global para conjuntos de datos pequeños puede aumentar la reutilización y reducir la complejidad. Por ejemplo, al crear operaciones encadenadas, cada operación puede tener orígenes y objetivos. En lugar de crear combinaciones de origen o destino individuales para cada operación, es fácil utilizar un destino y una fuente de variables globales comunes (descritos en rojo en el siguiente ejemplo):
Para aumentar la reutilización y la estandarización, puede crear un secuencia de comandos reutilizable que registre el contenido de la variable global (el secuencia de comandos log.memory en el ejemplo anterior, resaltado en verde). Este enfoque también se puede lograr utilizando almacenamiento temporal, pero se necesitan secuencias de comandos adicionales para inicializar la ruta y el nombre del archivo.
Cuando se utiliza una variable global, su alcance es la cadena (el hilo) de operaciones. Por lo tanto, los valores de las variables globales son exclusivos de un hilo en particular y se destruyen cuando el hilo finaliza. Este no es el caso del almacenamiento temporal; como resultado, requiere más manejo para garantizar la singularidad. La mejor práctica es inicializar un GUID al inicio de una cadena de operación y luego pasar ese GUID a cada uno de los nombres de archivos de almacenamiento temporal en la cadena, como se describe en Persistencia de datos para procesamiento posterior mediante almacenamiento temporal.
Al realizar pruebas unitarias de operación, resulta útil cargar datos de prueba. El uso de una fuente o destino de variable global simplifica esto: agrega un secuencia de comandos previo a la operación para escribir los datos de prueba en un destino:
$memory = "a,b,c";
Por el contrario, escribir datos en un archivo de almacenamiento temporal tiene este aspecto:
WriteFile("<TAG>Targets/Data</TAG>", "a,b,c");
FlushFile("<TAG>Targets/Data</TAG>");
Asimismo, la lectura de datos es más sencilla con variables globales:
myLocalVar= $memory;
Por el contrario, así es como se leen los datos del almacenamiento temporal:
myLocalVar = ReadFile("<TAG>Sources/Data</TAG>");
En resumen, usar variables globales para leer, escribir y registrar entradas y salidas de operación es sencillo, pero se debe tener mucha precaución para asegurarse de que los datos tengan el tamaño adecuado.