2017-03-17 8 views
0

PagingPredicate가 발생합니다. 지정된 pageSize에 대해서만 정렬됩니다. 하지만 컬렉션을 먼저 정렬 한 다음 페이징을 적용하고 결과를 제공하고 싶습니다.비교기에서 PagingPredicate 문제가 발생했습니다. 전체 컬렉션에서 IMap에 정렬되지 않은 경우 PagingPredicate를 적용하면

나는 생성자 아래 사용

PagingPredicate pagingPredicate = new PagingPredicate(predicate, comparator, 100); 
Collection<Map<String, Object>> pagingResults = data.values(pagingPredicate); 

캐시에 데이터가 거의 90000 기록이다. 전체 정렬 된 컬렉션에서 처음 100 개의 레코드가 필요하지만 IMap의 첫 100 레코드 정렬을 적용합니다

이 문제를 해결할 수 있습니까?

hazelcast 버전 - 3.7.3

답변

2

PagingPredicate는 내부적으로 모든 레코드를 정렬합니다. Hazelcast는 레코드를 분할 된 상태로 유지합니다. 정렬은 각 파티션에서 일어나며 상위 100 개 레코드가 선택됩니다. 따라서 271 (기본) 파티션의 경우 27100 개의 레코드를 로컬에 갖게됩니다. 이러한 레코드는 병합되고 다시 정렬되며 그 결과 상위 100 개의 레코드가 반환됩니다.

예를 들어 1-90000 개의 레코드가있는 경우 paging-predicate는 pagingSize = 100에 대해 1-100을 반환해야합니다.

+0

답장을 보내 주셔서 감사합니다. Ali. 단일 노드에서 실행 중이며 IMap은 거의 90000 개의 레코드를 보유하고 있습니다. 큰 pageSize로 PagingPredicate를 사용할 때 결과는 페이지 매김 지원으로 정렬됩니다. 그러나 pageSize가 100 또는 200으로 주어지고 첫 번째 페이지 (ZERO)를 얻으려고 시도하면 적절한 결과를 제공하지 못했습니다. – Nalin

+0

테스트는 https://gist.github.com/gurbuzali/09129fe9878199254344d55e1360baa2입니다. – ali