Java 了解客户机和服务器
我对ignite非常陌生,对客户机和服务器节点的责任有疑问。据我从文档中了解,客户机节点是非常小的机器,因此执行一些繁重的缓存操作并不是它们的目的。例如,我需要从一些持久性存储中加载数据,执行一些与缓存相关的繁重计算,并将结果数据放入缓存中。看起来是这样的: 一, 在第二种情况下,客户端所做的只是从持久性存储加载数据,然后在服务器上发布任务Java 了解客户机和服务器,java,caching,ignite,Java,Caching,Ignite,我对ignite非常陌生,对客户机和服务器节点的责任有疑问。据我从文档中了解,客户机节点是非常小的机器,因此执行一些繁重的缓存操作并不是它们的目的。例如,我需要从一些持久性存储中加载数据,执行一些与缓存相关的繁重计算,并将结果数据放入缓存中。看起来是这样的: 一, 在第二种情况下,客户端所做的只是从持久性存储加载数据,然后在服务器上发布任务 这样做的常见方法是什么?IgniteDataStreamer是在缓存中加载数据的最快方法。因此,第一个案例是有效的 我认为,如果将从服务器节点上的持久性存储
这样做的常见方法是什么?IgniteDataStreamer是在缓存中加载数据的最快方法。因此,第一个案例是有效的
我认为,如果将从服务器节点上的持久性存储中收集数据,并且客户端只发送加载的参数,那么第二种情况是有意义的。IgniteDataStreamer是在缓存中加载数据的最快方法。因此,第一个案例是有效的
我认为,如果将从服务器节点上的持久性存储中收集数据,并且客户端只发送加载的参数,那么第二种情况是有意义的。自己为一些数据创建专用作业是个坏主意。在拖缆中执行类似操作(数据将被缓冲并发送到存储数据的特定节点) 客户端节点是非常小的机器,因此它们的目的不是执行一些繁重的缓存操作 这不是一个真实的说法。您能够为客户机JVM提供足够的资源来加载数据
您应该在客户端创建一个数据流,并从此计算机加载数据。另外,streamer实例是线程保存,所以您可以同时从一些线程加载数据。自己为一些数据创建专用作业是个坏主意。在拖缆中执行类似操作(数据将被缓冲并发送到存储数据的特定节点) 客户端节点是非常小的机器,因此它们的目的不是执行一些繁重的缓存操作 这不是一个真实的说法。您能够为客户机JVM提供足够的资源来加载数据
您应该在客户端创建一个数据流,并从此计算机加载数据。拖缆实例也是线程保存,所以您可以同时从一些线程加载数据。这取决于数据量和计算复杂性。如果数据量很大,您可以直接从服务器加载数据,而无需使用客户端 是DataStreamer最简单的示例,在使用DataStreamer之前,只需添加从持久存储加载的数据并进行计算
此外,它还取决于其他因素,如客户机配置(CPU、RAM、网络)以及客户机和服务器节点之间的连接。如果客户端具有良好的配置,例如,作为服务器,并且它与服务器节点位于同一网络中,则在客户端上进行加载和计算并不是问题,只有在客户端将数据流式传输到缓存后才进行加载和计算。这取决于数据量和计算复杂性。如果数据量很大,您可以直接从服务器加载数据,而无需使用客户端 是DataStreamer最简单的示例,在使用DataStreamer之前,只需添加从持久存储加载的数据并进行计算
此外,它还取决于其他因素,如客户机配置(CPU、RAM、网络)以及客户机和服务器节点之间的连接。如果客户端具有良好的配置,例如,作为服务器,并且它与服务器节点位于同一网络中,那么在客户端上进行加载和计算并不是问题,只有在客户端将数据流式传输到缓存之后。将有大约25 TB的数据。所以,很好的一点。。。我担心序列化的成本。大约有25 TB的数据。所以,很好的一点。。。我担心序列化的成本。
//This is on a client node
public class Loader{
private DataSource dataSource;
@IgniteInstanceResource
private Ignite ignite;
public void load(){
String key;
String values;
//retreive key and value from the dataSource
IgniteDataStreamer<String, String> streamer = ignite.dataStreamer("cache");
String result;
//process value
streamer.addData(key, result); //<---------1
}
}
public class LoaderJob extends ComputeJobAdapter{
private String key;
private String value;
@Override
public Object execute(){
//perform all computation and putting into cache here
//and return Tuple2(key, result);
}
}
public class LoaderTask extends extends ComputeTaskSplitAdapter<Void, Void {
//...
public Void reduce(List<ComputeJobResult> results) throws IgniteException {
results.stream().forEach(result -> {
Tuple2<String, String> jobResult = result.getData();
ignite.dataStreamer("cache").addData(jobResult._1, jobResult._2);
});
return null;
}
}