Grails/Gorm Default Fetch 전략 : FetchMode를 "Eager"로 설정하는시기? (열성 대 게으른)
문제
도메인 클래스에서 FetchMode를 "Eager"로 설정할시기에 대한 일반적인 지침은 무엇입니까? FetchMode의 장단점 "Eager"대 기본 "Lazy"?
"eager"(fetchmode = eger)를 사용하는시기를 보여주는 몇 가지 구체적인 예/사용 사례를 포함 시키십시오 (FetchMode = Lazy).
해결책
기본적으로 게으른 하중은 열렬한 대안 (성능, 자원 사용)보다 더 많은 이점이 있습니다. 그것은 모든 관계에 대한 기본 성배 설정 (Grails 1.1 이후)이므로 특정 문제를 경험하지 않는 한 일반적으로 열망하는 페치를 위해 구성해서는 안됩니다. 와 같은:
- 도메인 인스턴스 공유 다른 최대 절전 모드 세션 (예 : 도메인 클래스 인스턴스를 HTTP 세션 범위에 넣고 사용자와 같은 속성에 액세스 할 때)
- 레이아웃/뷰에서 도메인 클래스 인스턴스에 액세스 할 때 LazyInitializationException 얻기
- 확실한 경우, 인스턴스를 가져 오면 매번 특정 관계 속성에 액세스 할 수 있습니다. 인스턴스가 가져 오면 열망하는 페치를 위해이 관계를 구성하는 것이 합리적입니다.
열망하는 페치는 거대한 데이터베이스를 처리 할 때 상당히 위험 할 수 있습니다. 다음과 같은 도메인 클래스를 상상해보십시오.
// really bad example
class TreeNode {
String name
TreeNode parent
static hasMany = [ childNodes: TreeNode ]
static mapping {
parent lazy: false
childNodes lazy: false
}
}
Treenode 인스턴스를 읽으면 데이터베이스에서 도메인 클래스의 다른 모든 인스턴스를 메모리로 자동으로 가져옵니다. 인스턴스가 충분하면 1 인스턴스 만 가져와서 응용 프로그램을 죽일 것입니다.
제휴하지 않습니다 StackOverflow