을 유지하는 방법 Hibernate 캐시 일관성 달 두 Java 응용 프로그램은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/48733

  •  09-06-2019
  •  | 
  •  

문제

우리의 디자인에는 하나의 jvm 는 jboss/웹 애플리케이션(read/write)을 사용하여 유지하는 데이터를 통해 최대 절전 모드를 사용하여(jpa)db.모델 10-15 지속적인 수업을 3-5 수준의 깊이에 관계입니다.

우리는 그 다음에는 별도의 jvm 는 서버를 사용하여 이 데이터를 사용합니다.그것은 지속적으로 실행하는 단 하나의 긴 db session(read only).

현재 없 intra-jvm 캐시 참여-그래서 우리는 우리를 수동으로 신호를 하나의 jvm 습니다.

이 경우 웹 애플리케이션 변경 내용 일부 데이터 신호는 서버를 다시 로드하는 변경 데이터입니다.우리가 무엇을 발견은 우리에게 필요 최대 절전 모드를 데이터를 제거한 다음 다시 로드합니다.그냥 가져오기/으로 병합 db 작업을 수행하지 않습에 대하여 객체를 여러 층의 아래 계층 구조입니다.

어떤 생각이 있는지 여부에 근본적으로 아무 것도 잘못된 이 디자인으로는 경우 또는 누군가가 이것을 하고 있었다 더 나은 행운을 가진 작업에서 최대 절전 모드 골.

감사합니다, Chris

도움이 되었습니까?

해결책

최대 절전 모드 세션 중에 모든 데이터를 읽을 데이터베이스로부터 무엇으로 그들은 전화 첫 번째 수준 캐시.한번 행드에서 DB 이후에 반입에 대한 동일한 행 PK 것이 데이터를 반환에서 이 캐시입니다.또한,최대 절전 모드 gaurentees 참조 평등에 대한 개체와 같은 PK 단일 세션에서.

에서 내가 이해,당신의 읽기만 서버의 응용 프로그램,닫 최대 절전 모드 세션이 있습니다.그래서 때 DB 얻에 의해 업데이트 읽기-쓰기 응용 프로그램,세션에 읽기만 서버는 인식의 변경합니다.을 효과적으로,당신의 읽기만 응용 프로그램을 로드 메모리 데이터베이스의 복사본을 사용하여 해당 복사본을 얻을 수있는,오래된 예정이다.

가장 간단하고 최상의 조치가 제안할 수 있을까지 세션으로 필요합니다.이 비키 전체의 문제입니다.최대 절전 모드 세션을 할 수 있도록 창이 짧은 상호 작용으로 DB.나도 동의가 있는 성능 향상을 의지를 다시 로드하는 개체 그래프 또 다시;하지만 당신은 그것을 측정하고 자신을 설득하는 그것에 가치가 있는 고통을 수 있습니다.

또 다른 옵션은 닫고 세션이 정기적으로 실시합니다.이렇게 하면 읽기 전용 응용 프로그램이 데이터와 함께 작동하지 않보다 오래된 지정된 시간 간격입니다.하지만 확실히 창의 읽기 전용으로 오래된 데이터(지만 디자인을 보장하는 것을 얻는 최신 데이터가 결국).이 될 수 있습 허용되는 많은 응용 프로그램에서 당신을 평가하는 상황이다.

세 번째 옵션을 사용하는 것입 두 번째 수준 캐시 구현 및 사용하여 짧은 세션이 있습니다.다양한 캐싱 패키지와 함께 작동하는 최대 절전 모드 상대적 장점과 단점이 있습니다.

다른 팁

크리스,나는 혼동되는 약간 상황.내가 제대로 이해한다면,당신은 모두 웹 응용 프로그램(읽기/쓰기)는 독립형 프로그램(읽기 전용입니까?) 는 최대 절전 모드를 사용하여 액세스하는 공유된 데이터베이스입니다.을 변경한 웹 앱을 보이지 않은 콘텐츠입니다.맞나요?

그렇다면,당신은 고려하여 서로 다른 두 번째 수준 캐시 구현?는지 궁금하네요한 경우 사용할 수 있습니다 클러스터 캐시는 것은 모두에 의해 공유 웹 응용 프로그램과 독립 실행형 응용 프로그램입니다.내가 믿는 SwarmCache 와 통합되는 최대 절전 모드를 할 수 있지만,그 시도하지 않습니다.

하지만,일반적으로,당신은 알아야한다는 내용의 특정 캐시 없을 것을 알고 있 활동에 의한 다른 응용 프로그램(나는 그 제안을 모두 응용 프로그램을 공유 캐시).행운을 빕니다!

나의 관점에서 변경해야 합 밑줄 최대 절전 모드 캐시는 하나의 지원하는 클러스터 모드입니다.수 캐시 JBoss캐시 떼.첫 번째는 더 나은 지원의 데이터 동기화(복제 및 무효)또한 지원합 JTA.

당신은 것이나 구성할 수 있 캐시 동기화 사이 웹 애플리케이션과 서버입니다.또한 격리 수준을 사용할 경우 캐시 JBoss.내가 믿고 사용해야 합니다 READ_COMMITTED 모 얻고 싶은 경우에 새로운 데이터 서버에서는 동일한 세션이 있습니다.

가장 많이 사용되는 실천하는 것입 컨테이너 관리 Entity 관리 그래서 두 개 이상 응용 프로그램에서 동일한 용기(ie Glassfish,Tomcat,Websphere)같은 공유할 수 있습니다 캐시합니다.그러나 사용하지 않는 경우 응용 프로그램 컨테이너,기 때문에 당신이 사용하여 플레이!예를 들어,다음 난 것들을 webservices 에 기본 응용 프로그램 읽기/쓰기에 일관적으로 캐시입니다.

나는 생각을 사용하여 오래된 데이터에 대한 문을 열고있다.처럼 싱글가 Multitons,읽기만 응용 프로그램은 자주 쓰기 때때로.

벨트와 괄호 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top