최대 절전 모드 캐시 전략
-
11-09-2019 - |
문제
어느 것을 결정합니까? CacheConcurrencyStrategy
사용?
NonstrictReadWriteCache
,ReadOnlyCache
,ReadWriteCache
,TransactionalCache
.
나는 읽었다 https://www.hibernate.org/hib_docs/v3/api/org/hibernate/cache/cacheconcurncerrencystrategy.html, 그러나 충분히 자세히 설명하지는 않습니다.
해결책
그만큼 최대 절전 모드 문서 그것들을 정의하는 데 꽤 좋은 일을합니다.
19.2.2. 전략 : 읽기 전용
응용 프로그램을 읽지 않지만 수정하지 않으면 영구 클래스의 인스턴스를 사용하면 읽기 전용 캐시를 사용할 수 있습니다. 이것은 가장 단순하고 최적의 수행 전략입니다. 클러스터에서 사용하기에도 안전합니다.
19.2.3. 전략 : 읽기/쓰기
응용 프로그램이 데이터를 업데이트 해야하는 경우 읽기 제기 캐시가 적절할 수 있습니다. 직렬화 가능한 트랜잭션 격리 수준이 필요한 경우이 캐시 전략을 사용해서는 안됩니다. 캐시가 JTA 환경에서 사용되는 경우 속성을 지정해야합니다.
hibernate.transaction.manager_lookup_class
JTA를 얻기위한 전략의 이름TransactionManager
. 다른 환경에서는 거래가 완료되도록해야합니다.Session.close()
또는Session.disconnect()
호출됩니다. 클러스터 에서이 전략을 사용하려면 기본 캐시 구현이 잠금을 지원하는지 확인해야합니다. 내장 캐시 제공 업체는 잠금을 지원하지 않습니다.19.2.4. 전략 : NAMPLEST 읽기/쓰기
응용 프로그램이 때때로 데이터를 업데이트 해야하는 경우 (즉, 두 트랜잭션이 동일한 항목을 동시에 업데이트 할 가능성이 극도로 극히 발생하지 않는 경우) 엄격한 트랜잭션 격리가 필요하지 않은 경우, NAMPLONCTRICT-읽기 쓰기 캐시가 적절할 수 있습니다. 캐시가 JTA 환경에서 사용되는 경우
hibernate.transaction.manager_lookup_class
. 다른 환경에서는 거래가 완료되도록해야합니다.Session.close()
또는Session.disconnect()
호출됩니다.19.2.5. 전략 : 거래
트랜잭션 캐시 전략은 Jboss Treecache와 같은 완전히 트랜잭션 캐시 제공 업체를 지원합니다. 이러한 캐시는 JTA 환경에서만 사용할 수 있으며 지정해야합니다.
hibernate.transaction.manager_lookup_class
.
다시 말해:
읽기 전용 : 데이터에 유용합니다 자주 읽지 만 업데이트되지 않았습니다 (예 : 국가와 같은 참조 데이터). 이건 간단하다. 그것은 모두 (분명히) 최고의 성능을 가지고 있습니다.
읽기/쓰기 : 데이터가 필요한 경우 바람직합니다 업데이트 할. 그러나 그것은 제공하지 않습니다 직렬화 가능 격리 수준, 팬텀은 읽습니다 발생할 수 있습니다 (트랜잭션이 끝날 때 처음에는 없었던 것을 볼 수 있습니다). 읽기 전용보다 더 많은 오버 헤드가 있습니다.
NAMPLONCTRICT 읽기/쓰기 : 또는 두 개의 개별 트랜잭션 스레드가 동일한 객체를 업데이트 할 가능성이 없으면 NAMPLEST- 읽기 쓰기 전략을 사용할 수 있습니다. 읽기 쓰기보다 오버 헤드가 적습니다. 이것은 데이터에 유용합니다 거의 업데이트되지 않습니다.
거래 : 필요한 경우 완전히 거래 은닉처. JTA 환경에서만 적합합니다.
따라서 올바른 전략을 선택하는 것은 데이터가 업데이트되거나 없다는 사실, 업데이트 빈도 및 고립 수준이 필요한 사실에 따라 다릅니다. 캐시에 넣을 데이터에 대해 이러한 질문에 답하는 방법을 모르는 경우 DBA의 지원을 요청할 수 있습니다.
다른 팁
read_only : 절대 변경되지 않는 엔티티에만 사용됩니다 (그러한 엔티티를 업데이트하려는 시도가 이루어지면 예외가 발생합니다). 매우 간단하고 성능이 있습니다. 변경되지 않은 일부 정적 참조 데이터에 매우 적합합니다.
NACTOMSRICT_READ_WRITE : 영향을받는 데이터를 변경 한 트랜잭션 후 캐시가 업데이트됩니다. 따라서, 강한 일관성은 보장되지 않으며 캐시에서 오래된 데이터를 얻을 수있는 작은 시간 창이 있습니다. 이러한 종류의 전략은 최종 일관성을 견딜 수있는 사용 사례에 적합합니다.
read_write : 이 전략은 '소프트'잠금 장치를 사용하여 달성하는 강력한 일관성을 보장합니다. 캐시 된 엔티티가 업데이트되면 해당 엔터티의 캐시에도 소프트 잠금 장치가 저장되어 트랜잭션이 커밋 된 후에 릴리스됩니다. Soft-Locked 항목에 액세스하는 모든 동시 트랜잭션은 데이터베이스에서 해당 데이터를 직접 가져옵니다.
거래 : 캐시 변경은 분산 XA 트랜잭션에서 수행됩니다. 캐시 된 엔티티의 변경은 동일한 XA 트랜잭션에서 데이터베이스와 캐시에서 커밋되거나 롤백됩니다.
API 문서를 읽는 것은 좋은 일이지만 문서도 읽어야합니다. 두 번째 레벨 캐시 - 전략.
트랜잭션-업데이트의 드문 경우에 동시 트랜잭션의 오래된 데이터를 방지하는 데 중요한 데이터 에이 전략을 사용하십시오.
Read-Write-- 다시 업데이트의 드문 경우에 동시 트랜잭션의 오래된 데이터를 방지하는 데 중요한 데이터 에이 전략을 다시 사용하십시오.
NAMPLEST-READ-WRITE-이 전략은 캐시와 데이터베이스 사이의 일관성을 보장하지 않습니다. 데이터가 거의 변경되지 않고 오래된 데이터의 작은 가능성이 중요한 문제가 아닌 경우이 전략을 사용하십시오.
읽기 전용-데이터에 적합한 동시성 전략. 참조 데이터에만 사용하십시오.
이것이 당신의 의심을 없애기를 바랍니다!