Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

데이터 웨어하우스 구현의 핵심: 큐브 계산, 인덱싱, OLAP 쿼리 처리

데이터 웨어하우스는 방대한 양의 데이터를 저장하고 있습니다. OLAP(온라인 분석 처리) 서버는 의사결정 지원 쿼리에 대해 몇 초 이내의 빠른 응답을 요구하기 때문에, 데이터 웨어하우스 시스템은 고효율의 큐브 계산 기법, 데이터 접근 기법, 그리고 쿼리 처리 기법을 반드시 갖추어야 합니다.

데이터 큐브의 효율적인 계산

다차원 데이터 분석의 핵심은 다양한 차원 조합에 걸친 집계(aggregation)를 얼마나 효율적으로 계산하느냐에 있습니다. SQL 용어로 이러한 집계 연산은 'group-by'라고 부르며, 각 group-by는 하나의 큐보이드(cuboid)로 표현됩니다. 이때 전체 group-by의 집합은 데이터 큐브를 정의하는 큐보이드 격자(lattice)를 형성합니다.

기본 큐보이드(base cuboid)가 주어졌을 때, 데이터 큐브의 구체화(materialization) 방식은 세 가지로 나눌 수 있습니다.

  • 비구체화(No Materialization) – 기본 큐보이드 외의 어떤 큐보이드도 미리 계산하지 않는 방식입니다. 쿼리가 들어올 때마다 다차원 집계를 실시간으로 수행해야 하므로 응답 속도가 매우 느려질 수 있다는 단점이 있습니다.
  • 전체 구체화(Full Materialization) – 모든 큐보이드를 사전에 계산해 저장하는 방식입니다. 계산된 큐보이드 격자 전체를 '풀 큐브(full cube)'라고 부르며, 조회 성능은 뛰어나지만 모든 사전 계산 결과를 저장하기 위해 막대한 저장 공간이 필요합니다.
  • 부분 구체화(Partial Materialization) – 가능한 큐보이드 전체 중 필요한 일부만 선별하여 계산하는 방식입니다. 사용자가 지정한 조건(예: 각 셀의 튜플 개수가 특정 임계값 이상인 경우)을 만족하는 셀만 포함하도록 큐브의 부분집합을 계산할 수도 있습니다. 저장 공간과 성능 사이의 균형을 잡을 수 있는 실용적인 절충안입니다.

OLAP 데이터 인덱싱

효율적인 데이터 접근을 지원하기 위해 일부 데이터 웨어하우스 시스템은 인덱스 구조와 구체화된 뷰(큐보이드 활용)를 함께 제공합니다. 그중 비트맵 인덱스(bitmap index) 방식은 데이터 큐브에서 신속한 검색을 가능하게 하기 때문에 OLAP 제품에서 널리 사용되고 있습니다.

비트맵 인덱스는 레코드 ID(RID) 목록을 대체하는 표현 방식입니다. 특정 속성에 대한 비트맵 인덱스에서는 해당 속성 도메인(domain)의 각 값 v마다 고유한 비트 벡터 Bv가 존재합니다. 속성의 도메인이 n개의 값을 가진다면, 비트맵 인덱스의 각 항목에는 n개의 비트(즉, n개의 비트 벡터)가 필요합니다. 데이터 테이블의某一 행에서 해당 속성 값이 v라면, 비트맵 인덱스의 대응 행에서 그 값을 나타내는 비트를 1로 설정하고 나머지 비트는 모두 0으로 설정합니다.

OLAP 쿼리의 효율적인 처리

큐보이드를 구체화하고 OLAP 인덱스 구조를 구축하는 궁극적인 목표는 데이터 큐브에서의 쿼리 처리 속도를 높이는 것입니다. 효율적인 쿼리 처리는 크게 두 단계로 진행됩니다.

  • 사용 가능한 큐보이드에 수행할 연산 결정 – 쿼리에 포함된 선택(selection), 프로젝션(projection), 롤업(roll-up, group-by), 드릴다운(drill-down) 연산을 대응되는 SQL 및 OLAP 연산으로 변환하는 작업입니다. 예를 들어, 데이터 큐브에 대한 슬라이싱(slicing)과 다이싱(dicing)은 구체화된 큐보이드 위에서의 선택·프로젝션 연산에 해당합니다.
  • 연산을 적용할 구체화된 큐보이드 결정 – 쿼리 응답에 활용될 수 있는 후보 큐보이드를 식별한 뒤, 큐보이드 간의 '지배(dominance)' 관계에 대한 지식을 활용해 후보 집합을 축소합니다. 이후 남은 구체화된 큐보이드들을 이용해 비용을 추정하고, 가장 비용이 낮은 큐보이드를 최종 선택합니다.