Hibernate 용 L2 분산 캐시로 Hazelcast를 성공적으로 사용하고 있습니다. 쿼리 캐시가 분산되지 않는 것 같습니다. '최대 절전 쿼리 캐시'에 분산 캐시를 사용할 수 있습니까? 또는 '쿼리 캐시'도 배포되도록 구성이 누락 되었습니까? Hazelcast 3.2.6과 Grails 2.2.3 사용하기.Hibernate에서 분산 쿼리 캐시를 갖는 방법은 무엇입니까?
답변
"주의 : QueryCache는 노드에 항상 로컬이며 위험 캐스트 클러스터에 배포되지 않습니다."는 hazelcast 설명서에서 제공됩니다. 어쩌면 HazelcastLocalCacheRegionFactory를 Hibernate regionFactory config에 사용하여 로컬 노드에 데이터를 저장하고 엔트리가 로컬로 업데이트/삭제 될 때 무효 메시지를 보내는 경우 일 수 있습니다. RegionCache를 구현 DistributeQueryCacheHazelcastFactory 만들기 - 여기
는 hazelcast 문서 http://docs.hazelcast.org/docs/3.4/manual/pdf/hazelcast-documentation-3.4.pdf 177 페이지최대 절전 모드로 QueryCache가 항상 로컬인지 확인합니까? – Champ
내가 솔루션을 테스트하고있어하지만 분명히 작동 ...
1입니다.
2 -이 클래스 안에 HazelcastCacheRegionFactory + AbstractHazelcastCacheRegionFactory의 내용을 넣으십시오 (buildQueryResultsRegion이 최종로 표시되어 있기 때문에이 작업을 수행해야합니다).
3 - AbstractTransactionDataRegion (작성해야 함)을 확장하고 QueryResultsRegion을 구현하는 DistributedQueryCacheDataRegion 클래스를 리턴하려면 buildQueryResultsRegion을 구현하십시오.
4 - "hibernate.cache.region.factory_class"등록 정보를 작성한 DistributeQueryCacheHazelcastFactory로 변경하십시오.
5 - 분산 캐시에 쿼리를 캐시하려면
query.unwrap (org.hibernate.Query.class) .setCacheable (TRUE); query.unwrap (org.hibernate.Query.class) .setCacheRegion ("cacheName")
캐시 영역이 Hazelcast에서이 쿼리에 대해 만든 맵의 이름이됩니다 캐시를 배포했습니다.
각 쿼리 캐시의 크기에주의하십시오.
즐기십시오!
@ Luís Otávio Braga가 제안한 것처럼, 나는 hazelcast를 사용하여 최대 절전 쿼리 캐시를 배포하기위한 솔루션을 구현했습니다. 답을 완료하기 몇 가지 차이와 더 많은 정보가 있습니다 : 나는 내 자신의 파일에 AbstractHazelcastCacheRegionFactory 복사, 그냥 마지막으로하지의 buildQueryResultsRegion() 방법을 변경
- 은. 이것은 내가 (상대적으로) 미래의 업그레이드를 쉽게 할 수있게 해준다. 단 하나의 변화가 유일한 방법의 수정 자 하나라는 것을 알기 때문이다.
DistributedQueryCacheDataRegion는 QueryResultsRegion을 구현하지만
AbstractGeneralRegion<IMapRegionCache>
에게 buildQueryResultsRegion() 메소드의 구현된다 연장 :
@Override public QueryResultsRegion buildQueryResultsRegion(String regionName, Properties properties) throws CacheException { return new DistributedQueryCacheDataRegion(instance, regionName, properties, new IMapRegionCache(regionName, instance, properties, null)); }
그래서 전체 코드는 :
AbstractHazelcastCacheRegionFactory 최대 절전 모드와 동일, 최종 설정 만 buildQueryResultsRegion().
DistributeQueryCacheHazelcastFactory :
/**
* Similar to com.hazelcast.hibernate.HazelcastCacheRegionFactory, only differences:
* 1. Extends our own implementation of AbstractHazelcastCacheRegionFactory.
* 2. Override buildQueryResultsRegion() to return DistributedQueryCacheDataRegion (that's why we needed our own
* implementation of AbstractHazelcastCacheRegionFactory to be able to override).
*
*/
public class DistributeQueryCacheHazelcastFactory extends AbstractHazelcastCacheRegionFactory {
private static final long serialVersionUID = 1L;
public DistributeQueryCacheHazelcastFactory() {
super();
}
public DistributeQueryCacheHazelcastFactory(final HazelcastInstance instance) {
super(instance);
}
public DistributeQueryCacheHazelcastFactory(final Properties properties) {
super(properties);
}
@Override
public QueryResultsRegion buildQueryResultsRegion(String regionName, Properties properties) throws CacheException {
return new DistributedQueryCacheDataRegion(instance, regionName, properties, new IMapRegionCache(regionName,
instance, properties, null));
}
@Override
public CollectionRegion buildCollectionRegion(final String regionName, final Properties properties,
final CacheDataDescription metadata) throws CacheException {
return new HazelcastCollectionRegion<IMapRegionCache>(instance, regionName, properties, metadata,
new IMapRegionCache(regionName, instance, properties, metadata));
}
@Override
public EntityRegion buildEntityRegion(final String regionName, final Properties properties,
final CacheDataDescription metadata) throws CacheException {
return new HazelcastEntityRegion<IMapRegionCache>(instance, regionName, properties, metadata,
new IMapRegionCache(regionName, instance, properties, metadata));
}
@Override
public TimestampsRegion buildTimestampsRegion(final String regionName, final Properties properties)
throws CacheException {
return new HazelcastTimestampsRegion<IMapRegionCache>(instance, regionName, properties, new IMapRegionCache(
regionName, instance, properties, null));
}
}
DistributedQueryCacheDataRegion :
public class DistributedQueryCacheDataRegion extends AbstractGeneralRegion<IMapRegionCache> implements
QueryResultsRegion {
protected DistributedQueryCacheDataRegion(HazelcastInstance instance, String name, Properties props,
IMapRegionCache cache) {
super(instance, name, props, cache);
}
}
마지막으로, 새로운 DistributeQueryCacheHazelcastFactory 클래스에 최대 절전 모드 구성 hibernate.cache.region.factory_class에 공장을 변경해야합니다.
본질적으로 Luis와 동일한 답변을 올렸습니다. 문제에 대한 자세한 정보를 제공하는 곳을 자세히 설명해 주시겠습니까? 건배! –
그것은 Lui의 대답을 기반으로하지만 정확하지는 않습니다. 첫 번째 변경은 두 클래스를 하나의 클래스로 "병합"하지 않도록하고 2 클래스의 업그레이드에서 가능한 변경 사항을 따르고 하나의 복제본을 만들었습니다. 따라하기 쉽습니다. 두 번째로, buildCollectionRegion()을 구현하는 방법에 대한 세부 사항은 Lui의 답변에 지정되어 있지 않습니다. 마지막으로, 제네릭 인터페이스 및 코드 샘플을 사용하여 구현에 대한 자세한 내용을 추가했습니다. –
- 1. Hibernate에서 SQLQuery가 세션 캐시를 사용합니까?
- 2. 분산 된 캐시를 나타내는 기호는 무엇입니까?
- 3. hadoop에서 분산 된 캐시를 작성하는 다양한 방법
- 4. 장고 쿼리 캐시를 비활성화하는 방법은 무엇입니까?
- 5. Hadoop 분산 캐시를 사용하여 파일을 메모리에 저장하는 방법은 무엇입니까?
- 6. 분산 캐시를 사용하여 파일 읽기
- 7. Hibernate에서 setText() 란 무엇입니까?
- 8. 분산 쿼리
- 9. 매핑되지 않은 엔티티에서 Hibernate에서 count (*) 쿼리 작업을 수행하는 방법은 무엇입니까?
- 10. Hibernate에서 레퍼런스를 복사하는 방법은 무엇입니까?
- 11. Hibernate에서 삭제를 케스케이드하는 방법은 무엇입니까?
- 12. Hibernate에서 SaveOrUpdate와 비슷한 HQL 쿼리
- 13. hibernate 분산 쿼리/L2 캐시
- 14. 분산 된 웹 서비스에서 캐시를 따뜻하게 유지하기
- 15. 분산 캐시를 사용하여 Hadoop에 파일 디렉토리 추가?
- 16. Jboss 캐시를 분산 상태 저장소로 사용
- 17. 분할 자 hadoop에서 분산 캐시를 사용하는 방법?
- 18. 분산 캐시를 통해 돼지에 파일 접근하기
- 19. 분산 캐시를 통해 Mapper에서 파일에 액세스
- 20. 처음으로 느리게 실행되는 쿼리 캐시를 지우는 방법은 무엇입니까?
- 21. 동일한 sql 스키마를 가진 hibernate에서 4 개의 테이블을 갖는 하나의 엔티티 클래스를 매핑하는 방법은 무엇입니까?
- 22. 서블릿에서 캐시를 유지하는 방법은 무엇입니까?
- 23. Solr에서 캐시를 지우는 방법은 무엇입니까?
- 24. 메모리 캐시를 구현하는 방법은 무엇입니까?
- 25. 캐시를 깨끗하게 캐시하는 방법은 무엇입니까?
- 26. RGB565로보기 캐시를 만드는 방법은 무엇입니까?
- 27. MKMapView 캐시를 지우는 방법은 무엇입니까?
- 28. 스프로킷 캐시를 지우는 방법은 무엇입니까?
- 29. RDD 캐시를 해제하는 방법은 무엇입니까?
- 30. 도면 캐시를 비활성화하는 방법은 무엇입니까?
쿼리 캐시가 배포되지 않았다는 것을 어떻게 알 수 있습니까? 또한 쿼리 캐시는 쿼리 수준에서 구성을 필요로합니다 (캐시 가능으로 표시). –
@AndyDufresne 분산 L2 캐시를 성공적으로 사용할 수는 있지만 쿼리 캐시는 기본적으로 분산되지 않으며이를 수행 할 문서가 없습니다. – Champ
쿼리 캐시가 배포되지 않았 음을 어떻게 확인합니까? 어떤 분산 캐시 공급자를 사용합니까? JBoss TreeCache? –