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 기반의 저장 방식을 사용하는 것이 좋다.
각각의 상황에 맞게 이 둘을 적절히 사용하는 것이 중요하다.