2017-05-17 4 views
1

나는 클라이언트와 서버 노드에 대한 책임감을 불 태우고 새로운 질문을 던지기 쉽다. 지금까지 문서 클라이언트 노드에서 얻은 정보는 매우 작은 기계이므로 일부 무거운 캐시 작업을 수행하는 것은 목적이 아닙니다. 예를 들어 일부 지속성 저장소에서 데이터를로드하고 무거운 캐시 관련 계산을 수행하고 결과 데이터를 캐시에 저장해야합니다. 그것은 다음과 같습니다클라이언트와 서버 이해하기

I.

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

} 

질문에 대한 //1입니다. 로드 된 데이터를 처리하여 캐시에 저장하는 것은 클라이언트의 노드 책임입니까? 나는 실제로 다음을 수행 할 의도가 있습니다 : 각각로드 된 작업에 대해 String keyString value을 작성하고 서버 노드에서 모든 평가 및 캐시 관련 작업을 수행하십시오. 다음과 같이 :

II.

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

두 번째 경우 클라이언트가 수행하는 작업은 지속성 저장소의 데이터를로드 한 다음 서버에 작업을 게시하는 것입니다.

그런 일을하는 일반적인 방법은 무엇입니까?

답변

2

데이터 양과 계산 복잡도에 따라 다릅니다. 대량의 데이터가있는 경우 클라이언트를 사용하지 않고도 서버에서 바로 데이터를로드 할 수 있습니다.

Here은 DataStreamer의 가장 간단한 예입니다. 영구 저장소에서 데이터를로드하고 DataStreamer를 사용하기 전에 계산을 수행하면됩니다.

또한 클라이언트 구성 (CPU, RAM, 네트워크) 및 클라이언트와 서버 노드 간의 연결과 같은 다른 요소에 따라 달라집니다. 클라이언트가 서버와 같은 좋은 구성을 가지고 있으며 서버 노드와 동일한 네트워크에 있으면 클라이언트에로드 및 계산을 수행하고 캐시 할 데이터를 스트리밍 한 후에 만 ​​문제가되지 않습니다.

+0

약 25TB의 데이터가있을 것입니다. 그래서, 좋은 지적은 ... 나는 연재 비용을 두려워했다. –

1

IgniteDataStreamer는 캐시에서 데이터를로드하는 가장 빠른 방법입니다. 첫 번째 경우가 유효합니다.

데이터가 서버 노드의 지속성 저장소에서 수집되고 클라이언트가로드 매개 변수 만 보내는 경우 두 번째 사례가 의미가 있다고 생각합니다.

2

자신에 의해 일부 데이터 전용 작업을 만드는 것은 좋지 않습니다. 이처럼 스 트리머에서 수행하는 것과 같은 작업 (데이터는 버퍼링되어 특정 노드에 저장되어 저장됩니다).

클라이언트 노드는 아주 작은 기계입니다, 그래서 일부 무거운 캐시 작업

이 진정한 문이 아닌을 수행하기 위해 자신의 목적이 아니다. 클라이언트 JVM에 충분한 리소스를 제공하여 데이터를로드 할 수 있습니다.

클라이언트 측에서 하나의 데이터 스 트리머를 만들고이 컴퓨터에서 데이터를로드해야합니다. 또한 스 트리머 인스턴스는 스레드 저장이므로 일부 스레드에서 동시에 날짜를로드 할 수 있습니다.

관련 문제