ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [빅데이터의 분산 처리] 3. 데이터 마트의 구축
    책/빅데이터를 지탱하는 기술 2022. 3. 30. 12:28
    반응형

    이 글은 빅데이터를 지탱하는 기술을 읽고 정리한 글입니다.


     

     

     

    1. 팩트 테이블


    팩트 테이블의 크기가 클 경우에는 열 지향 스토리지에서 데이터를 압축해야 빠르게 데이터 집계를 할 수 있다.

    팩트 테이블 작성에는 기존에 저장한 데이터에 새로 도착한 데이터 추가하는 추가(append)와 과거의 데이터를 포함하여 팩트 테이블 전체를 다시 만드는 치환(replace)이 있다. SQL 쿼리로 따지면 추가는 INSERT INTO와 같고, 치환은 CREATE TABLE과 같다.

     

    테이블 파티셔닝

    팩트 테이블에 추가를 하는 방식으로 데이터를 추가하면 아래와 같은 문제가 발생할 수 있다.

    - 추가에 실패가 발생하면 결손이 일어나고, 잘못하고 같은 추가를 여러 번 실행하게 된다면 중복이 일어날 수 있다.

    - 나중에 팩트 테이블을 다시 만들고 싶을 때 관리가 복잡해진다.

    이런 문제가 발생할 가능성을 줄이기 위해 하나의 테이블을 여러 물리적인 파티션으로 나누어 파티션 단위로 정리하여 데이터 쓰기/삭제를 수행하는 테이블 파티셔닝이라는 기술을 사용한다.

    주기적으로 각 파티션을 교체하면 데이터가 중복될 가능성을 배제할 수 있다. 그래서 테이블 파티셔닝은 데이터 웨어하우스를 구축하는데 유용하다.

     

    데이터 마트의 치환

    데이터 마트를 만드는 경우에는 데이터양이 정해져 있기 때문에 팩트 테이블 전체를 치환하는 것이 좋다.

     

    장점

    - 중간에 데이터가 중복되거나 빠뜨릴 가능성이 거의 없음

    - 처음부터 테이블을 다시 만들고 싶으면 쿼리만 한 번 실행하면 끝남

    - 스키마 변경에도 유연하게 대응이 가능함

    - 오래된 데이터는 시간이 지나가면서 자동으로 삭제되므로 데이터 마트가 계속 확대되는 일이 없음

     

    단점

    - 처리 속도가 느림


     

     

     

    2. 집계 테이블


    집계 테이블이란 팩트 테이블을 어느 정도 모아서 집계하여 데이터의 양을 줄이는 테이블이라고 한다.

    집계 테이블은 필요한 칼럼을 골라 숫자 데이터를 집계하기만 하면 되는데, 1일 단위로 집계하는 일일 집계를 잘 만들면 데이터 마트가 많이 커지지 않는다.

    집계 테이블을 만들면서 각 값이 취하는 값의 범위를 카디널리티라고 하며, 성별의 경우 남, 여뿐이니 카디널리티가 작고, IP주소는 국가나 지역별로 나누지 않는 이상 모든 IP를 구하면 카디널리티가 매우 크다고 한다. 그래서 집계 테이블을 작게 만드려면 모든 칼럼의 카디널리티를 줄여야 한다.

     

    * 데이터베이스에서도 카디널리티(cardinality)가 나오게 되는데, 데이터베이스에서 카디널리티는 릴레이션(테이블) 튜플의 개수를 뜻한다. 이때 성별의 경우에는 값이 (남, 여) 두 가지이니 카디널리티 값이 2이고, 주민등록번호의 경우 사람마다 중복된 값이 없기 때문에 카디널리티 값이 성별보다는 굉장히 크다고 말할 수 있는 것 같다.


     

     

     

    3. 스냅샷 테이블


    마스터 데이터(참고)처럼 업데이트될 가능성이 있는 테이블은 테이블을 변경해야 하는데 두 가지 방법중 하나가 정기적으로 테이블을 통째로 저장하는 방법인 스냅샷 테이블을 사용하는 것이다.

    마스터 테이블의 레코드 수가 많거나 시간이 지남에 따라 스냅샷 테이블이 거대해지면 이것도 일종의 팩트 테이블로 간주한다.

    스냅샷 테이블은 나중에 다시 만들 수 없으니 데이터 레이크나 데이터 웨어하우스 같은 영구적인 저장소에 보관한다.

     

    스냅샷 테이블의 기능

    - 다른 팩트 테이블과 결합하여 디멘젼 테이블로 사용할 수도 있음

    - 스냅샷의 날짜를 지정하여 과거의 마스터 테이블을 볼 수 있음

    - 팩트 테이블과 스냅샷 테이블을 날짜를 포함하여 결합해 분석에 사용할 수도 있음


     

     

     

    4. 이력 테이블


    마스터 데이터처럼 업데이트될 가능성이 있는 테이블을 변경하는 방법중 나머지 한 개는 변경된 데이터만을 스냅샷하거나 그 내용을 기록하는 이력 테이블이 있다.

    이력 테이블은 데이터 양을 줄이는데 도움이 되지만, 어느 순간의 완전한 마스터 테이블을 나중에 복원하는 것이 어려워서 디멘전 테이블로 사용하기는 힘들다. 그래서 처음부터 완전한 스냅샷을 만들어 두고, 매일 스냅샷 하는 것이 좋다.


     

     

     

    5. 디멘전을 추가하여 비정규화 테이블 완성하기


    비정규화 테이블은 팩트 테이블과 디멘전 테이블을 결합하는데, 디멘전 테이블은 스냅샷뿐만 아니라 각종 중간 테이블이 만들어진다.

    이때 시각화에 필요하지 않은 칼럼은 가급적 제거하여 데이터양이 적은 비정규화 테이블을 만드는 것이 좋다. 거기다가 데이터 양을 작게 하려면 이전 글과 같이 서브 쿼리를 사용하여 로드 속도를 빠르게 한다. 이후 데이터 마트에 저장할 때는 카디널리티를 작게하는 것이 중요하다.


    반응형

    댓글

Designed by Tistory.