분산데이터베이스의 개념이 나오면서 데이터를 잘개 쪼개놓는 아키텍처가 많은 데이터베이스에 적용되었다.
대량의 ROW가 있는 테이블을 조회할 때 인덱스 처럼 나눠져만 있다면 쉽게 접근할 수 있는 개념과 비슷하다.
흔히 일별, 월별 등으로 파티션을 하는데 이 때 우리는 파티셔닝이라는 개념을 접하지만 샤딩이라는 개념은 생소할 수도 있다.
샤딩 vs 파티셔닝 (Sharding vs Partitioning)
회원ID |
회원명 |
회원등급 |
012 |
호날두 |
A |
100 |
메시 |
A |
299 |
벤제마 |
B |
456 |
음바페 |
C |
1. 샤딩? 수평 분할 ( Horizontal Partitioning )
위와 같은 테이블이 있을 때 회원ID를 기준으로 샤딩을 적용하면 회원ID가 1~100까지 1개 테이블, 2~200까지 1개테이블, 3~300까지 1개 테이블 등.. 이런식으로 수평으로 나눈 것을 바로 샤딩이라고 한다.
보통 MSSQL 기준으로 봤을 때 일자 컬럼을 두고 그 일자별로 파티셔닝하는 것을 샤딩이라고 생각하면 좋을 것 같다.
2. 파티셔닝? 수직 분할 ( Horizontal Partitioning )
위와 같은 테이블이 있을때 스키마를 변경해서(KEY 기반으로 컬럼을 쪼개서) 수직으로 분할해서 쪼개놓는 것이다.
즉, 회원ID와 회원명 컬럼이 있는 테이블, 회원ID와 회원등급 컬럼이 있는 테이블 형식으로 KEY를 중심으로 수직 분할한 개념이다.
이해가 어려운 분들은 MSSQL 기준으로 컬럼스토어 인덱스로 이해하면 될 것이다.
그럼 무슨 장점이 있을까?
샤딩이든 파티셔닝이든 필요한 데이터만 빠르게 조회할 수 있기 때문에 쿼리 자체가 가볍다.
샤딩(수평 분할)의 경우에는 오래되서 조회가 안되는 데이터를 클라우드에 올리거나 별도의 디스크에 저장해서 운영 상의 스토리지 이득을 볼 수 있다.
파티셔닝(수직 분할)의 경우에는 한 테이블을 SELECT 하면 결국 모든 컬럼을 메모리에 올리게 되므로 필요없는 컬럼까지 올라가서 한번에 읽을 수 있는 ROW가 줄어든다. 이는 I/O 측면에서 봤을 때 필요한 컬럼만 올리면 훨씬 많은 수의 ROW를 메모리에 올릴 수 있으니 성능상의 이점이 있다.
또한 수직 분할은 같은 타입의 데이터가 저장되기 때문에 저장 시 데이터 압축률을 높일 수 있다.
궁금한 점이 있으면 댓글 남겨주세요~
'Programming > MSSQL' 카테고리의 다른 글
MSSQL 현재 붙어있는(접속되어 있는) 세션 정보 확인하는 쿼리 (0) | 2018.08.03 |
---|---|
MSSQL 백업 내역 조회하는 쿼리 (0) | 2018.08.01 |
MSSQL EMERGENCY 모드로 DB, TABLE 복구하기(CHECKDB, CHECKTABLE) (0) | 2018.07.23 |
MSSQL에서 탭, 엔터 제거하기(\t \n \r 제거) (0) | 2018.07.19 |
MSSQL 백업파일로 DB 복원하기 (0) | 2018.07.17 |