2017-03-17 5 views
0

PagingPredicate lorsqu'il est appliqué sur IMap ne pas trier sur la collection complète. C'est seulement le tri pour le pageSize donné. Mais je veux que la collection soit triée d'abord et ensuite appliquer la pagination et fournir le résultat.PagingPréparer des problèmes avec comparateur

J'utilise ci-dessous constructeur:

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

Les données qui sont dans le cache est presque 90000 enregistrements. J'ai besoin des 100 premiers enregistrements de la collection complète triée mais il applique le tri sur les 100 premiers enregistrements dans IMap

S'il vous plaît, pouvez-vous aider à résoudre ce problème?

version Hazelcast - 3.7.3

Répondre

2

PagingPredicate trie interne tous les enregistrements. Hazelcast garde les enregistrements partitionnés. Le tri s'effectue sur chaque partition et les 100 premiers enregistrements sont sélectionnés. Donc, pour 271 (par défaut) partition, vous aurez 27100 enregistrements sur votre local. Ces enregistrements seront fusionnés et triés à nouveau, et les 100 premiers enregistrements qui en résulteront seront renvoyés.

Par exemple, si vous avez des enregistrements 1-90000, paging-predicate doit renvoyer 1-100 pour pagingSize = 100.

+0

Merci pour votre réponse Ali. Je cours sur un seul noeud et l'IMap détient près de 90000 enregistrements. Lorsque j'utilise PagingPredicate avec une pageSize supérieure, les résultats ont été triés avec le support de pagination. Mais quand pageSize donné 100 ou 200 et essayez d'obtenir la 1ère page (ZERO) alors il ne fournissait pas de bons résultats. – Nalin

+0

voici un test https://gist.github.com/gurbuzali/09129fe9878199254344d55e1360baa2 – ali