2016-07-18 10 views
0

Apache Ignite Cacheからデータを取得し、JSPで表示する必要があります。データサイズは100万であるので、サーバー側のページ設定を設定する必要があります。 Apache Igniteのドキュメントでは、pageSizeを設定する以外は、デフォルトで1024に設定されています。startIndexとendIndexを渡すにはどうすればいいですか。基本的に、データベースでページネーションを実装するときに渡すパラメータです。 たとえば、以下のサンプルコードでクエリキャッシュを使用していますが、特定のパラメータを渡すことでページネーションを適用できますか?Apache Igniteのページ設定機能

public Set<String> getData(int pageSize){ 
     Ignite ignite = Ignition.start("examples/config/example-ignite.xml"); 
     CacheConfiguration<Integer, String> config = new CacheConfiguration<>("mycache"); 
     config.setBackups(1); 
     IgniteCache<Integer, String> cache = ignite.getOrCreateCache(config); 
     long dataSize = 30; 
     for (int i = 1; i < dataSize; i++) { 
      cache.put(i, String.valueOf(i)); 
     } 

     ScanQuery<Integer, String> query = new ScanQuery<>((Integer e1, String e2) ->e1>10); 
     Set<String> res = cache.query(query.setPageSize(pageSize)).getAll().stream().map(Cache.Entry::getValue).collect(toSet()); 
     System.out.println(res); 
     return res; 
    } 

おかげ

答えて

0

のIgniteは、ページネーションのために、このようなサポートを提供していません。 Igniteのページネーションは、サーバノードからクライアントへのデータセット全体を取得することを避けるための単なるメカニズムに過ぎません。つまり、QueryCursorを繰り返し実行している間、クライアントはデータをチャンクで取得します。各チャンクのサイズは、pageSizeプロパティによって定義されます。

このように言えば、JSPページのデータをページに表示できますが、次のページに移動するとQueryCursorを使用して戻ることはできません。ただし、結果セットが非常に大きくなることが予想されない場合は、QueryCursor.getAll()メソッドを呼び出してすべての行を取得し、アプリケーションレベルでページネーションを処理し、結果をWebセッションまたは他の場所に保存できます。

+0

返信いただきありがとうございます。上記のコードでわかるように、私はpageSizeを試してみました。しかし、それは動作しません。私はpageSizeを10に設定しますが、predicateに一致するレコードは20ではなく、10の代わりに20レコードを取得します。 私のアプローチはpagesSizeを追加し、skip()メソッドを使用してページネーションを達成することでした。 pageSizeが設定されているかどうかにかかわらず、なぜすべてのレコードを返すのか。 ? – Surinder

0

Igniteはページ機能を提供していますが、私は2.3バージョンでテストしました。私は春のブートを使用しています。

http://localhost:8086/test/getOne1?page=2&size=5&city=bgr

コントローラー:

@GetMapping("/getOne1") 
    public Test getOneTest(String city, Pageable pageable) { 

     return testService.getOneTest(city, pageable); 
    } 

サービス:

Test getOneTest(String city, Pageable pageable); 

サービスのImpl:

次のコード

休憩REQをチェック

レポ:

@RepositoryConfig(cacheName = "test") 
public interface TestRepo extends IgniteRepository<Test, Integer>{ 


    @Query("SELECT subscribers FROM test where city = ?") 
    List<Integer> selectAll(String city, Pageable pageable); 

} 
関連する問題