存続期間の長い変数
メモリー内のキャッシュ・データに対して、適切な存続期間の長い ESQL データ・タイプを使用できます。
フローを通過する単一のメッセージの存続期間より長い期間に渡ってデータを保管する必要がある場合があります。 データの保管方法の 1 つとして、データベースにデータを保管するというものがあります。 データベースを使用する方法は、長期の持続性とトランザクション特性の点では優れていますが、アクセス (特に書き込みアクセス) は低速になります。
代わりに、適切な存続期間の長い ESQL データ・タイプを使用し、一定期間に渡ってデータのメモリー内キャッシュを提供できます。 存続期間の長い ESQL データ・タイプを使用するならデータベースを使った場合よりもアクセスが高速になりますが、この速度には、持続性が短くなりトランザクション特性がなくなるという犠牲が伴います。
存続期間の長い変数を作成するには、DECLARE ステートメントで SHARED キーワードを使用します。 詳しくは、 DECLARE ステートメントを参照してください。
存続期間の長いデータ・タイプは長期に渡って存続し、ノードを通り抜ける単一のメッセージの存続時間を上回ります。 以下の表で説明されているように、存続期間の長いデータ・タイプは複数のスレッドの間で共有され、メッセージ・フローの存続期間 (メッセージ・フローへの構成変更から次の構成変更までの間) 存在します。
| スコープ | 存続期間 | 共有 | |
|---|---|---|---|
| スキーマおよびモジュール | ノード | ノード内のスレッド | なし |
| ルーチンのローカル | ノード | ルーチン内のスレッド | なし |
| ブロックのローカル | ノード | ブロック内のスレッド | なし |
| スコープ | 存続期間 | 共有 | |
|---|---|---|---|
| ノード共有 | ノード | ノードの存続期間 | フローのすべてのスレッド |
| フロー共有 | フロー | フローの存続期間 | フローのすべてのスレッド |
- 存続期間が長い大量のデータを処理できます。
- データとメッセージの結合が高速になります。
- 複数プロセッサーのマシンで、複数のスレッドが同じデータに同時にアクセスできます。
- 以前のメッセージが残したデータに後続のメッセージがアクセスできます。
- 存続期間の長い読み取り/書き込みデータを複数のスレッドの間で共有できます。スレッドとメッセージの間に長期に渡る関連はないからです。
- データベース表に保管されるデータが環境に保管されるのに対し、このタイプのデータは専用に、つまり統合ノードに保管されます。
- ROW 変数を使用して、入力メッセージの変更可能なコピーを作成できます。 ESQL ROW データ・タイプを参照してください。
- 共有定数を作成できます。
これらのデータ・タイプの典型的な使用法として、データ表がフローに対しては「読み取り専用」である場合に、そのフローの中でこうしたデータ・タイプを使用するというものがあります。 表データは実際には静的ではありませんが、フローがこれを変更することはありません。表データに何らかの変更が加えられるまでの間に、何千ものメッセージがフローの中を移動します。
- 1 日のクレジット・カードの取り引きが入った表があります。 この表は毎日作成され、その日のメッセージはこの表に対して実行されます。 それからフローが停止し、表が更新され、次の日のメッセージが実行されます。 この種のフローの場合、メッセージごとにデータベースから読み取るよりも、表データをキャッシュに入れれば、パフォーマンスが良くなるでしょう。
- 複数のメッセージからのデータの集計と統合。