나는 많은 사람이 IgniteRunnable
임이 IgniteCompute
으로 실행됩니다. 작업에 put
옳은 일이라고 사용하는 경우Ignite put 대 DataStreaming
Ignite ignite;
String key;
String value;
//...
IgniteCompute compute = ignite.compute();
compute.affinityRun("cache", key, new MyIgniteRunnable(key, value));
을하지만 임 확실하지 :
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
}
}
임은 다음과 같이 사용하려고 다음과 같이 그들은 본다. 나는 key
과 함께 affinityRun
을 사용했기 때문에 각 작업이 "올바른"노드에서 실행될 것이므로 put
은 괜찮습니다. 추가/직렬화/네트워킹 비용이 들지 않습니다.
이 방법이 맞습니까? 아니면이 방법을 사용하는 것이 더 효율적입니까?
각 작업마다 캐시에 넣을 요소가 하나뿐이기 때문에 스트리밍을 사용하지 않았습니다.
이 경우에 dataStreamer의 성능에 대해 확신 할 수 없었습니다. 스트림 변압기에 대해 알고 있습니다. 위해서는 일부 논리를 실행하려면 캐시 요소를 얻을 필요가있다. 그래서 네트워크를 통해 한 번만 올바른 노드로 작업을 보내고 처리하고 넣었 으면합니다 (모든 작업은 로컬입니다). –
또는 스트림 수신기가 올바른 노드에서 이미 실행되었으므로 추가 네트워크 트래픽 및 직렬화 비용이 들지 않습니까? –
스트림 수신기는 오른쪽 노드에서 실행됩니다. – Dmitriy