2010-07-17 4 views
0

나는 특정 엔티티를 나타내는 복제 된 테이블을 생성하면서 모든 엔티티의 스냅 샷을 찍고 싶은 곳에 응용 프로그램을 가지고 있습니다. 그런 다음 이러한 스냅 샷 간의 차이점을 비교하여 데이터가 시간 경과에 따라 어떻게 변하는 지 확인할 수 있기를 원합니다.어떻게 복제하고 NHibernate에서 테이블을 비교합니까?

당신은 NHibernate에서 이것을 어떻게 달성 할 수 있습니까? 뉴 햄프셔가 이런 종류의 데이터 조작을위한 디자인이 아니며 데이터베이스, NH 또는 둘 모두를 남용하고 있는지 확신 할 수 없습니다.

(내가 뷰 또는 저장 발동을 사용할 수 없습니다입니다 데이터베이스 엔진의 제한으로 인해 P.S..)

답변

0

스냅 샷 ID 열을 사용하여 엔티티를 보강하고 테이블의 항목을 복사합니다. 필터와 결합하여 주어진 스냅 샷 중에서 선택할 수 있습니다. 레거시 코드에 대한 패치를 만들어야했지만 기본적으로 작동합니다.

1

당신이 정말이 스냅 샷에 각 엔티티의 전체를 저장해야합니까? 그렇다면 type_snapshot과 같은 이름의 테이블 모음이 도움이 될 수 있습니다. 엔티티를이 테이블에 저장할 수 있습니다 (삽입 만, 업데이트하지 않음). 원래 항목의 식별자를 저장하고 스냅 샷 자체에 대한 새 식별자를 생성 할 수 있습니다. 그리고 각 스냅 샷과 함께 타임 스탬프를 저장할 수 있습니다. 귀하의 item_snapshot 테이블과 같이 보일 것이다 : 어쩌면 당신은 (스냅 샷 T의 인스턴스와 함께, ID와 스냅 샷 날짜를 포함) 스냅 샷 인스턴스와

을 일할 수있는 도메인 내에서

id | snapshot_date | item_id | item_prop1 | item_prop2 ... 
123 | 7/16/10 | 15 | "item desc" | "item name" ... 

을이되지 않을 수 있습니다 두 번째 매핑 집합을 도입 할 것이므로 이상적 일 수 있지만, 어디로 갈 것인지를 결정하는 방법입니다. 데이터베이스 엔진에 가까운 뭔가를하는 것이 나을 것 같지만 (응용 프로그램 관점에서 볼 때)이 스냅 샷에 대해 염두에 두어야 할 것이 무엇인지 알지 못하는 것 같습니다.

0

스냅 샷을위한 타임 스탬프 형식의 여분의 열이있는 중복 테이블이 만들어졌습니다. 메인 테이블에서 인덱스를 작게 만들었습니다. 우리는 1,000 만 개가 넘는 행을 가지고 있었기 때문에 동일한 테이블에 버전을 추가하면 더 많은 레코드가 생성됩니다. 다른 테이블 스페이스의 버전 테이블 (mssql의 db 파일)

관련 문제