Columnar Storage에 대해 알아보자

매우 많은 데이터를 어떻게 저장하고 처리할까

2024-10-21 · 5분 · 조회 4

사내 Tech 스터디에서 발표된 내용을 짧게 정리하며 공부한 내용입니다.

내가 근무하고 있는 회사에서는 데이터 수집을 기반으로 하는 Ad-Tech 회사를 지향하고 있다.
그래서 많은 데이터를 처리 & 분석하기 위해, 혹은 처리한 데이터를 저장하는 방식에 대해서 다뤄보았다.

문제 인식

흔히 사용하는 관계형 데이터베이스를 생각해보자.

관계형 데이터베이스는 Row Storage 방식으로 데이터를 저장한다.
이 방식은 데이터를 행 단위로 저장하기 때문에 데이터를 저장하는 속도가 빠르다.

하지만, 데이터를 읽을 때 필요한 컬럼만 읽을 수 없어, 불필요한 데이터를 읽어야 하는 경우가 발생한다.
또한, 각 열에 대한 데이터들은 형식과 유형이 다르기 때문에 압축률이 낮아 저장공간을 많이 차지한다.

그렇다면 Columnar Storage는?

Columnar Storage는 데이터를 Column 단위로 저장하는 방식이다.

이 방식은 필요한 컬럼만 읽을 수 있기 때문에 불필요한 데이터를 읽지 않아도 된다.
또한, 열에 대한 데이터들은 형식과 유형이 같기 때문에 적절한 압축 알고리즘을 사용한다면 압축률이 높아 저장공간을 적게 차지한다.

하지만, 데이터를 저장할 때 컬럼 단위로 저장하기 때문에 데이터를 쓰는 속도가 느릴 수 있다.

OLTP vs OLAP

DB기준으로 데이터 처리 방식을 나눌 수 있다.

  • OLTP는 Online Transaction Processing의 약자로, 실시간 트랜잭션 처리를 위한 시스템이다.

    • 트랜잭션을 통해 데이터 일관성을 유지하며, 주로 Row Storage 방식을 사용한다.
    • 실시간으로 변화하는 데이터를 처리하기 때문에, 데이터를 쓰는 작업에 효과적이지만,많은 데이터를 읽는 작업에는 적합하지 않다.
    • ex. MySQL, PostgreSQL...
  • OLAP는 Online Analytical Processing의 약자로, 분석적 처리를 위한 시스템이다.

    • 대규모 분석을 위해 데이터를 처리하기 때문에, Columnar Storage 방식을 사용한다.
    • 많은 데이터를 읽는 작업에 효과적이고, 트랜잭션을 처리할 순 있지만, OLTP에 비해 느리다.
    • ex. Redshift, BigQuery, Snowflake...

File 관점에서의 Row, Column

DB가 아닌 파일 시스템에서도 효율적인 방식을 위해 Column 방식을 사용할 수도 있다.

Row 기반의 데이터 저장 형식

  • ex. csv, json 등

Column 기반의 데이터 저장 형식

  • ex. Apache Parquet, Apache ORC 등

결론

데이터 분석, ML같이 대용량 데이터를 다루고 싶다면 Column 기반의 저장 방식을 사용하는 것이 좋다.
실시간 트랜잭션 처리가 필요하다면 Row 기반의 저장 방식을 사용하는 것이 좋다.

각각의 상황에 맞게 이 둘을 적절히 사용하는 것이 중요하다.

Home
Posts
Notes