Java 了解客户机和服务器

Java 了解客户机和服务器,java,caching,ignite,Java,Caching,Ignite,我对ignite非常陌生,对客户机和服务器节点的责任有疑问。据我从文档中了解,客户机节点是非常小的机器,因此执行一些繁重的缓存操作并不是它们的目的。例如,我需要从一些持久性存储中加载数据,执行一些与缓存相关的繁重计算,并将结果数据放入缓存中。看起来是这样的: 一, 在第二种情况下,客户端所做的只是从持久性存储加载数据,然后在服务器上发布任务 这样做的常见方法是什么?IgniteDataStreamer是在缓存中加载数据的最快方法。因此,第一个案例是有效的 我认为,如果将从服务器节点上的持久性存储

我对ignite非常陌生,对客户机和服务器节点的责任有疑问。据我从文档中了解,客户机节点是非常小的机器,因此执行一些繁重的缓存操作并不是它们的目的。例如,我需要从一些持久性存储中加载数据,执行一些与缓存相关的繁重计算,并将结果数据放入缓存中。看起来是这样的:

一,

在第二种情况下,客户端所做的只是从持久性存储加载数据,然后在服务器上发布任务


这样做的常见方法是什么?

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;
    } 
}