私はIgniteRunnable
の大量を持ち、IgniteCompute
で実行します。次のように彼らは見て次のようにそれを使用しようとしてIgnite putとDataStreaming
public class MyIgniteRunnable implements IgniteRunnable{
private Sting value;
private String key;
public MyIgniteRunnable(String key, String value){
this.key = key;
this.value = value;
}
public void run{
IgniteCache<String, String> cache = Ignition.localIgnite().getOrCreateCache("cache");
String previous = cache.get(key);
String result;
//process previous and value
cache.put(key, result); //<------ Here
}
}
イム:
Ignite ignite;
String key;
String value;
//...
IgniteCompute compute = ignite.compute();
compute.affinityRun("cache", key, new MyIgniteRunnable(key, value));
しかし、イムタスクにput
を使用して行うには正しいことであるかどうかわかりません。私はkey
でaffinityRun
を使用しているので、各タスクは "正しい"ノードで実行されるので、put
は大丈夫だと思っていました。
このアプローチは正しいですか、これを行うにはもっと効率的な方法がありますか?
キャッシュに入れる各タスクに要素が1つしかないので、ストリーミングを使用しませんでした。
この場合、dataStreamerのパフォーマンスについてはわかりませんでした。私はストリームトランスについて知っています。ロジックを実行するためには、キャッシュ要素を取得する必要があります。だから私はネットワークを介して一度だけ適切なノードにタスクを送信し、取得し、処理し、配置したい(すべての操作はローカル)。 –
ストリーム・レシーバーは既に適切なノードで実行されているため、追加のネットワーク・トラフィックとシリアライゼーションは不要です。 –
右側のノードでストリーム受信者が実行されます。 – Dmitriy