2.14. コードの実行およびデータ処理
分散キャッシングの利点の 1 つは、各ホストからのコンピュートリソースを使用して、大規模なスケーリングデータ処理をより効率的に実行できることです。Data Grid で直接処理ロジックを実行することで、ワークロードを複数の JVM インスタンスに分散します。コードは、データを格納しているのと同じメモリー領域でも実行されるので、エントリーの反復処理速度を早めることができます。
Data Grid のデプロイメントへのパフォーマンスの影響は、コードの実行状況により完全に異なります。より複雑な処理操作を行うと、パフォーマンスが低下するため、慎重に計画を立てて、Data Grid クラスターでコードを実行するようにする必要があります。コードをテストし、小規模なサンプルデータセットで複数実行を試すことから開始します。メトリックを収集後には、最適化の特定を開始し、実行中のコードのパフォーマンスに対する影響を理解できます。
確実に考慮するべき点として、処理を長時間にわたり実行すると、通常の読み取りおよび書き込みの操作に悪影響を及ぼし始めます。したがって、デプロイメントを時間とともに監視し、パフォーマンスを継続的に評価することが重要です。
組み込みキャッシュ
Data Grid は組み込みのキャッシュで、データと同じメモリー領域でコードを実行できる API を 2 つ提供します。
ClusterExecutorAPI- 1 つ以上のキャッシュエントリーの反復処理など、Cache Manager ですべての操作を実行し、Data Grid ノードに基づいた処理を行うことができます。
CacheStreamAPI- コレクションで操作を実行し、データを基に処理できるようにします。
1 つのノード、ノードのグループ、または特定の地理的リージョン内の全ノードで操作を実行する場合は、クラスターの実行を使用する必要があります。データセット全体に対して正しい結果を保証する操作を実行する場合には、分散ストリームを使用するオプションがより効果的です。
クラスターの実行
CacheStream
Map<Object, String> jbossValues =
cache.entrySet().stream()
.filter(e -> e.getValue().contains("JBoss"))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Map<Object, String> jbossValues =
cache.entrySet().stream()
.filter(e -> e.getValue().contains("JBoss"))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
リモートキャッシュ
リモートキャッシュの場合、Data Grid は ServerTask API を提供し、カスタム Java 実装を Data Grid Server に登録し、Hot Rod で execute() メソッドを呼び出すか、Data Grid コマンドラインインターフェイス (CLI) を使用して、プログラムを使用してタスクを実行できます。1 つの Data Grid Server インスタンスだけで、またはクラスター内のすべてのサーバーインスタンスでタスクを実行できます。