Java 点火放vs数据流
我有大量的Java 点火放vs数据流,java,ignite,Java,Ignite,我有大量的IgniteRunnable,我将使用IgniteCompute执行这些。它们如下所示: public class MyIgniteRunnable implements IgniteRunnable{ private Sting value; private String key; public MyIgniteRunnable(String key, String value){ this.key = key; thi
IgniteRunnable
,我将使用IgniteCompute
执行这些。它们如下所示:
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
是否正确。我认为由于我使用affinityRun
和键
每个任务都将在“right”节点上执行,因此put
是可以的,因为没有额外的序列化/网络成本
这种方法是正确的还是有更有效的方法
我没有使用流式处理,因为每个任务中只有一个元素要放入缓存。如果需要根据缓存的值执行一些逻辑,那么您的方法是正确的,可能是最简单的。执行逻辑的最佳方式是在存储密钥的节点上。因为您使用的是affinityRun(…),所以缓存放置操作将是本地的,并且不会有冗余的网络流量
另一方面,您也可以使用DataStreamer,它应该提供更好的性能,但是对于必须在服务器端执行某些并置逻辑的情况来说,它要复杂一些。看看这里记录的StreamReceiver、StreamTransformer和StreamVisitor:在这种情况下,我不确定dataStreamers的性能。我知道流变形金刚。为了执行一些逻辑,我需要获取cache元素。所以我只想通过网络将任务发送一次到正确的节点,然后获取、处理和放置(所有操作都是本地的)。或者流接收器已经在正确的节点上执行,所以没有额外的网络流量和序列化成本?