다양한 Database 의 형태를 보다 보면 Columnar Database라는 내용이 적혀있는 경우가 있다. 그렇다면 Columnar Database는 무엇일까?
Columnar Database는 "데이터를 Row 기반이 아닌 Column 기반으로 저장하는 형태" 를 뜻하며 Column-oriented Database 라고도 불린다. 아래 예시를 통해 비교해 보자.
일반적인 Dataframe의 경우 아래와 같은 모양으로 데이터가 저장되어 있다. 여러 개의 칼럼이 각 범주를 담당하며 Row에 각 범주에 맞는 값들이 저장된다.

여기에서 만약 우리가 원하는 쿼리가 "Postcode가 11238인 값을 모두 찾아줘" 이라고 가정해 보자.
Row-based database라면 데이터의 형태가 아래와 같은 방식으로 저장되어 있다.
| 209164: 992, BERGEN STREET, Brooklyn, 11216, 3.01E+09, 3030589, BK-08; | Block 1 |
| 295918: 658, FRANKLIN AVENUE, Brooklyn, 11238, 3.01E+09, 3028671, BK-08; | Block 2 |
| 295950: 693, FRANKLIN AVENUE, Brooklyn, 11238, 3.01E+09, 3031110, BK-08; | Block 3 |
| 295952: 695, FRANKLIN AVENUE, Brooklyn, 11238, 3.01E+09, 3031109, BK-08; | Block 4 |
| ~~~ | ~~~ |
따라서 위의 쿼리를 진행하면 데이터가 저장되어 있는 모든 Block을 훑으면서 데이터를 가져오게 된다.

위에서부터 209164, 992, BERGEN STREET, Brooklyn, 11216, 3.01E+09, 3030589, BK-08, 295918, 658, FRANKLIN AVENUE ~~~~ 이런 식으로 진행되기 때문에 우리가 요청한 "Postcode가 11238 인 값을 모두 찾아줘"라는 쿼리에는 상당히 비효율 적인 것이 보일 것이다.
Columnar Database라면 데이터의 형태가 아래와 같이 저장되어 있다.
| Building ID: 209164, 295918, 295950, ~~~ | Block 1 |
| Number: 992, 658, 693, ~~~ | Block 2 |
| Street: BERGEN STREET, FRANKLIN AVENUE, ~~~ | Block 3 |
| Borough: Brooklyn, Brooklyn, ~~~ | Block 4 |
| Postcode: 11216, 11238, ~~~ | Block 5 |
| ~~~ | ~~~ |
따라서 이전의 "Postcode가 11238 인 값을 모두 찾아줘"라는 쿼리를 진행할 경우, 모든 Block을 다 접근할 필요 없이 Block 5에 해당하는 부분만 접근해서 데이터를 가져올 수 있다.
Columnar Database의 첫 번째 장점은, 칼럼 기반의 쿼리를 했을 경우 원하는 데이터에 Access 하는 시간이 많이 줄어든다. 모든 Row를 다 훑고 지나가는 Row-oriented database에 반해 Column-oriented database는 아래와 같이 원하는 칼럼만 쭉 지나가면서 값을 뽑아올 수 있다.

우리가 일반적으로 SQL구문이나 Pandas를 이용해서 필터 등의 조건을 거는 경우 Column 기반으로 적용하는 경우가 많다. 이런 경우 상대적으로 빠른 속도로 데이터를 가져올 수 있을 것이다.
SELECT * from TABLE NAME
WHERE Postcode = 11238;
Columnar Database의 두 번째 장점은, 동일한 형태의 데이터가 저장되어 있는 Column의 데이터 값들을 묶어서 저장하기 때문에 더 효율적으로 데이터를 보관할 수 있다.
그렇다면 Row-oriented Database와 Column-oriented Database는 각각 어느 때 사용이 될까? 이 내용은 다음에 추가로 공부해보려고 한다.
'데이터 분석' 카테고리의 다른 글
| [데이터분석] Marketing Mix Modeling | 마케팅 믹스 모델 (2) - 워크플로우 (0) | 2023.12.10 |
|---|---|
| [데이터분석] Marketing Mix Modeling | 마케팅 믹스 모델 (1) (2) | 2023.12.05 |
| 초보를 위한 마크다운(Markdown) 사용법 정리 (0) | 2023.09.03 |
| 티스토리(Tistory)에 코드 넣는 방법 (코드블럭, Jupyter Notebook) (0) | 2023.09.01 |
| [기본] 데이터의 종류와 유형 (정량적, 정성적, 정형, 반정형, 비정형 데이터) (0) | 2023.08.31 |