2017-03-05 1 views
-1

나는 거의 실시간으로 dwh를 만들려고하고있다. 첫 번째 시도는 매 15 분마다 DWH에서 내 응용 프로그램에 테이블을로드하는 것입니다.실시간 삭제 프로세스를 어떻게 해결합니까?

거의 실시간의 DWH가 직면 할 수있는 모든 가능한 문제를 피하고 싶습니다. 이러한 문제 중 하나는 multiselect html 태그의 값을 보여주는 빈 테이블을 쿼리하는 것입니다.

이 문제를 해결하려면 다음 해결책을 생각해 보았습니다.하지만 이런 종류의 문제를 해결할 수있는 표준이 있는지는 잘 모릅니다. 내가 ETL 프로세스 행을 삽입

UPDATE providers set my_flag=1 

:이 같은 테이블을 갱신 삽입하기 전에

CREATE TABLE providers (
    provider_id INT PRIMARY KEY, 
    provider_name VARCHAR(20) NOT NULL, 
    delete_flag INT NOT NULL 
) 

:

은 내가 다중 선택의 가능한 값을 저장하기 위해이 같은 테이블을 생성 다음과 같이 : 내 앱에서

INSERT INTO providers (provider_name, delete_flag) VALUES ('Provider1',0) 

나는이 같은 테이블을 쿼리 :

SELECT DISTINCT provider_name FROM providers 

응용 프로그램은 여전히 ​​작동하고없이 모든 공급자를 선택하는 동안 중복 (소스 추가하거나 하나 개의 업체를 업데이트, 삭제할 수 있습니다, 그래서 항상 여전히 존경 소스 업데이트해야합니다)와 테이블이 비어 I 있기 때문에 오류를 표시하지 않고 바로 삽입 문 다음에이 문을 실행할 수 있습니다

DELETE FROM providers WHERE delete_flag=1 

나는이 몇 가지 변경 작은 테이블, 또는 큰 테이블에 대한 좋은 해결책이라고 생각하지만, 테이블이 큰 경우에는 어떻게됩니까? 이런 종류의 문제를 해결하기위한 표준이 있습니까?

데이터를 업데이트 중이므로 사용자에게 유용 할 수 있습니다.

답변

1

쿼리를 간섭하는 유지 관리 창을 사용하지 않고 차원의 대량 변경을 게시하는 데는 두 가지 방법이 있습니다.

첫 번째 것은 트랜잭션 개념을 사용하면 간단하지만 큰 데이터의 경우 성능이 떨어집니다. 당신은 변화와 같은 논리적 DELETE 플래그를 필요로하지

DELETE the replaced dimension records 
INSERT the new or changed dimension records 
COMMIT; 

참고 만 COMMIT 후 볼 수 있습니다 - 그래서 빈 테이블이 결코 없다.

변경된 내용이 많은 큰 치수가있는 경우이 방법은 적합하지 않습니다. 그런 경우 EXCHANGE PARTITION 기능을 MySQL 5.6에서 사용할 수 있습니다.

모든 데이터가 포함 된 파티션이 하나만있는 상태로 차원 테이블과 동일한 구조로 임시 테이블을 정의합니다.

CREATE TABLE dim_tmp (
    id INT NOT NULL, 
    col1 VARCHAR(30), 
    col2 VARCHAR(30) 
) 
    PARTITION BY RANGE (id) (
     PARTITION pp VALUES LESS THAN (MAXVALUE) 
); 

완전한 차원 정의로 테이블을 채우고이 임시 테이블을 차원 테이블로 전환하십시오.당신의 차원 테이블 (새로운 정의) 및 차원의 이전 상태로 (게시) 임시 테이블의 데이터가 저장 될이 문 후

ALTER TABLE dim_tmp EXCHANGE PARTITION pp WITH TABLE dim; 

는 임시 테이블에 저장됩니다.

이 기능의 제한 사항은 위의 문서 링크를 확인하십시오.

면책 조항 : 본인은 Oracle DB에서이 기능을 사용하며 MySQL에 대한 경험이 없습니다.

+0

첫 번째 해결 방법이 좋습니다. 그러나 SQL 서버에서 커밋 문을 활성화해야하며 기본적으로 커밋을 수행합니다. 두 번째 솔루션은 개념을 이해하지만 여기서 파티션의 기능은 무엇입니까? – Maik

+0

파티션은 기술적 인 이유로 사용됩니다. 테이블이있는 테이블이 아닌 테이블에 대해 파티션을 전환 할 수 있습니다. Dok를 확인하십시오. –

+0

답변 해 주셔서 감사합니다! – Maik

관련 문제