有时您可能希望数据的存储时间比一条消息通过整个流的时间更长。实现此愿望的一种方法是将数据存储在数据库中。这对于长期持久性和事务性来说非常不错,但对于访问(尤其是写访问)来说却太慢。
或者,您也可以使用适当的“长生存期”ESQL 数据类型,将数据在内存中高速缓存一段时间。这样访问速度会比从数据库中访问更快,付出的代价是持续时间短并且没有事务性。
长生存期变量可通过在 DECLARE 语句中使用 SHARED 关键字创建。
消息路由样本演示了如何使用 DECLARE 语句定义共享变量。此样本演示了如何在数据库表中存储路由信息,并使用共享变量在消息流的内存中存储数据库表以提高性能。
长生存期数据类型有一个扩展的生存期,该生存期超出了一条消息通过节点的时间。在线程之间共享它们并且为消息流的生命而存在(严格地讲是在配置更改成消息流的时间段),如下表中所述:
作用域 | 生存期 | 共享 | |
---|---|---|---|
短生存期变量 | |||
模式和模块 | 节点 | 节点中的线程 | 根本不 |
本地例程 | 节点 | 例程中的线程 | 根本不 |
本地块 | 节点 | 块中的线程 | 根本不 |
长生存期变量 | |||
共享节点 | 节点 | 节点的生存期 | 流的所有线程 |
共享流 | 流 | 流的生存期 | 流的所有线程 |
这些数据类型通常在流中使用,只要涉及到流,数据表就是“只读”的。虽然表数据实际上不是静态的,但流并不更改它,并且在更改表数据之前有大量消息通过流。
一个示例是包含一天信用卡交易信息的表。此表每天都会创建并且每天的消息会针对它运行。然后停止流,更新该表,第二天的消息再运行。如果流高速缓存了数据而不是从数据库中读取每条消息,流的执行情况很可能会更好。
这些数据类型的另一个用途是从多条消息累积和集成数据。