Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 点火放vs数据流_Java_Ignite - Fatal编程技术网

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元素。所以我只想通过网络将任务发送一次到正确的节点,然后获取、处理和放置(所有操作都是本地的)。或者流接收器已经在正确的节点上执行,所以没有额外的网络流量和序列化成本?