Hibernate + Spring을 사용한 캐싱-몇 가지 질문
저는 Spring 3과 Hibernate 3.6으로 웹 애플리케이션을 개발하고 있습니다. 현재 저는 Spring과 Hibernate를 사용한 캐싱이 어떻게 작동하는지 이해하려고 노력합니다. Hibernate를 사용한 캐싱에 대한 소스와 Spring에 대한 소스를 찾았으며 지금 내 정보를 통합하려고합니다. 나는 여전히 두 프레임 워크에 대해 몇 가지 질문을 받았으며 누군가가 그들에게 대답하거나 여기에 나열된 사실이 올바른지 말해 줄 수 있다면 기쁠 것입니다.
대부분의 경우 짧은 답변 (예 / 아니오)이면 충분합니다. 이 목록은 스프링과 최대 절전 모드를 사용한 캐싱이 어떻게 작동하는지 이해하려는 다른 사람들에게도 유용 할 수 있다고 생각합니다.
General
1) Hibernate는 1st Level Cache, 2nd Level Cache, Query Cache를 지원합니다.
2) Spring 자체는 다음과 같은 캐싱 가능성을 지원합니다 : 단지 메소드 캐싱
1st Level Cache
3) 1st Level Cache는 EVERY Hibernate 애플리케이션의 일부입니다.
4) 모든 최대 절전 세션에 대해 1 차 레벨 캐시가 생성됩니다.
5) 1 단계 캐시에는 무엇이 저장됩니까? 객체 또는 속성 값? 쿼리 및 결과?
2nd Level Cache
6) 발견했습니다 : 2 차 레벨 캐시는 애플리케이션 당 한 번만 사용됩니다. 그것은 거짓이 아닙니까? 그것은 당 한 번 사용되지 SessionFactory
않습니까? 및 : 다중 세션 팩토리 = 다중 2 차 레벨 캐시 가능?
7) 2 단계 캐시에 저장되는 것 : 제 생각에는 객체 자체가 아니라 하나의 레코드에 속하는 값입니다.
8) 두 번째 레벨 캐시에 한 레코드의 값을 저장할 때 관련 값 (외래 키를 통해 연결된 개체에서)도 함께 저장할 수 있습니까?
9) 2 차 캐시에서 한 개체의 값을 업데이트 할 때 캐시에서 연결된 개체의 값도 업데이트 할 수 있습니까?
10) 객체의 값이 변경 될 때 2 차 캐시를 어떻게 업데이트 할 수 있습니까? 플러시? 캐시의 일부만 업데이트 할 수 있습니까? 아니면 전체 캐시를 업데이트해야합니까?
11) 두 번째 레벨 캐시는 어디에서 의미가 있으며 어디에서 그렇지 않습니까?
12) 캐시 모드 : 각 캐시 모드는 다른 캐싱 전략을 제공합니까? 예를 들어 "읽기 전용"캐시 모드에서는 데이터베이스와 캐시의 동기화가 필요하지 않습니다. 다른 캐시 모드가 동기화를 제공합니까? 개발자가 직접 동기화해야한다고 생각 했나요?
Query Cache
13) Query Cache와 2nd Level Cache의 차이점은 무엇입니까? 내 의견으로는 쿼리 캐시에 결과 세트가 저장되지만 값이 아니라 ID만으로 저장됩니다. 쿼리가 다시 사용되고 결과 집합이 여전히 "올바른"경우 ID에 속하는 값이 2 단계 캐시에서 쿼리됩니다.
14) 쿼리 캐시의 경우 2 단계 캐시를 사용해야합니까?
15) 쿼리 캐시는 어디에서 의미가 있고 어디에서 그렇지 않습니까?
Spring
16) Spring은 메소드 캐싱보다 더 많은 캐싱 가능성을 제공합니까?
17) 메서드 캐싱은 최대 절전 모드 캐싱과 연결되지 않습니다.
18) 그러나 : 메소드 캐싱의 경우 Ehcache와 같은 두 번째 수준이 필요합니다 (최대 절전 모드에서도 사용할 수 있음).
19) 데이터베이스 쿼리없이 메서드 캐싱을 사용할 수 있습니까?
Getting mixed up
20) 2nd 레벨 캐시로 최대 절전 모드에 ehcache를 사용하고 메소드 캐싱을 위해 스프링에 Ehcache를 사용하는 경우 동일한 Ehcache-instance를 사용할 수 있습니까? 무언가가 뒤섞 일 가능성이 있습니까?
21) 1 단계 캐시와 2 단계 캐시를 사용할 때 혼동 될 수 있습니까? 데이터베이스를 쿼리 할 때 결과는 첫 번째 또는 두 번째 수준 캐시에서 어디에서 나옵니까? 1 단계 캐시는 2 단계 캐시와 작동합니까?
22) 내가 언급 한 캐시를 사용하여 혼동 될 수있는 다른 것이 있습니까? :-)
어떤 질문이든 답변 해 주셔서 감사합니다! :-)
Hibernate는 다음 캐시를 지원합니다 : 1st Level Cache, 2nd Level Cache, Query Cache
예.
Spring 자체는 다음과 같은 캐싱 가능성을 지원합니다. just Method Caching
Spring 3.1은 메소드 주위의 주석을 기반으로하는 새로운 캐싱 추상화를 도입합니다.
첫 번째 레벨 캐시는 모든 Hibernate 애플리케이션의 일부입니다.
예.
모든 최대 절전 세션에 대해 1 단계 캐시가 생성됩니다.
예, 언제든지 수동으로 지울 수 있습니다.
1 단계 캐시에 무엇이 저장됩니까? 개체 또는 속성의 값? 쿼리 및 결과?
세션이 진행되는 동안 가져온 모든 객체의 맵으로 동일한 객체를 id로 두 번째로로드하면 L1에서로드됩니다.
두 번째 레벨 캐시는 애플리케이션 당 한 번만 사용된다는 것을 알아 냈습니다. 그것은 거짓이 아닙니까? 세션 팩토리 당 한 번 사용되지 않습니까? 및 : 다중 세션 팩토리 = 다중 2 차 레벨 캐시 가능?
일반적으로 애플리케이션 (데이터베이스) 당 하나의 세션 팩토리 만 있으므로 바로 가기가 맞습니다.
2 단계 캐시에 저장되는 것 : 제 생각에는 개체 자체가 아니라 하나의 레코드에 속한 값만 있습니다.
L1과 동일하지만 더 오래 산다. L2는 일반적으로 일부 강력한 캐시에 의해 지원되는 반면 L1은 단지 맵일뿐입니다 (스레드로부터 안전 할 필요도 없음). 지연로드 된 관계를 포함하여 전체 엔터티를 저장합니다.
두 번째 레벨 캐시에 한 레코드의 값을 저장할 때 관련 값 (외래 키를 통해 연결된 개체에서)도 함께 저장할 수 있습니까?
L2를 수동으로 관리하지 않고 자동으로 수행됩니다.
when updating the values of one object in the 2nd level cache, its possible to update the values of objects connected with it in the cache too?
See above.
when values of an object are changing, how can I update the 2nd level cache? flush? can I just update a part of the cache or must the whole cache be updated?
See above - Hibernate will figure this out for you. You never interact with L2 directly.
where does the 2nd level cache make sense and where doesnt it?
Measure. In application that read a lot of data by primary key and read-to-write factor is very high, L2 has a significant impact on your performance.
the Cache Mode: does each cache mode provide a different strategy of caching? for example with cache mode "read only" no synchronization of database and cache is ever necessary? do other cache modes provide synchronization? I thought synchronization must be done by the developer himself?
Cache mode helps Hibernate to choose best strategy for caching and invalidating. For instance if cache is read only, Hibernate won't bother invalidating it (or it won't do this that often). But read only cache (read only entity) will of course forbid any updates.
what is the difference between the Query Cache and the 2nd Level Cache? in my opinion: in the Query Cache result sets are saved, but not with their values, just with their ids. when the query is used again and the result set is still "correct", the values belonging to the ids are queried from the 2nd Level Cache.
Exactly, but this is a very broad topic. Especially the result set is still "correct" part.
For the Query Cache a 2nd Level Cache MUST be used?
Yes, without the L2 cache, the query cache has no sense and will slow down the application dramatically.
where does the Query Cache make sense and where doesnt it?
Hard question, typically when you are executing the same query a lot of times and the universe of query parameters is low (for each set of query parameters new query cache is created with all ids of records being the results).
Does Spring provide more Caching possibilities than method caching?
No, Spring is more-or-less just a glue for your own code.
method caching is not linked to hibernate caching.
Spring is not linked to Hibernate, so...
but: for method caching a 2nd level is necessary, like ehcache (which can be used by hibernate too)
L2 is Hibernate concept. If you want to cache methods, you need some underlying cache. Let it be EhCache, never mind. of course it must be thread-safe.
can method caching be used without database queries?
Spring has nothing to do with Hibernate. You may cache computations that have nothing to do with database.
if using ehcache for hibernate as 2nd level cache and ehcache for spring for method caching, can I use the same ehcache-instance? is there a chance that something gets mixed up?
You may use the same CacheManager
and cache configuration as Hibernate to ease deployment. As long as cache names do not overlap, they are completely independent, even thought working within the same manager.
when using 1st level cache and 2nd level cache, can they get mixed up? when querying the database, where does the result then come from, the 1st or 2nd level cache? does the 1st level cache work with the 2nd level cache?
They just work, as long as some abstraction does not leak :-). When you query by primary key, first L1 is examined (it is faster), then L2.
anything else that can get mixed up by using the caches I mentioned? :-)
See above, abstractions tend to leak. But the worst problems come when you change the database and Hibernate does not know about it. Also clustering without proper replication will cause you a headache. And the biggest problem - very often incorrect caching actually slows down the application (query cache is the most dangerous here).
Regarding Spring and second level cache there are cool Open source project that can hel spring to work with 2L cache:
For example: http://code.google.com/p/ehcache-spring-annotations/
We are using it on production environment and it makes our live much easier.
참고URL : https://stackoverflow.com/questions/5405417/caching-with-hibernate-spring-some-questions
'code' 카테고리의 다른 글
진행중인 git rebase가 있는지 확인하는 방법은 무엇입니까? (0) | 2020.11.25 |
---|---|
"UTF-8 인코딩에 매핑 할 수없는 문자"오류 (0) | 2020.11.25 |
NLTK에서 구문 분석을위한 영어 문법 (0) | 2020.11.25 |
CSS 선택기에서 / deep / 및 :: shadow는 무엇을 의미합니까? (0) | 2020.11.25 |
여러 SQLite 데이터베이스를 병합하려면 어떻게해야합니까? (0) | 2020.11.25 |