다음과 같은 테이블이 있다고 하자.

 

name gender age address
Jho male 27 seoul
Kim male 29 busan
Park female 30 suwon

 

 

이때 rowstore는 다음과 같이 데이터를 행 단위로 저장하는 것을 말한다.

 

Jho male 27 seoul Kim male 29 busan Park female

 

 

insert, update, delete를 수행할 경우 row단위로 묶어서 빠르게 처리를 해줄 수 있어서 효율적이다. 반면 모든 사람의 평균 나이처럼 특정 컬럼에 대한 집계가 필요한 경우는 필요없는 컬럼에 대한 read도 하게 되므로 비효율적이다.

 

즉, rowstore는 OLTP에 좀 더 적합하다.

 

 

 

colomnstore는 다음과 같이 열 단위로 저장하는 것을 말한다.

 

Jho Kim Park male male female 27 29 30 seoul

 

 

특정 컬럼(들)에 대한 집계가 필요할 시 필요한 컬럼들이 담긴 디스크 블록들만 읽을 수 있으므로(즉 disk I/O가 감소) 효율적이다. 또한 각 블록들이 가지고 있는 값들은 같은 타입이기 때문에 큰 압축률을 기대할 수 있다는 장점도 있다. 반면 insert, update, delete 수행시 적절한 위치를 찾기 위해 모든 데이터를 순회하므로 비효율적이다. 예를 들어, insert를 할 경우 새로운 레코드의 각 컬럼 값들이 삽입될 적절한 위치를 찾는 과정이 필요하다.

 

즉, columnstore는 OLAP에 좀 더 적합하다.

 

'DB' 카테고리의 다른 글

Scala Subquery를 LEFT JOIN으로 바꿔 성능 높이기  (1) 2024.03.04
[DB] 실행 계획이란  (1) 2024.02.16
[짧] Hard delete vs Soft delete  (1) 2023.08.06

+ Recent posts