2014-03-27 8 views
4

최대 절전 모드의 첫 번째 레벨 캐시는 세션 개체와 동일한 JVM 경계 내에서 유지 관리됩니다. 최대 절전 모드에서 사용되는 필수 캐시입니다. 클러스터 환경에서 어떻게 관리 할 것인지 걱정됩니다. 다중 노드는 고유 한 1 차 레벨 캐시 (세션 수와 동일)를가집니다. 단일 JVM에서는 하나의 엔티티가 다른 세션의 일부가 될 수 있지만 트랜잭션 관리자는 낙관적 잠금을 사용하여 상황을 처리합니다 ... 그러나 클러스터 환경에서 어떻게 관리 할 것입니까?클러스터 환경에서 최대 절전 모드의 첫 번째 레벨 캐시

1) 엔티티는 부실 데이터 문제를 일으키는 두 개의 다른 노드의 첫 번째 수준 캐시, 데이터 손실 문제.

2) 낙관적 잠금을 사용하면 트랜잭션을 복구하기가 어려울뿐만 아니라 다른 노드의 다른 유용한 트랜잭션에도 영향을 줄 수 있습니다.

3) 모든 트랜잭션마다 비관적 잠금을 사용할 수 없습니다. 그것은 최대 절전 캐싱의 유용성을 없앨 것이다.

4) 트랜잭션 관리가 최대 절전 응용 프로그램 자체에서 수행되고 트랜잭션 관리의 경계가 하나의 JVM이므로 격리 수준 설정도 작동하지 않습니다.

답변

1

주먹 캐시는 오래된 데이터를 생성하지 않으므로 클러스터 환경에서 관련 문제없이 JPA + Hibernate를 사용하고 있습니다. 중요한 것은 거래의 격리 수준입니다. 다른 노드가 커밋되지 않은 데이터를 읽지 않게하려면 적어도 READ_COMMITED 수준으로 작업해야합니다.

+0

오류가 발생하지 않을 수도 있지만 노드가 오류가없는 배열이 아닌 경우 다를 수 있습니다.트랜잭션 관리는 최대 절전 응용 프로그램 자체에 의해 수행됩니다. 데이터베이스 트랜잭션 관리를 사용하지 않습니다 (비관적 잠금의 경우 제외). 격리 수준의 경계는 단일 JVM입니다. – user3082820

+1

나는 동의하지 않을거야. 최대 절전 모드 아래에있는 것은 실제로 데이터베이스 트랜잭션이며 두 응용 프로그램 인스턴스는 동일한 데이터베이스를 공격합니다. app [node1]이 트랜잭션을 열고 (커밋하지 않고) 플러시하면 READ_COMMITED 격리 수준을 사용하지 않으면 app [node2]가 커밋되지 않은 데이터를 읽습니다. – codependent

+0

Hibernate는 트랜잭션 관리를 위해 DB 잠금을 사용하지 않는다. 최대 절전 모드 트랜잭션 API를 확인하십시오. 일부 데이터베이스는 모든 종류의 격리 수준을 지원하지 않습니다. 최대 절전 모드에서 READ_COMMITED 격리 수준을 설정하면 데이터베이스의 격리 수준이 아닙니다. Hibernate는 비관적 잠금 (pessimistic locking)을 통해 잠금을 획득함으로써 데이터베이스 고립을 획득한다. – user3082820

3

첫 번째 문장이 정확하지 않습니다. 최대 절전 모드의 첫 번째 레벨 캐시가 동일한 JVM 경계 내에서 유지되지 않습니다. 그것은 최대 절전 모드 세션의 경계 내에서 유지됩니다.

Hibernate는 동일한 jvm 내에서도 세션 (세션의 엔티티, 이것은 첫 번째 레벨 캐시 임)을 별도로 처리하므로 하나의 jvm에서 여러 개의 최대 절전 세션을 가질 수 있습니다.

엔티티가 클러스터의 다른 노드에있는 다른 첫 번째 레벨 캐시에있는 것과 관련된 질문은 동일한 jvm에서 두 세션 내에있는 엔티티의 경우와 같은 질문입니다.

오류가 발생하지 않을 수도 있지만 노드가 오류가없는 배열이 아닌 경우 다를 수 있습니다. 트랜잭션 관리는 최대 절전 응용 프로그램 자체에 의해 수행됩니다. 데이터베이스 트랜잭션 관리를 사용하지 않습니다 (비관적 잠금의 경우 제외). 격리 수준의 경계는 단일 JVM입니다.

최대 절전 모드의 트랜잭션 관리는 "db transaction start"(JDBC 또는 JTA를 통해)를 호출하는 것만으로 간단하게 DB 트랜잭션에 매핑됩니다. 격리 수준과 관련해서는 jvm과 아무 관련이 없으며이 수준에 구속되지 않습니다. 다른 질문

캔트으로

는 서로 다른 노드에 다른 격리 수준을 사용 ???? 경우 예??? 무슨 일이 .... 없을 경우 ??? 어느 노드에서 오류 메시지가 나옵니까 ????

이것은 실행되는 db 문의 정확한 순서와 전역 적으로 또는 DB 트랜잭션과 함께 설정되는 격리 수준에 따라 다릅니다.

관련 문제