나는 blob 이미지를 저장하는 열과 함께 다소 큰 mysql 데이터베이스 (수백만 행)로 작업하고있다. 응용 프로그램은 이미지의 하위 집합을 가져오고 일부 처리 알고리즘을 실행합니다. 내가 가지고있는 문제는 내가 가지고있는 다소 큰 데이터 세트로 인해 내 쿼리가 반환하는 데이터 집합이 너무 커서 메모리에 저장할 수 없다는 것입니다.거대한 SQL 결과 다루기
당분간 이미지를 반환하지 않도록 쿼리를 변경했습니다. 결과 세트를 반복하면서 현재 레코드와 관련된 개별 이미지를 가져 오는 다른 select를 실행합니다. 이 방법은 효과가 있지만 수만 건의 추가 쿼리로 인해 성능이 저하 될 수 있습니다.
내 생각은 원래 쿼리를 10,000 개 결과로 제한 한 다음 10,000 개의 행을 걸쳐 쿼리를 계속 수행하는 것입니다. 이것은 두 접근법 사이의 도로 타협의 중간처럼 보입니다. 아마 내가 잘 모르는 더 나은 해결책이 있다고 생각합니다. 한 번에 거대한 결과 집합의 일부만을 메모리에 저장하는 또 다른 방법이 있습니까?
건배,
데이브 맥클 랜드
아마 내 메모리 문제가 쿼리에 의해 발생하지 않습니다. 나는 오래된 버전 (감사, 버전 관리)으로 되돌아 갔고, 데이터 웨어레이터는 Anthony가 언급 한 것처럼 현재 읽고있는 행만로드하는 것으로 보입니다. DB 서버에서 네트워크를 통해 이미지를 전송하는 대신 로컬 파일 시스템에 이미지를 보관하는 것이 더 좋지 않은지 궁금합니다 (아래 ProphetBeal에서 언급했듯이). 단점은 두 위치 모두에 저장된다는 것입니다 (다른 시스템을 사용하기 위해서는 DB에 있어야합니다). 그러나 파일 시스템 저장 공간은 즉각적인 문제가 아닙니다. 이것에 대한 의견이 있으십니까? –
Anthony는 DataReader가 내 메모리가 가득 채워진 이유가 아니라고 지적했기 때문에 Anthony에 대한 답을 제공합니다 (관련이 있지만 약간 다릅니다). ProphetBeal의 로컬 컴퓨터에서 BLOB를 유지하여 네트워크 정체를 제거하는 솔루션을 사용할 가능성이 있지만 로컬 컴퓨터에 저장할 데이터 세트를 다루는 모든 사람은 DataReader가 효과적인 솔루션이어야합니다. –