C-Store: A Column-oriented DBMS
https://web.stanford.edu/class/cs345d-01/rl/cstore.pdf
0. 핵심 요약
기존 DBMS는 INSERT/UPDATE를 중심으로 설계되어 있었지만, 데이터 웨어하우스는 대부분의 작업이 읽기(SELECT) 이다.
분석 데이터 베이스는 기존의 DBMS에 비해 쓰기보다 읽기가 압도적으로 많으므로 설계 방식과 다르게 다음을 방향으로 설계 되었다.
- Column 단위 저장
- Projection 기반 저장
- 적극적인 Compression
- Read Optimized Storage
- Snapshot Isolation
- Bitmap Index 활용
1. 기존 문제점
1.1 대부분의 상용 DBMS가 OLTP 중심으로 설계
- Row 단위 저장
- B-Tree Index 중심
- Update 성능 최적화
- Transaction 중심 설계
1.2 Data Warehouse는 select가 중심으로 특정 칼럼만 빠르게 읽는것을 목표로 하지만
기존 Row Store를 Data Warehouse에 사용하면 필요한 컬럼만 조회하더라도 Row 전체를 읽어야 한다.
결국 분석시스템에서는
- 불필요한 Disk I/O
- Cache 낭비
- Memory 사용 증가
1.3 Data Warehouse에서의 데이터 입출력은
- INSERT는 Batch로 수행
- UPDATE는 거의 없음
- DELETE도 거의 없음
기존 DBMS를 Data Warehouse로 쓰면 많은 자원 낭비 발생
2. 해결 방안
2.1 Column-Oriented Storage
기존 Row Store
1 John Seoul 30
2 Jane Busan 25
Column Store
id
1
2
----------------
name
John
Jane
----------------
city
Seoul
Busan
필요한 컬럼만 읽으므로 I/O가 크게 감소됨
2.2 Projection
하나의 테이블을 자주 조회하는 컬럼 조합별로 별도의 저장 구조로 관리
각 Projection은 Position(Row ID)을 통해 다른 Projection과 연결됨
Projection 1
id
price
--------------
Projection 2
id
region
--------------
Projection 3
id
date
처럼 필요한 컬럼 조합(Projections) 을 여러 개 저장
2.3 Compression
평소에는 압축된 데이터를 통해서 sql 함수들을 빠르게 처리
SELECT DISTINCT city;
(Seoul,4)
(Busan,3)
단, row의 데이터를 리턴할때는 압축 해제 후 데이터 리턴
2.4 Bitmap Index
- cardinality 가 낮으면 일반 b-tree index보다 효율적
- 비트 연산으로 비교가 빨라 검색시 유리
3. 결론
데이터 웨어하우스의 설계를 Column Storage를 중심으로 추가적 매커니즘의 결합하여 성능 향상 가능
- Projection
- Compression
- Read Optimized Storage
- Snapshot Isolation (MVCC)
를 통한 Column-oriented를 기준으로 하는 Data Warehouse 용 디비 제안
4. 나의 생각
Column Store의 핵심은 컬럼 저장 자체가 아니라 Projection, Compression, Read Optimized Storage, Snapshot Isolation 등 여러 기술을 하나의 아키텍처로 통합한 것.
특히 Projection <-> Row Store와 가장 큰 차이점과 압축을 통해도 데이터를 도출 할수 있다는 점