#title 차원 모델링-고급주제 [[TableOfContents]] ==== 목표 ==== * SCD(slowly change dimension)의 이해 * 대형차원을 취급하는 방법에 대한 이해 * 스노우플레이크 스키마에 대한 상세한 연구 * 집계 테이블에 대한 이해와 사용할 때를 결정 * STARS 패밀리와 응용 ==== 차원의 종류 ==== * [Large Dimension] * [Associative Dimension] * [Slowly Changing Dimension] * [Quickly Changing Dimension] * [Junk Dimension] ==== 스노우플레이크 스키마 ==== 스노우플레이크 스키마는 스타 스키마에서 차원 테이블들을 정규화한 방법이다. 다음의 스타스키마 그림을 보자. attachment:차원모델링-고급주제/sflak01.jpg 제품(product)차원이 모두 500,000 건이라고 가정하자. 이 제품은 500개의 제품 브랜드로 나뉘고 제품 브랜드는 10개의 카테고리들로 나누어 진다. 인덱스가 없는 상태에서 특정 브랜드만을 검색하려고 한다면 500,000 건을 모두 읽어야 한다. 또한 특정 제품 카테고리만 검색하려고 해도 역시 500,000 건을 모두 읽어야 한다. 하지만 아래와 같이 카테고리, 브랜드로 분리해 낸다면 초기 검색을 10건 또는 500건만 하면 된다. attachment:차원모델링-고급주제/sflak02.jpg 다음은 스노우플레이크 스키마의 정규화에 대한 선택 옵션이다. ||대상테이블||정규화|| ||부분||부분|| ||부분||전체|| ||전체||부분|| ||전체||전체|| 다음은 부분 또는 완전하게 정규화된 스노우플레이크 스키마를 보여준다. attachment:차원모델링-고급주제/sflak03.jpg ==== 스노우플레이크 장/단점 ==== * 장점 * 작은 공간 절약 * 정규화된 구조들은 더 쉽게 갱신되고 유지된다. * 단점 * 스키마는 덜 직관적이고, 최종사용자는 복잡도에 의해 흥미를 잃게 된다. * 내용을 통해 브라우저하는 능력을 어렵게 한다. * 추가적인 조인들 때문에 질의 성능이 떨어진다. (star join이 지원되어야 함) ==== 스노우플레이크하는 시기 ==== 스노우플레이크 스키마는 작은 공간 절약의 단점이 있으나, 공간 절약이 매우 미흡하다. 그러므로 스타 키마의 다른 장점을 가지는 것이 더 좋은 선택이 대부분이다. 예를들어 다음과 같은 경우가 그렇다. * 500,000 건의 제품 차원에서 20byte 크기를 가진 카테고리가 10개라면 * 카테고리키 1byte를 제품차원에 추가, 20byte 제거 = 순수하게 1row당 절약되는 공간 19byte, 제품차원 절약 약 9MB * 이런 경우는 절약되는 공간이 매우 적기 때문에 스노우플레이크의 다른 단점을 보완할 수 없다. 겨우 9MB 절략하고자 관리개체수가 3배로 늘었고, 더욱 복잡해졌다. 만약 제품차원이 5천 만 건정도 된다면 900MB정도가 절약되므로 고려해 볼만하지만 웬만큼 크지 않고서는 스노우플레이크 스키마는 선택되지지 않을 것이다. ==== 집계 사실 테이블(aggregate fact table) ==== 집계 사실 테이블은 상세 수준의 사실 테이블(granular fact table)로부터 미리 계산어진 요약 테이블이다. 다음과 같은 granular fact table을 가진 스타스키마가 있다고 가정해보자. attachment:차원모델링-고급주제/gft01.jpg 만약 하루에 0.1%의 고객이 100명의 판매원에게 1,000개의 제품을 구매한다고 하면 fact table은 1년 동안 최대 1000000 * 0.1 * 100 * 1000 * 365 = 3조 6천 5백억 건이 될 수 있다. 어마어마한 양이 되어 질의 시간이 오래 걸리게 된다. 그래서 필요한 경우 미리 집계를 해놓아야 한다. 하지만 모든 경우의 수에 대해서 집계를 하는 것도 쓸모없는 데이터를 양산하고, 서버에 부하는 줄 수 있다. 다음은 집계 전략이다. 집계 전략 * 너무 많은 집계들로 수렁에 빠지지 않도록 한다. 집계 지원을 위해 추가적인 유도 차원이 필요하다는 것을 기억해야 한다. * 넓은 범위의 사용자 그룹들을 만족하도록 노력하라. 주 사용자를 타겟으로 그들이 필요로 하는 집계를 하라. * 과도하게 저장소의 전체 사용을 증가시키지 않는 집계들로 가라. 낮은 희박성 퍼센티지를 갖는 더 큰 집계들을 조심스럽게 관찰하라. * 집계들을 최종사용자들로부터 숨겨지도록 유지하라. * 데이터 스테이징 과정에서 영향력이 가능하면 작게 유지되도록 시도하라.