Ignite put 与 DataStreaming
Ignite put vs DataStreaming
我有大量 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
和 key
每个任务将在 "right" 节点上执行,所以 put
没问题,因为没有额外的 serialization/networking 成本.
这种方法是否正确,或者有更有效的方法吗?
我没有使用流,因为每个任务中只有一个元素要放入缓存。
如果您需要根据缓存值执行一些逻辑,那么您的方法是正确的,而且可能是最简单的。执行逻辑的最佳方式是在存储密钥的节点上。因为您使用的是 affinityRun(...) 缓存放置操作将是本地的,不会有冗余的网络流量。
另一方面,您也可以使用 DataStreamer,它应该提供更好的性能,但对于必须在服务器端执行某些并置逻辑的情况来说有点复杂。查看此处记录的 StreamReciever、StreamTransformer 和 StreamVisitor:https://apacheignite.readme.io/docs/data-streamers
我有大量 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
和 key
每个任务将在 "right" 节点上执行,所以 put
没问题,因为没有额外的 serialization/networking 成本.
这种方法是否正确,或者有更有效的方法吗?
我没有使用流,因为每个任务中只有一个元素要放入缓存。
如果您需要根据缓存值执行一些逻辑,那么您的方法是正确的,而且可能是最简单的。执行逻辑的最佳方式是在存储密钥的节点上。因为您使用的是 affinityRun(...) 缓存放置操作将是本地的,不会有冗余的网络流量。
另一方面,您也可以使用 DataStreamer,它应该提供更好的性能,但对于必须在服务器端执行某些并置逻辑的情况来说有点复杂。查看此处记录的 StreamReciever、StreamTransformer 和 StreamVisitor:https://apacheignite.readme.io/docs/data-streamers