데이터 분석

[데이터분석] Columnar Database 는 무엇일까?

슬라이스할라피뇨 2023. 10. 4. 22:10

다양한 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는 각각 어느 때 사용이 될까? 이 내용은 다음에 추가로 공부해보려고 한다.