2012-02-09 1 views
1

메모리를 사용하지 않고 데이터베이스에 데이터를 저장할 수 있으므로 주로 응용 프로그램의 메모리 소비를 줄이기 위해 최대 절전 모드를 사용합니다. 본질적으로 디렉토리에서로드 된 음악 파일을 나타내는 하나의 주요 엔티티 Song이 있지만 데이터베이스에 노래를 추가 한 후 (hibernate 사용) 가장 먼저 수행자의 파이프 라인에 추가하여 추가 처리를 수행하므로 각 노래를 나타내는 객체는 여전히 메모리에 남아 있으며 노래가 처리 될 때까지 남아 있으므로 많은 메모리가 절약되지 않습니다.Hibernate를 가진 2nd Level Cache는 메모리 사용량을 줄이거 나 데이터베이스 접근 만 줄입니까?

첫 번째 생각은 pipleline에 추가 할 때 노래의 ID를 저장하고 처리해야 할 때만 실제 엔티티를 가져 오는 것이 었습니다. 그러나이 방법은 최대 절전 모드보다 오히려 반대되는 것으로 보입니다.

대신 디스크 캐시를 사용하도록 구성된 최대 절전 모드 Ehcache를 사용했는지는 내가 사용하는 인스턴스가 많은 메모리를 사용하지 않거나 이전에 참조로 사용했을 때 많은 메모리를 사용한다는 것을 의미하는지 궁금해했다. 내 응용 프로그램에서 그들에게.

답변

0

엔티티에 대한 참조가있는 경우 참조가 지연로드 된 프록시에 대한 참조가 아닌 한 분명히 객체가 메모리에 있습니다.

EHCache는 데이터베이스에 너무 자주 가지 않도록하고 메모리 또는 디스크 캐시에서 엔티티를 가져 오는 데 사용됩니다. 그것을 사용하면 메모리를 늘리고 줄이지는 않습니다.

+0

좋아요. 게으른 로딩은 메모리가 아닌 db 호출을 다시 작성하기 위해 비슷하게 고안되었습니다. 즉, 게으른 로딩을 선택하는 경우에도 최소한 한 번 더 검색하면 다시 놓을 수 없습니다. –

+1

아니요. 지연로드 아직로드 할 필요가없는 내용을로드하는 것을 피하면서,로드를 참조 할 수있게하는 데 사용됩니다. 나는 당신의 경우에 프록시를 사용하는 것이 해결책이 될 것이라고 생각하지 않는다. 파이프 라인에 ID를 저장하는 것은 나에게 완벽하게 보인다. 두 번째 문장을 이해하지 못합니다. –

+0

나는 게으른로드 곡 1에 해당 노래의 ID 만 포함하면 (또는 이드와 노래 표에 포함 된 모든 간단한 필드 일 수도있다) 다시 시도해 보겠습니다. 그런 다음 커버 아트와 같은 두 번째 테이블에 대한 SQL 호출이 필요한 필드를 사용해야하는 경우 해당 커버 아트 이미지를 엔터티에 추가 한 다음이 엔터티는 더 이상 참조가 없을 때까지 해당 데이터를 메모리에 보유합니다 , 커버 아트 이미지가 포함되지 않은 엔티티 버전으로 되돌아 가지 않습니다. –

관련 문제