2017-03-17 141 views
0

PagingPredicate应用于IMap不排序整个集合。它只对给定的pageSize进行排序。但我希望首先对集合进行排序,然后应用分页并提供结果。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

感谢您的回复阿里。 我在单个节点上运行,IMap拥有近90000条记录。当我使用PagingPredicate和更大的pageSize时,结果是按分页支持排序的。但是,当pageSize为100或200并尝试获取第一页(ZERO)时,它不会提供正确的结果。 – Nalin

+0

这里是一个测试https://gist.github.com/gurbuzali/09129fe9878199254344d55e1360baa2 – ali