2011-02-23 2 views
1

ETL 프로세스 설계시 새로운 내용입니다. 현재 저는 두 개의 데이터베이스를 가지고 있는데, 하나는 애플리케이션이 매일 트랜잭션을 위해 사용하는 라이브 데이터베이스입니다. 다른 하나는 데이터웨어 하우스입니다.ETL 프로세스를 수행 할 때 OLTP에 미치는 영향을 줄이는 방법

정기적으로 새 데이터를 삽입하는 라이브 데이터베이스에 테이블이 있습니다. 목표는 매일 밤 ETL 프로세스가 실행중인 데이터베이스의 데이터를 데이터웨어 하우스로 전송하고 라이브 데이터베이스의 데이터를 삭제하는 것입니다.

지식이 부족하기 때문에 해결 방법은 롤링 테이블 호출을 구현하는 것입니다. 기본적으로 라이브 데이터베이스에서 동일한 구조를 가진 두 개의 테이블이 있습니다. 나는 그들을 tblLive1tblLive2이라고 부른다. 나는 또한 동의어 전화 tblLive를 가지고있다. 모든 삽입은 동의어에 대해 수행됩니다. 동의어는 표 중 하나를 가리 킵니다.

ETL 프로세스를 실행할 때 tblLive2을 가리키는 새 동의어를 삭제하고 생성하는 저장 프로 시저가 있습니다. 이렇게하면 ETL 프로세스가 응용 프로그램에 영향을주지 않고 tblLive1의 데이터를 변환 할 수 있습니다. ETL 프로세스가 실행되는 데 1 시간이 걸린다는 가정하에, ETL 프로세스가 테이블을 잠그지 않아도 응용 프로그램이 새 데이터를 삽입하지 못하게 할 것입니다.

이 솔루션은 이론적으로는 작동해야하지만 우아하지는 않습니다.

이 문제가 일반적인 문제인 것으로 확신합니다. 거기에 다른 해결책이 있습니까?

+0

어떤 데이터베이스를 사용하고 있으며 해당 데이터베이스의 버전은 무엇입니까? 그 대답은 데이터베이스에 의존하지 않는 솔루션을 생각해내는 오버 헤드를 정말로 원하지 않는 한, 데이터베이스 의존적 일 가능성이 높습니다. –

+0

지금 SQL Server를 사용하고 있지만 개념은 Oracle에도 적용됩니다. – dsum

답변

1

Bob의 답변 (위)에 추가하려면 DWH/BI 응용 프로그램에서 모든 필수 테이블이 기본적으로 "준비"데이터베이스 또는 "준비"데이터베이스에 복사됩니다. 스키마 (테이블 수/크기 등에 따라 다름)를 DWH 데이터베이스에 저장하십시오. 이들은 일반적으로 OLTP 시스템과 다른 서버에 있습니다. 어떤 크기의 DWH 구현이라도 있습니다.

성능 영향에 대한 질문에 대답하려면 서버 사양/io 구성에 따라 달라집니다.

OLTP 시스템에 데이터를 24 시간/일 삽입합니까? 또는 가동 중지 시간이 있습니까? 또는 낮은 트래픽 시간?

IO가 가장 큰적일 것이므로 데이터베이스 압축을 사용하는 것이 가치가있을 수 있으며 이는 상당한 도움이 될 것입니다.

+0

교통량이 적습니다. ETL 프로세스를 수행하는시기입니다. 제안에 감사드립니다. 실제로 OTLP db의 테이블 스냅 샷 복사본을 만든 다음 DWH로 이동 한 다음 Transformationon DWH를 수행 할 가치가 있다고 생각합니다. 현재 ETL 프로세스는 변환이 C# 응용 프로그램에서 수행되거나 저장 프로 시저에서 수행되도록 설계되었습니다. 이 저장 프로시 저는 DWH에 저장되지만 OLTP 및 DWH에 동적으로 액세스하여 ETL을 수행합니다. – dsum

0

테이블을 준비 영역으로 읽어 들여 준비 테이블을 처리하십시오. 당신은 일반적으로 프로덕션 시스템에서 너무 적은 시간을 보내고 싶어합니다. 특히 사용중인 경우.

트리거로로드 된 테이블을 사용할 수도 있습니다. SQL 2008의 경우 데이터 캡처 변경

+0

예, 제 목표는 시스템에 미치는 영향을 줄이기 위해 가능한 한 프로덕션 시스템에 약간의 시간을 투자하는 것입니다. 스테이징 테이블은 임시 테이블일까요? SQL 2008을 사용하고 있습니다. ETL을 수행하는 데 필요한 테이블의 범위는 100k에서 2000k까지입니다. ETL 프로세스가 30 초 이상 동시에 행을 테이블에 삽입하는 동안 ID 번호가 특정 숫자보다 적은 100k + 행을 읽으면 성능에 미치는 영향을 알 수 있습니다. – dsum

+1

2 백만 행을 준비로 가져 오는 데 몇 분 정도 소요됩니다. 난 그냥 4 분 안에 SQL 2008 dev에 상자에 4GB의 RAM을 내 노트북을 통해 dev에 상자에서 150 만 행을 뽑아. 모든 기계는 생산이 훨씬 느려질 것입니다. 업데이트 성능은 코딩 및 성능 조정에 따라 다릅니다. 그러나, 당신은 당신의 볼륨으로 잘되어야합니다. –

+0

정보 주셔서 감사합니다. ETL 수행 방식에 대한 전략이 변경 될 수 있습니다. ETL을 수행하는 저장 프로 시저를 사용한다고 가정합니다. 매우 빠르게 소리가 나기 때문입니다. 우리는 ETL 프로세스를 느리게하는 데이터 액세스 계층이있는 C#을 사용합니다. C#을 사용하면 우리가 복잡한 변환을 할 수 있고 디버깅하기가 쉽지만 성능이 문제가 될 수 있습니다. – dsum