우선 시나리오에 대해 간단히 설명해 드리겠습니다. 데이터베이스는 Sybase입니다. 몇 가지 2-3k 저장 프로 시저가 있습니다. 저장 프로시 저는 거대한 데이터 (약 백만 건의 레코드)를 반환 할 수 있습니다. 필요한 프로 시저를 호출하고 xml 형식으로 클라이언트에 다시 데이터를 플러시하는 서비스 (servlet/spring controller)가 있습니다.자바에서 거대한 데이터 필터링/정렬
필터링 (여러 개의 열 & 여러 조건)/정렬 (일부 동적 조건에 따라) 필터링이 필요합니다.
데이터가 거대하기 때문에 모든 필터링/정렬 메모리를 수행하는 것이 좋지 않습니다. 나는 아래 옵션들을 생각 해왔다.
옵션 1 : 일단 ResultSet 객체를 얻으면 일부 X 번호를 읽습니다. 레코드를 필터링하고, 일부 파일에 저장하고, 모든 데이터가 읽힐 때까지이 프로세스를 반복하십시오. 그런 다음 파일을 읽고 클라이언트로 데이터를 플러시하십시오.
필터링/정렬이 빠르도록 파일의 데이터를 정렬하고 파일에 개체를 저장하는 방법을 알아야합니다.
옵션 2 : 데이터를 가져와 일부 자바 API에 대한 이봐, 그것을이 주어진 기준에 따라 & 종류의 필터와 스트림
옵션 3으로 다시 반환 사용에 hsqldb, h2database와 같은 메모리 데이터베이스 - 그러나 이것은 도움이 아니라 오버 헤드가 될 것이라고 생각합니다. 데이터를 먼저 삽입 한 다음 데이터를 쿼리해야하는데이 작업도 파일 시스템을 사용합니다.
참고 저장 프로 시저를 수정하지 않으므로 데이터베이스에서 필터링/정렬 옵션을 사용할 수 없거나 옵션이없는 경우 마지막 옵션이 될 수 있습니다.
또한 도움이된다면 ResultSet에서 읽은 모든 레코드를 키 이름으로 키에 저장하고이 맵은 필터링 & 정렬을 적용한 List에 저장됩니다.
메모리 풋 프린트, 확장 가능, 성능 현명한 또는이 시나리오에 적합한 다른 옵션에는 어떤 옵션이 좋을 것이라고 생각하십니까?
감사합니다.
저장 프로 시저를 수정하거나 새로 추가하여 임시 테이블에 결과를 저장 한 다음 임시 테이블의 하위 목록을 반환하십시오. – artbristol
이 필터링 및 정렬과 같은 소리는 데이터베이스의 책임입니다. 데이터를 전송하기 전에 왜 그렇게하지 않습니까? 결국 데이터베이스가 좋은 것입니다. 우리 나라에서 말한 것처럼 : 당신이 삶은 물을 다시 발명하려고 노력하는 것 같습니다. –