DB
[DB ]rowstore vs columnstore (row oriented db vs column oriented db)
Ray123
2024. 2. 4. 19:57
다음과 같은 테이블이 있다고 하자.
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에 좀 더 적합하다.