2017-03-17 138 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