gpt4 book ai didi

java - Ignite put 与 DataStreaming

转载 作者:行者123 更新时间:2023-11-30 02:32:01 25 4
gpt4 key购买 nike

我有大量的 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 是否正确。我认为,由于我将 affinityRunkey 一起使用,每个任务都将在“正确的”节点上执行,所以 put 没问题,因为没有额外的序列化/网络成本。

这种方法正确吗?或者有更有效的方法吗?

我没有使用流式传输,因为每个任务中只有一个元素要放入缓存中。

最佳答案

如果您需要根据缓存值执行一些逻辑,那么您的方法是正确的,而且可能是最简单的。执行逻辑的最佳方法是在存储 key 的节点上。因为您使用的是affinityRun(...),所以缓存放置操作将是本地的,并且不会有冗余的网络流量。

另一方面,您也可以使用 DataStreamer,它应该可以提供更好的性能,但对于必须在服务器端执行一些并置逻辑的情况来说,它会稍微复杂一些。查看此处记录的 StreamReciever、StreamTransformer 和 StreamVisitor:https://apacheignite.readme.io/docs/data-streamers

关于java - Ignite put 与 DataStreaming,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44058024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com