2017-11-13 15 views
-2

hazelcast IMap에서 5 백만 항목을 다른 맵으로로드하려고하지만 너무 많은 시간이 걸립니다. 내가 그것을 최적화 할 수 있습니다 어떻게 적은 시간을 소요하고 possible.Below이 코드응용 프로그램 시작시 hazelcast 맵에서 5 백만 항목을 다른 맵으로로드해야합니다.

//localMap is another map where i want to put all entries from Hazelcast 
    Map<Object, Object> localMap = new ConcurrentHashMap(); 
    //imap is hazelcast map reference 
    Iterator<Object> itr = imap.keySet().iterator(); 
    while (itr.hasNext()) { 
     Object obj = itr.next(); 
     localMap.put(obj, imap.get(obj)); 
    } 
    //returning entry set of local map 
    return localMap.entrySet().iterator(); 
+0

다섯 개 스레드로 병렬 처리, 각 복사 만 만 항목 : 사용 사례는 다음과 같은 경우

좀 더 세부 사항에 대한 페이징 술어의 문서를 참조하십시오, 당신은 또한 당신의 결과는 작은 덩어리에서 설정 한 페이지로 볼 제안? – Shark

+1

응용 프로그램을 더 빨리 시작할 수 있도록 백그라운드 스레드에서 맵을 초기화 할 수 없습니까? – StephaneM

+0

http://docs.hazelcast.org/docs/latest/javadoc/com/hazelcast/core/IMap.html#executeOnEntries-com.hazelcast.map.EntryProcessor-가 도움이 될 수 있습니다. 그러나 일반적으로 이것은 디자인 문제처럼 보입니다. 이전에 키를 처리 한 시간과 비교하여 초기화 논리가 완료 될 때 맵에 동일한 값이 포함되어 있는지 어떻게 확인할 수 있습니까? – SpaceTrucker

답변

0

그대로 내 응용 프로그램은 빠르면 올 수 있도록이 같은 것을 할 수있는 :

IMap map = hc.getMap("some-map"); 
Map result = map.getAll(map.keySet()); 

을하지만 것 비싼 수술이되어야합니다. 또는 모든 값을 검색하기 위해 Predicate를 실행하십시오. doc : http://docs.hazelcast.org/docs/3.9/manual/html-single/index.html#distributed-query

그러나 이것은 설계상의 문제처럼 보입니다. 응용 프로그램의 모든 5 백만 항목을 수용해야하므로 메모리 공간이 증가합니다. 또한 여러 항목을 동시에 이동하는 경우 네트워크 및 ser/des 오버 헤드를 잊지 마십시오. http://docs.hazelcast.org/docs/3.9/manual/html-single/index.html#filtering-with-paging-predicates