2016-07-18 3 views
0

Apache Ignite Cache에서 데이터를 가져 와서 JSP로 표시해야합니다. 데이터 크기가 백만 개이므로 Server 쪽 페이지 매김을 설정해야합니다. 아파치 Ignite 워드 프로세서는 기본적으로 1024 페이지를 쿼리하기 위해 pageSize를 설정하는 것을 제외하고는 페이지 매김에 대해별로 말하지 않습니다. 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; 
    } 

감사

의 Ignite

답변

0

는 페이지 매김에 대한 이러한 지원을 제공하지 않습니다. Ignite의 페이지 매김은 서버 노드에서 클라이언트로 전체 데이터 집합을 가져 오는 것을 피하는 메커니즘 일뿐입니다. 즉, QueryCursor을 반복하는 동안 클라이언트는 데이터를 청크로 가져옵니다. 각 청크의 크기는 pageSize 속성으로 정의됩니다.

JSP 페이지에 데이터를 표시 할 수 있지만 다음 페이지로 이동하면 QueryCursor을 사용하여 되돌릴 수 없음을 의미합니다. 그러나 결과 집합이 매우 크지 않을 것으로 예상되는 경우 QueryCursor.getAll() 메서드를 호출하여 모든 행을 가져 와서 응용 프로그램 수준에서 페이지 매김을 처리하여 결과를 웹 세션 또는 다른 곳에 저장합니다.

+0

감사합니다. 위의 코드에서 볼 수 있듯이 pageSize를 시도했다. 그러나 그것은 효과가 없습니다. 술어와 일치하는 레코드가 20인데 pageSize를 10으로 설정했지만, 여전히 10 대신 20 레코드가 남았습니다. 내 생각에 페이지 크기를 추가하고 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); 

}