A veces es deseable almacenar datos durante más tiempo del que está un mensaje pasando por un flujo. Una forma de hacerlo, es almacenar los datos en una base de datos. Esto es útil para obtener una transaccionalidad y permanencia de larga duración, pero el acceso (particularmente el acceso de escritura) es lento.
De forma alternativa, puede utilizar tipos de datos ESQL "de larga duración" adecuados, para proporcionar una memoria caché interna de los datos durante un cierto periodo de tiempo. Esto hace que el acceso sea mucho más rápido que desde una base de datos, aunque a expensas de una transaccionalidad y permanencia más cortas.
Las variables de larga duración se crean utilizando la palabra clave SHARED en la sentencia DECLARE.
El Ejemplo Direccionamiento de mensajes muestra cómo definir variables compartidas utilizando la sentencia DECLARE. El ejemplo muestra cómo almacenar información de direccionamiento en una tabla de base de datos y utilizar variables compartidas para almacenar la tabla de base de datos en la memoria en el flujo de mensajes para mejorar el rendimiento.
Los tipos de datos de larga duración permanecen durante más tiempo del que emplea un mensaje en pasar por un nodo. Se comparten entre hebras y duran lo mismo que un flujo de mensajes (hablando con rigor, el tiempo entre cambios de configuración de un flujo de mensajes), tal como se describe en esta tabla:
Ámbito | Duración | Compartido | |
---|---|---|---|
Variables de corta duración | |||
Esquema & Módulo | Nodo | Hebra dentro del nodo | No |
Local Rutina | Nodo | Hebra dentro de la rutina | No |
Local Bloque | Nodo | Hebra dentro del bloque | No |
Variables de larga duración | |||
Compartida Nodo | Nodo | Duración del nodo | Todas las hebras del flujo |
Compartida Flujo | Flujo | Duración del flujo | Todas las hebras del flujo |
Un uso típico de estos tipos de datos puede ser en un flujo en el que las tablas de datos son de 'sólo-lectura', por lo que respecta al flujo. Aunque los datos de la tabla no son realmente estáticos, el flujo no los cambia y miles de mensajes pasan a través del flujo antes de que haya ningún cambio en esos datos.
Un ejemplo es una tabla que contiene las transacciones de tarjeta de crédito de un día. La tabla se crea cada día y los mensajes de ese día se ejecutarán para ella. Luego el flujo se detiene, la tabla se actualiza y se ejecutan los mensajes del día siguiente. Es muy probable que estos flujos tuvieran un mejor rendimiento si almacenaran los datos de la tabla en memoria caché, en lugar de leerlos de una base de datos para cada mensaje.
Otro uso de estos tipos de datos puede ser la acumulación e integración de datos de varios mensajes.