2014-11-25 2 views
3

Oracle 11g 데이터베이스에서 작업 중입니다. 시스템 ATM에는 트랜잭션 관련 레코드에 대한 많은 내역 테이블이 있습니다. 우리가 가지고있는 문제는 트랜잭션 히스토리 정보 레코드가 여러 테이블에 걸쳐 있다는 것입니다. 예를 들어 버전 열이있는 TransactionDetail 테이블과 자신의 버전 열이있는 TransactionQuestions 테이블이 있습니다. 역사적인 정보를 검색해야 할 때 대용량보기를 사용하여 데이터베이스에서이 데이터를 가져옵니다. 엄청나게 느리며 버전 및 많은 조인으로 인해 크기와 복잡성으로 인해 버그가 계속 발견됩니다.대대적 인보기 대 역사표

우리가 취하려고하는 접근법은 다중 히스토리 테이블에 데이터를 저장하는 것입니다. 나중에 더 많은 뷰에 나중에 조인하기위한 목적으로 각 트랜잭션의 전체 시스템 상태를 많은 열이있는 방대한 테이블에 저장하고, PK에 대한 색인 및 문제 해결.

데이터가 집계되지 않고 검색되므로 성능 문제가 해결됩니다.
내 눈에 테이블 접근법의 가장 큰 단점은 SQL 뷰 구조에 버그가있는 경우 메커니즘에서 버그가있는 경우 (보기에서 코드로 본질적으로 이동 됨) 고정되어 있으며 실제 내역 데이터가 영향을받지 않는다는 것입니다. 데이터를 기록 테이블에 씁니다. 데이터가 손상되어 고칠 수 없습니다.

여러 히스토리 테이블의 데이터를 결합한보기와 비교할 때 대규모 히스토리 테이블이 가져올 다른 단점은 무엇입니까?

답변

3

materialized view을 만들려고하셨습니까? 구체화 된 뷰는 정규화 된 테이블 구조를 허용하면서 스토리지 특성이 상당히 향상되었습니다. 디스크 사용량 증가 (기본적으로 "거대한 역사 테이블"공식화)를 포함하여 몇 가지 단점이 있습니다. 이것은 기본적으로 대규모 히스토리 테이블을 생성하고, oracle로 하여금 정규화 된 테이블에 변경 사항을 직렬화하는 작업을 수행하게합니다.