Column-oriented Database

오승준
9 min readAug 21, 2022

--

Intro

[빅데이터를 지탱하는 기술] 이라는 책의 [Chapter 2–2. 열 지향 스토리지에 의한 고속화] 를 읽고 정리한 내용이다.

주로 [Chapter 2–2. 열 지향 스토리지에 의한 고속화] 내용을 다룰 것이고, 추가로 [Chapter2–4. 데이터 마트의 기본 구조] 와 [Chapter3–2. 쿼리 엔진] 등 다른 챕터의 내용 중에서 관련있는 내용을 약간 덧붙이려고 한다.

Column-oriented Database 의 개념을 정리하고, Column-oriented Database 가 Data Pipeline 에 미친 영향에 대해서 알아보자.

Index

  • Column-oriented Database 가 필요하게 된 배경
  • 데이터의 압축 : Column-oriented Database
  • 데이터의 분산처리 : Massive Parallel Processiong
  • Data Pipeline 에 미친 영향

Column-oriented Database 가 필요하게 된 배경

Data Pipeline

Data Pipeline

데이터가 생산되고 소비되는 전체적인 data pipeline 은 위와 같다.

  • 원본 데이터 소스
    - 데이터를 생산하는 주체의 raw data 를 의미한다.
    - 실제 business logic 에서 사용되는 database, 서버에서 남기는 log 등이 이에 해당한다.
  • Data Lake / Data Warehouse
    - 데이터 분석에 필요한 데이터를 축적해두는 곳이다.
    - raw data 로부터 Data Lake / Data Warehouse 로 데이터를 가져오는 과정을 ETL / ELT 라고 한다.
    - 대표적인 예시로는 Google Cloud Platform 의 BigQuery 가 있다.
  • Data Mart
    - Data Warehouse 에서 필요한 데이터만을 추출한 테이블들의 집합이다.
    - 분석에 직접적으로 사용되는 정제되고 가공된 데이터들이 모여있다.
  • Dashboard
    - 데이터를 소비하는 부분이다.
    - Data Mart 의 테이블을 활용하여 데이터를 분석하는 과정이다.
    - spreadsheet 로 small data 를 추출하여 간단하게 분석할 수도 있고, BI 서비스를 이용하여 dashboard 를 만들 수도 있고, Jupyter Notebook 같은 환경에서 원하는 분석 기법을 사용하여 데이터를 분석할 수도 있다.

Column-oriented Database 는 Data Lake / Data Warehouse 그리고 Data Mart 에 해당하는 이야기이다.

Column-oriented Database 가 필요하게 된 배경

Data Pipeline after Data Warehouse

점점 데이터 양이 증가함에 따라, 데이터를 가공하고 집계하는데 걸리는 시간이 길어졌다. 특히, dashboard 에서 사용되는 쿼리는 수 초 내외로 집계가 완료되어야 dashboard 사용자들이 바로 데이터를 확인할 수 있기 때문에, data latency 는 중요한 문제이다.

하지만 MySQL 이나 PostgreSQL 과 같은 기존의 RDB 는 대용량 데이터 집계에 최적화 되어있지 않았다. 즉, 빅데이터를 빠르게 집계할 수 있는 새로운 형태의 데이터베이스가 필요했다.

데이터를 압축하고, 분산 처리하여
빠르게 집계할 수 있는 데이터베이스가 필요하다.

데이터의 압축 : Column-oriented Database

정의

A column-oriented DBMS or columnar DBMS is a database management system (DBMS) that stores data tables by column rather than by row.

  • Data table 을 row 가 아닌, column 별로 묶어서 저장하는 데이터베이스를 말한다.
  • Columnar Database 라고도 한다.
  • 일부 column 을 이용하여 데이터를 집계할 때, 필요한 column 만 선택하여 데이터를 가져올 수 있다.
  • column 별로, 같은 데이터 타입끼리 데이터가 저장되기 때문에, 데이터 압축이 보다 용이하다.
  • 하지만, 새로운 row 를 추가할 때는 효율적이지 않다.

BigQuery 사용자라면, 이미 이 개념에 대해 간접적으로 접했을 것이다.

# 1 - This query will process 5.8 GB when run.
select * from user
# 2 - This query will process 1.2 GB when run.
select user_id, created_at from user

위와 같은 예시에서, 2 번 쿼리와 같이 필요한 column 만 입력했을 때, 쿼리 비용이 감소하는 것을 확인할 수 있다. 이를 통해서 데이터가 column 별로 나누어 저장되어 있다는 것을 추측할 수 있었을 것이다.

Row-oriented vs Column-oriented

기존의 Row-oriented 방식과 Column-oriented 방식을 예시를 통해 비교해보자.

Data Table

Row-oriented Database

Row-oriented Database
  • Row-oriented Database 에서는 데이터들이 위와 같이 저장된다.
  • 하나의 row 를 찾고, row 를 추가하고 수정하고 삭제할 때는 도움이 된다.
  • 유저가 구독을 시작하여 새로운 구독 정보를 추가하거나, 구독을 갱신하여 구독 정보를 업데이트 하는 등의 서버 로직에서는 이처럼 하나의 row 를 빠르게 찾을 수 있는 Row-oriented Database 가 용이할 것이다.
  • 하지만 데이터 분석 관점에서는, 불필요한 column 까지 읽어야 한다는 단점이 존재한다.

Column-oriented Database

Column-oriented Database
  • Column-oriented Database 에서는 위와 같이 column 별로 데이터가 저장된다.
  • 필요한 column 에 해당하는 정보만 가져와서 집계할 수 있다.

데이터의 분산 처리 : Massive Parallel Processing

Massive Parallel Processing(MPP)

Massive Parallel Processing
  • 멀티코어를 활용하여 연산을 동시에 분산시켜서 처리하는 것을 말한다.
  • 데이터를 여러 디스크에 분할하여 저장하고, 여러 멀티코어에서 각각의 디스크를 읽어들여서, 병렬적으로 데이터를 집계한다.
  • 이러한 형태의 데이터베이스를 MPP Database 라고 하고, Data Warehouse 나 데이터 분석용 데이터베이스에서 많이 사용된다.

Column-oriented Database 로 데이터를 압축하고,
MPP 분산 처리하여
데이터를 빠르게 집계할 수 있다.

Data Pipeline 에 미친 영향

Data Mart

OLAP cube

Column-oriented Database 나 MPP 가 없었을 때는, 위와 같은 OLAP(Online Analytical Processing) cube 를 활용했다.

분석에 필요한 모든 “dimension 의 조합" 에 대해 미리 데이터 집계를 하여, 그 결과를 테이블로 저장한다. 그리고 dashboard 에서는 필요한 조합에 해당하는 값을 가져와서 보여준다.

하지만 MPP 를 통해서 데이터 집계 속도가 빨라졌기 때문에, 위와 같이 결과를 미리 저장할 필요가 없어졌다. 즉, 쿼리를 그때그때 실행하여 dashboard 로 보여주게 된다.

Data Mart 의 비정규화

또한, Column-oriented Database 를 통해서 데이터가 압축할 수 있게 되었기 때문에, 데이터를 비정규화하여 저장할 수 있게 되었다.

3번 그림과 같이, 분석에 필요한 모든 dimension 을 하나의 테이블에 추가하여 거대한 팩트 테이블을 만드는 것이 가능해졌다.

Data Warehouse

Data Warehouse

Data Warehouse 에서도 위와 같이, Column-oriented Database 를 사용하여, 데이터를 빠르게 가공할 수 있게되었다.

즉, Data Warehouse 에서 Data Mart 로 데이터를 추출하는 과정이 빨라질 수 있었다.

Outro

Column-oriented Database 는 데이터를 row 가 아닌 column 별로 저장하여, 데이터의 압축과 분산 처리를 가능하게 만든 데이터베이스이다.
데이터 집계에 필요한 column 만 가져올 수 있고, 데이터 압축이 용이하다는 장점을 가지고 있다.

개인적으로는 BigQuery 를 사용하면서 체득하고만 있었던 내용을, 개념화하여 정리할 수 있어서 의미있는 시간이었다.

다음에는 이어서 BigQuery 의 기본 기술 중 하나인 Dremel 을 살펴보며, nested data 를 어떻게 Column-oriented Database 로 저장하는지를 알아볼 예정이다.

Reference

--

--