Java에서 CachedRowSetImpl 클래스를 사용하는 데 어려움이 있습니다. ~ 35,000,000 줄과 3 개의 정수 열을 포함하는 거대한 postgres 테이블의 데이터를 분석하려고합니다.Java 클래스 CachedRowSetImpl의 이상한 동작
나는 모든 것을 내 컴퓨터의 실제 메모리에로드 할 수 없다. 그런 다음 100000 라인의 배치 당이 라인을 읽고 싶다. psql 프롬프트 나 pgadmin과 같은 그래픽 인터페이스에서 해당 쿼리 (테이블 한도 10000에서 col1, col2, col3 선택)를 실행하면 100000 라인과 몇 메가 바이트의 메모리를로드하는 데 약 4000ms가 걸립니다.
나는 다음과 같은 자바 코드와 동일한 작업을 수행하려고 :
이CachedRowSet rowset = new CachedRowSetImpl();
int pageSize=1000000;
rowset.setCommand("select pk_lib_scaf_a,pk_lib_scaf_b,similarity_evalue from from_to_scaf");
rowset.setPageSize(pageSize);
rowset.setReadOnly(true);
rowset.setFetchSize(pageSize);
rowset.setFetchDirection(ResultSet.FETCH_FORWARD);
rowset.execute(myConnection);
System.out.println("start !");
while (rowset.nextPage()) {
while (rowset.next()) {
//treatment of current data page
} // End of inner while
rowset.release();
}
위의 코드를 실행, "시작!" 메시지가 콘솔에 표시되지 않으며 rowset.execute() 행에 실행이 멈춘 것 같습니다. 또한, 메모리 소비가 미쳐서 내 컴퓨터 실제 메모리 (8GB)의 한계에 도달합니다.
이상하게 들리지만, 프로그램이 pageSize 구성을 고려하지 않고 행 세트를 ~ 35,000,000 줄로 채우는 것처럼 보입니다.
누구나 java JDBC 및 postgres 드라이버와 같은 문제가 있습니까? 나는 무엇을 놓치나요?
POSTGRES 9.1 CachedRowSet
자바 독 (강조 내)에서 자바 JDK 1.7
감사합니다. 점진적 커서를 사용해 주셔서 감사합니다. 하지만 기본 jdbc jdk에는 이러한 사례를 처리 할 수있는 것이 없습니까?내 검색이 실패했지만 일상적인 사용 사례처럼 보입니다. 어쨌든 감사합니다. – user2346654