2017-03-17 11 views
0

IMAPに適用すると、PagingPredicateが完全なコレクションでソートされません。指定された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レコードを保持しています。より大きなpageSizeでPagingPredicateを使用すると、結果はページネーションサポートでソートされます。しかし、pageSizeが100または200として与えられ、最初のページ(ゼロ)を取得しようとすると、適切な結果が得られませんでした。 – Nalin

+0

はhttps://gist.github.com/gurbuzali/09129fe9878199254344d55e1360baa2のテストです – ali

関連する問題