In alcuni casi è possibile che si desideri memorizzare i dati per un periodo più lungo rispetto a quanto impiegato da un singolo messaggio per passare attraverso un flusso. Un modo per effettuare questa operazione è quello di memorizzare i dati in un database. Questa operazione è utile per la permanenza a lungo termine e la transazionalità, ma l'accesso (in particolare l'accesso in scrittura) è lento.
In alternativa, è possibile utilizzare tipi di dati ESQL "a lunga durata" appropriati per fornire una cache in memoria dei dati per un determinato periodo di tempo. In questo modo, l'accesso è più rapido rispetto a quello da un database, sebbene a discapito di una permanenza minore e della transazionalità, in questo caso non presente.
Le variabili a lunga durata vengono create utilizzando la parola chiave SHARED nell'istruzione DECLARE.
L'Esempio Instradamento del messaggio dimostra come definire le variabili condivise mediante l'istruzione DECLARE. L'esempio illustra come memorizzare le informazioni relative all'instradamento in una tabella del database e come utilizzare le variabili condivise per memorizzare la tabella del database in memoria nel flusso di messaggi per migliorare le prestazioni.
I tipi di dati a lunga durata hanno una durata estesa superiore a quella di un singolo messaggio che passa attraverso un nodo. Essi sono condivisi tra i thread ed esistono per la durata di un flusso di messaggi (il tempo tra le modifiche alla configurazione di un flusso di messaggi), come descritto in questa tabella:
Ambito | Durata | Condiviso | |
---|---|---|---|
Variabili a durata breve | |||
Schema & Modulo | Nodo | Thread all'interno del nodo | No |
Routine locale | Nodo | Thread all'interno della routine | No |
Blocco locale | Nodo | Thread all'interno del blocco | No |
Variabili a lunga durata | |||
Nodo condivisa | Nodo | Durata del nodo | Tutti i thread del flusso |
Flusso condivisa | Flusso | Durata del flusso | Tutti i thread del flusso |
Un utilizzo comune di questi tipi di dati potrebbe essere in un flusso in cui le tabelle di dati sono 'di sola lettura' per quanto riguarda il flusso. Sebbene i dati della tabella non siano statici, il flusso non li modifica e migliaia di messaggi passano attraverso il flusso prima che si verifichi una modifica ai dati della tabella.
Un esempio è una tabella che contiene le transazioni quotidiane di una carta di credito. La tabella viene creata ogni giorno ed i messaggi di quel giorno vengono eseguiti sulla tabella. Quindi, il flusso viene arrestato, la tabella aggiornata ed i messaggi del giorno successivo eseguiti. Un flusso di questo tipo viene eseguito in modo migliore se i dati della tabella vengono memorizzati in una cache piuttosto che letti da un database per ogni messaggio.
Un altro utilizzo di tali tipi di dati potrebbe essere l'accumulo e l'integrazione di dati da più messaggi.