2009-07-06 2 views
2

: How To Cache Information In A Threadsafe Manner "참고 자료"를 다루는 일반적인 패턴은 무엇참조 데이터 패턴이 스레드와 비슷하지만 정확히

- 자주 응용 프로그램에서 읽을 데이터가 일반적으로 데이터베이스에 구체화 또는 등록 정보 파일 , 매우 드물게 (일, 주, 달) 업데이트 되었습니까? 데이터가으로 업데이트되면 외부에서 업데이트됩니다.

DAO를 삽입 할 수있는 독점적 인 기능일까요? 그렇다면 자체 콘텐츠를 관리 할 수 ​​있습니까? 이 서비스에서 새로 고침 (즉, MBean을 통해)을 수행하는 refresh() 메소드를 노출하면 애플리케이션을 바운스 할 필요가 없다는 생각이 듭니다.

다른 SO 스레드에서 사람들은 필요할 때마다 DAO를 인스턴스화하고 해당 레벨에서 투명하게 캐시 할 수있는 것처럼 들립니다.

데이터베이스에서 데이터를로드하는 실제 DAO 또는 하드 코딩 된 응답을 반환하는 mock/test-double과 함께 삽입되는 싱글 톤 서비스와 같은 개념입니다. 그러나 자바 enum을 통해 싱글 톤으로 서비스를 구현한다면 Spring을 통해 좀 더 문제가 될 수 있습니다.

그래서 다른 사람들이 일반적으로 참조 데이터를 어떻게 처리합니까? 의지가 있지만 캐싱이있는 캐싱을 사용 하시겠습니까? 아니면 별도의 메모리 내 서비스입니까?

답변

2

저는 일반적으로 Spring을 사용하여 내 서비스 계층에 DAO 구현을 삽입합니다. SQL 기반 구현 외에도 테스트 구현 (XMLDao, FlatFileDao)이 자주 있습니다. 작은 데이터 세트의 경우 보통 내 자신의 캐시를 작성하고 모두 데이터를 메모리의 기본 테이블에서로드합니다.

모든 것을 말하면 합리적으로 작은 데이터 세트로 작업 할 수 있다는 장점이 있습니다. 더 큰 데이터 세트를 다루는 경우 기성품 캐싱 솔루션을 고려할 수 있습니다 (복수의 JVM (예 : Terracotta)에 분산되어 있음).

앞의 스레드에서 언급했듯이 refresh() 메서드도 제공합니다. 데이터 업데이트가 적시에 전파 될 필요가없는 경우 간단히 MBean을 통해이를 호출합니다. 이 작업을 자동화하려는 경우 Tibrv를 사용하여 데이터베이스의 업데이트를 수신하고 캐시 된 데이터를 새로 고칩니다 (MS-SQL 트리거를 사용하여 Tibrv 메시지 생성).

자바 enum을 사용하여 서비스를 구현하는 방법에 대해 잘 모릅니다. 어떻게 작동합니까?

+0

나는 그 부분으로 물을 혼란스럽게 만들었을지도 모릅니다. 주로 싱글 톤에 종속성을 주입하는 것에 대해 궁금합니다. 이제 생각해 보니 별개의 질문 일 수 있습니다. 블로흐 (Bloch)에 따르면 어쨌든 Java에서 싱글 톤을 구현하는 현재 최상의 방법은 단일 멤버 (인스턴스)가있는 Enum입니다. 즉 public enum Elvis { INSTANCE; } – ayang

+0

이 경로를 따라 가려면 Spring에서 MethodInvokingFactoryBean을 사용하여 종속성을 삽입하여 enum 클래스의 관련 setter를 호출 할 수 없습니까? – Adamski

+0

네, 그게 제가 끝내기 쉬운 일입니다.하지만 제 생각에 내가 제 1 원칙으로 돌아가서 내가 잘못하고있는지를 알기에 충분하지 못했습니다. – ayang

관련 문제