2012-03-10 2 views
2

우리는 다음 프로젝트에 대해 Terracotta을 고려하고 있습니다. 별도의 DBMS 없이도 데이터 지속성을 제공 할 수있는 잠재력에 흥미가 있습니다. (On using Terracotta as a persistence solution 참조)테라코타의 영구 데이터의 경우 클래스를 어떻게 발전시킬 수 있습니까?

소프트웨어 진화의 주요 문제점 중 하나는 기존 생산 데이터를 새로운 데이터 모델과 일치시키는 것입니다. RDBMS의 경우 배포 시점에 SQL 변경 스크립트를 사용할 가능성이 높습니다. Terracotta가 뒷받침하는 데이터의 경우, 사소한 진화를 처리하는 방법이 내게 즉시 명백하지 않습니다.

여기에 couple of paragraphs on Class Evolution in the Terracotta documentation이 있지만 DSO에만 해당되며 표면적으로 머물러 있습니다.

  1. 테라코타에 저장된 영구 데이터에 대한 데이터 모델 진화를 처리하는 방법은 무엇입니까? 저는 DSO가 아닌 시나리오 (테라코타 툴킷 API)에 특히 관심이 있습니다.
  2. Terracotta DSO와 Toolkit API는 진화 된 클래스 정의에 대한 반응이 다릅니다.
  3. 클래스 전개의 한계를 이해하려면 테라코타가 오브젝트 데이터를 표현/전달하는 방법을 이해하는 데 도움이됩니다. 거기에 대한 사양이 무엇입니까?
  4. 테라코타에 적용 할 수있는 OODBMS 세계의 스키마 변화 기술이있을 수 있습니까?

사소한 예로, 내가 저장 Car 개체의 무리가 있고 내가 intString에서 Car 클래스의 modelYear 필드를 변경했습니다 가정 해 봅시다. 문서에 따르면 이것은 out-of-the-box에서 작동하지 않습니다. 응용 프로그램을 시작하는 동안 별도의 클래스 로더가 내 이전 Car을로드 한 다음 다시 Car으로 변환하는 솔루션을 상상할 수 있습니다. 그게 좋은 접근 방법일까요, 왜 아닌가요?

답변

1

사용 사례 시나리오에 따라 다릅니다.

캐시를로드하는 데 드는 비용이 최소 (분)이고 시간을 절약 할 수 있다면 캐시를 새 버전으로 간단히 다시 만들면 안됩니다.

캐시를 채우는 데 드는 비용 (시간/일)이 많고 가동 중지 시간이 오래 걸리지 않으면 전환하는 동안 새 버전과 이전 버전을 동시에 처리해야합니다. 이를 위해 는 :

  1. 나는 캐시 클래스의 새로운 버전에 대해 별도의 캐시 정의를 정의하고 캐시에 만료 이전 버전을 할 것입니다.
  2. 응용 프로그램 코드도 "이전/새 버전"을 지원해야합니다.
  3. 여전히 이 만료 된 데이터까지 이전 버전에서 작동 할 인스턴스가/(오래된 캐시 이름을 기준으로)
  4. 는/모든 새 요청을 처리 인스턴스가 새로운 기반으로 새 버전 (으로 흐르는 쓸모 캐시 명)

예 : ehcache에서.당신이 (당신의 예에 따라) 2 캐시를 정의 할 xml로 :

<cache name="com.xyz.Car" timeToLiveSeconds="600"/> 
<!--New version goes here--> 
<cache name="com.xyz.Car2" timeToLiveSeconds="600"/> 

을 장기적으로, 당신이해야 버전 진화를 포함하여 캐시에 대한 운동 명명 규칙.

관련 문제