2017-10-18 15 views
0

hazelcast 3.8.6을 사용합니다. 다음 설정으로 IMAP {키, 값}이 있습니다 :Hazelcast IMap 성능

mapConfig.setBackupCount(5); 
mapConfig.setReadBackupData(true); 

키가

long userId; 
long contentId; 

입니다 또한 데이터가 5 개 노드가 있습니다. 늘어나는만큼 내가 각 노드는 모든 데이터를 가지고 설정에 따라 이해합니다. 그런 식으로 분산 된지도를 복제 된지도로 바꾸어 작업 속도를 높이고 네트워킹 호출을하지 마십시오.

이미지를 보겠습니다. 사용자가 ID별로 모든 데이터를 가져와야합니다. 평소 모드에서 다음 코드를 작성합니다 :

EntryObject eo = new PredicateBuilder().getEntryObject(); 
Predicate predicate = eo.key().get("this.userId").equal(userId); 
map.values(predicate).stream().map(.....) 

이 코드는 모든 노드에서 실행되며 결과는 호출하는 노드로 리턴됩니다. 나는 "setReadBackupData (true)"설정의 경우 요청이 다른 노드로 전송되지 않고이 데이터를 요청할 노드에서 모든 데이터를 찾을 수 있다고 생각합니까? 또는이 경우 네트워킹 호출을 피하기 위해 다음과 같이 사용해야합니다.

map.entrySet().stream() 
.filter(entry->entry.getKey().getUserId().equals(userId)) 
.map(.....) 

감사합니다.

+1

백업 수 5는 6 복제본 (마스터 + 5)을 의미합니다. 노드가 5 개인 경우 하나의 복사본을 너무 많이 요청했습니다. –

+1

백업에서 읽기는 쿼리가 아닌 키 기반 액세스에서만 사용할 수 있습니다. – noctarius

+1

'entrySet()'은 일반적으로 위험하기 때문에, IMap이 대개 커다란 이유로 분할됩니다. 어떤 문제를 해결하려고합니까? 부분 키로 모든 키를 찾으십니까? 당신의 map (....)은 무엇을합니까 –

답변

0

readBackupData 플래그는 멤버 내에서 쿼리를 실행하는 경우에만 작동하므로 HazelcastClient를 사용하는 경우에는 백업에서 읽지 않습니다.