들어가며
2장은 크게 아래 세가지 정도로 요약할 수 있습니다 :)
- 크로스 집계란 무엇인가
- 열 지향 스토리지와 MPP 아키텍쳐
- 시각화에 적합한 데이터 마트
1. 크로스 집계란 무엇인가?
테이블 중에서는 그 모양에 따라 사람이 보기 편한 구조로 만들어진 테이블이 있습니다. 행과 열에는 데이터 분류 기준이 들어가고, 행과 열이 교차하는 지점에는 숫자 데이터가 들어갑니다. 이런 테이블을 Cross Table
이라고 합니다. 전체적인 집계를 한눈에 파악하기 굉장히 편리합니다. 따라서 데이터 분석을 할 때 유용하게 사용할 수 있습니다.
하지만 Cross Table
은 데이터베이스가 다루기 쉬운 구조가 아닙니다. 행 추가는 간단하지만 열 추가는 힘들기 때문입니다. 반면 행 방향으로 증가하는 테이블인 Transaction Table
은 열이 고정되어 있으므로 RDB에서 다루기 쉬운 구조입니다. 따라서 업무 테이블인 Transaction Table
을 사람이 보기 편한 구조인 Cross Table
로 변환해야 할 필요성이 생겼고 이 변환하는 과정을 Cross Tabulation(크로스 집계)
라 부릅니다.
Look up Table
트렌젝션 테이블에 새로운 항목을 추가하는 것이 아니라, 다른 테이블과 결합하고자 하는 경우에는 룩업 테이블을 사용합니다. 데이터 분석 용도에 따라 참고하는 테이블이므로 얼마든지 바뀔 수 있습니다.
2. 열 지향 스토리지와 MPP 아키텍쳐
결국 이런 크로스 집계(Cross Tabulation)
라는 작업의 필요성이 커짐에 따라 집계 효율이 높은 데이터베이스가 필요해졌습니다. 데이터의 양이 증가함에 따라 메모리에 다 올리지도 못하는 양의 데이터를 집계해야 했지만, 데이터 마트에서 시각화 도구(크로스 집계)로의 응답시간은 수초 안에 이루어지기를 기대했습니다. 그렇다면 이런 거대한 데이터 셋에서 크로스집계의 지연을 막을 수 있는 방법은 무엇이 있을까요?
- 모든 데이터를 메모리에 올립니다.
- RDB는 천만record(1000만 x 500MB = 5GB)정도는 일반적인 RDB가 적당하며, 많은 사용자가 사용하는 실제 운영환경의 데이터마트로 적당합니다.
- 하지만 RDB는 메모리가 부족해지면 급격하게 성능이 저하됩니다. 수억 record를 초과하는 데이터집게에서는 항상 디바이스I/O 가 발생한다고 가정한다면 다른 방법이 필요합니다.
- 고속화를 위해서는
압축
과분산
을 사용합니다.- 가능한 작게 압축하고, 여러군데로 분산하여 처리합니다.
- 분산된 데이터를 읽기 위해서는 멀티코어를 활용하여 디스크 I/O를 병렬처리 합니다. 이런 아키텍처를 MPP(Massive Parallel Processing : 대규모 병렬 처리)라 부르며, 대표적인 MPP 데이터 베이스에는 Redshift, BigQuery 가 있습니다.
이 압축
과 분산
이라는 방법을 위해 열 지향 스토리지(Column-Oriented Storage)
와 MPP(Massive Parallel Processing)
라는 개념이 도입됩니다.
- 압축 - 열 지향 스토리지(Column-Oriented Storage) 데이터의 대부분은 디스크상에 있으므로, 지연을 최소화하기 위해서는 쿼리에 필요한 최소한의 데이터만을 가져와야 합니다. 이떄
칼럼 단위로의 데이터 압축
이 이용됩니다.
행 지향 데이터베이스(row-oriented database) 와의 차이점
- 행 지향 데이터베이스는 각 행을 하나의 덩어리로 하여 디스크에 저장할때는 꼬리를 물고 이어서 쭉 쓰게 되므로 고속으로 쓰는 것이 가능합니다.
- 따라서 행 지향 데이터베이스는 읽을때의 효율성을 위해 인덱스를 생성하며, 적절한 인덱스를 사용하도록 하는것이 중요합니다.
- 하지만 데이터 분석에서는 어떤 칼럼을 기준으로 사용할 지 모르기 때문에 데이터를 미리 칼럼 단위로 정리해 둡니다.
- 같은 칼럼에는 보통 비슷한 데이터가 나열되는 경우도 많으므로, 데이터 압축률 역시 좋아집니다.
- 분산 - MPP(Massive Parallel Processing) 열 지향 스토리지 개념으로 압축률을 높였다면 다음은 MPP 아키텍쳐를 활용한 병렬화 차례입니다. 행 지향 데이터베이스에서 실행되는 쿼리는 하나의 쿼리가 하나의 스레드에서 수행되므로 분산처리 될 수 없습니다. 반면 열 지향 데이터베이스에서는 하나의 쿼리를 다수의 작은 테스크로 분해하고 이를 가능한 한 병렬로 실행합니다. 쿼리가 잘 병렬화된다면 MPP를 이용한 데이터 집계는 CPU 코어수에 비례하여 고속화 됩니다. 다만 디스크로부터 로드가 병목화되지 않도록 데이터가 고르게 분산되어 있어야 합니다.
Hadoop과 MPP 아키텍처와의 차이점
- 데이터 처리 방식: 하둡은 맵리듀스를 통한 배치 처리에 중점을 두는 반면, MPP는 복잡한 SQL 쿼리와 대화형 분석에 강점을 가집니다.
- 데이터 유형: 하둡은 비구조화된 데이터에 적합하며, MPP는 구조화된 데이터 처리에 최적화되어 있습니다.
- 최적화 및 성능: 하둡은 수평적 확장성과 고장 내성에 중점을 두는 반면, MPP는 쿼리 성능과 처리 속도에 중점을 둡니다.
위와 같이 Hadoop에서도 이런 MPP 데이터베이스를 사용할 수 있도록 추가적인 접근법이 만들어 지고 있습니다. 대표적인 프로젝트로 다음과 같은 엔진들이 있습니다.
- Apache Hive
- Hive는 하둡 위에 구축된 데이터 웨어하우스 시스템으로, SQL과 유사한 HiveQL 쿼리 언어를 사용합니다. Hive는 기본적으로 하둡의 MapReduce를 사용하여 쿼리를 처리하지만, 최근 버전에서는 Tez나 Spark와 같은 더 효율적인 실행 엔진을 사용하여 MPP 스타일의 처리를 할 수 있습니다.
- Apache Impala
- Impala는 클라우데라에서 개발한 MPP SQL 쿼리 엔진으로, 하둡 에코시스템에서 대화형 SQL 쿼리를 빠르게 실행할 수 있도록 설계되었습니다. Impala는 HDFS나 HBase에 저장된 데이터에 대해 실시간 쿼리 기능을 제공하며, 전통적인 MPP 데이터베이스 시스템에 가까운 성능을 보여줍니다.
- Apache Drill
- Drill은 하둡과 NoSQL 데이터베이스에서 SQL 쿼리를 실행할 수 있는 분산 SQL 쿼리 엔진입니다. Drill은 자체적인 MPP 처리 모델을 사용하여 대규모 데이터셋에 대한 고성능 쿼리를 지원합니다.
- Presto
- 페이스북에 의해 개발된 Presto는 대규모 데이터 세트에 대해 빠른 SQL 쿼리를 제공하는 분산 SQL 쿼리 엔진입니다. Presto는 하둡 HDFS, Apache Hive 등과 통합하여 사용할 수 있으며, MPP 데이터베이스와 유사한 성능을 제공합니다.
열 지향 방식을 사용하지 않는 MPP 데이터베이스도 있을까?
열 지향 방식을 사용하지 않고 행 지향(row-oriented) 방식을 사용하는 MPP (Massively Parallel Processing) 데이터베이스의 예로는 다음과 같은 시스템들이 있습니다.
- Teradata
- Teradata는 오랜 역사를 가진 MPP 데이터 웨어하우스 솔루션으로, 대용량 데이터 처리와 분석에 탁월합니다. Teradata는 전통적으로 행 지향 방식을 사용했으나, 최신 버전에서는 열 지향 처리 기능도 일부 제공합니다.
- Greenplum Database
- Greenplum은 오픈소스 MPP 데이터베이스로, PostgreSQL을 기반으로 합니다. Greenplum은 기본적으로 행 지향 데이터베이스이며, 데이터 웨어하우징과 대규모 데이터 처리에 사용됩니다.
- Aster Data (Teradata의 일부)
- Aster Data는 복잡한 분석과 대규모 데이터 처리를 위한 MPP 데이터베이스 시스템입니다. Aster는 Teradata에 인수되었지만, 고유의 행 지향 처리 방식을 유지하고 있습니다.
3. 시각화에 적합한 데이터 마트
마지막으로 시각화에 적합한 데이터마트를 잘 만드려면 어떻게 해야 할까요?
OLAP(Online Analytical Processing)은 RDB 와 다르게, 다차원 모델 구조를 MDX(Multi dimensional expressions)
와 같은 쿼리 언어로 집계합니다. 이런 데이터분석을 위해 만들어진 다차원 데이터를 OLAP Cube
라고 하며, 이를 크로스 집계합니다. MPP에서는 다차원 모델이 없으므로 이를 대신하여 비정규화 테이블
을 사용합니다.
과거에는 데이터 마트를 만들때, 팩트 테이블(트랜젝션 테이블)
의 키값은 최대한 줄이고, 이를 여러 디멘션 테이블(마스터 테이블)
로 옮겨 사용했었습니다. 하지만 열 지향 스토리지(Column-Oriented Storage)의 발전으로 칼럼수가 아무리 늘어나도 성능에 영향을 주지 않게 되면서, 처음부터 팩트 테이블에 모든 칼럼을 포함해두고, 쿼리 실행때는 테이블 결합을 하지 않는 방향으로 바뀌게 되었습니다.
DW와 데이터 마트의 구조상 차이
데이터 웨어하우스의 구조는 스타 스키마가 적합하며, 데이터를 축적하는 과정에서는 팩트테이블 + 디멘션 테이블로 분리하고, 마트를 만드는 과정에서 비정규화(거대한 팩트테이블)테이블을 만들게 됩니다.
정리하며
이번 장의 내용은 정리하면 다음과 같습니다.
- 업무테이블인 Transaction Table을 사람이 보기 편한 Cross Table 로 빠르게
변환(크로스 집계)
해주기 위해열 지향 스토리지
,MPP
와 같은 기술들이 등장했습니다. - 빠르게 변환한다는 것은 1) 메모리 상에서 처리, 2) 압축하여 처리, 3) 분산하여 처리 한다는 의미를 내포합니다.
- 데이터 마트는 열 지향 스토리지(Column-Oriented Storage)의 발전으로 비정규화하여 거대한 팩트 테이블을 만들어 사용합니다.
참고문헌
- [출처] 니시다 케이스케(Keisuke Nishida), ⌜빅데이터를 지탱하는 기술(BIG DATA WO SASAERU GIJUTSU)⌟, 장성두 옮김, 주식회사 제이펍
- https://0x0fff.com/hadoop-vs-mpp/