Hibernate의 제한된 ScrollableResults로 9천만 개의 레코드 스트리밍
이름에도 불구하고 Hibernate의 ScrollableResults는 대규모 결과 세트를 효율적으로 처리하는 데 적합하지 않습니다. 사용자가 발견한 바와 같이, 9천만 개의 레코드와 함께 이를 사용하려고 하면 드라이버가 전체 결과 세트를 메모리에 로드하기 때문에 OutOfMemoryError가 발생합니다.
대안인 setFirstResult 및 setMaxResults도 대규모 데이터 세트에는 실용적이지 않습니다. 더 높은 오프셋에 도달하는 데 걸리는 시간.
한 가지 해결책은 SQL 쿼리를 사용하여 수동으로 레코드를 검색하는 것입니다. 기본 키에 대한 조건을 지정하고 반환되는 레코드 수를 제한함으로써 메모리 과부하 없이 데이터 청크를 스트리밍할 수 있습니다.
또 다른 접근 방식은 setFirstResult/setMaxResults 전략을 수정하는 것입니다. 오프셋을 점진적으로 늘리는 대신 이전 배치의 최대 기본 키 값을 사용하여 다음 배치를 검색할 수 있습니다. 이 방법은 테이블이 기본 키에 의해 정렬되고 추가 조건이 마지막 인덱스 열로 제한된 동등 비교를 사용하는 경우 특히 효과적입니다.
이러한 전략을 따르면 Hibernate의 ScrollableResults의 한계를 해결하고 효율적으로 처리할 수 있습니다. 스트리밍 방식의 대규모 데이터세트.
위 내용은 OutOfMemoryError를 피하면서 Hibernate를 사용하여 9천만 개의 레코드를 효율적으로 스트리밍하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!