샤드(shard) 의 정의
샤드(shard) 란 데이터베이스를 물리적으로 분할하는 기법 중에서 수평분할 즉 수평 파티셔닝(partitioning)
을 했을 때 그 분할된 파티셔닝을 가리키는 말이다.
데이터베이스를 분할 하는 이유는 다 아시겠지만 데이터의 양이 많아지면 그 만큼 성능이나 퍼포먼스가
떨어지게 마련이기 때문에 가용성,확장성,성능향상을 위해 물리적으로 데이터베이스를 분할하는 것이다.
샤드(shard) 분할 기준
샤드(shard) 단위의 결정은 분할 즉 샤딩(sharding) 을 어떤 기준으로, 어떤것을 Key로해서 분할(샤딩)
하느냐에 달려있다.
위 그림에서 보는 봐와 같이 하나의 물리적 데이터베이스에 통으로 들어있는 대용량 DB를
어떤 분리 기준에 의한 분할 알고리즘을 통해서 Shard Key를 생성하고 이 Key값을 기준으로
해당 샤드(shard) DB에 저장하고 있다.
이 때 shard key를 정하는 방법에 따라 다음과 같이 분류할 수 있다.
구분 | 내용 | 특징 | 사례 |
vertical partitioning |
테이블 컬럼증가에 따른 수직으로 분할 | -구현간단 -각 서버의 데이터가 커지 면 추가 샤딩(sharding)이 필요 |
회원마스터의 컬럼들을 기준으로 분리 - 회원 개인정보 shard - 회원 가족 shard - 회원 학력 shard |
range based partitioning | 테이블 레코드의 증가에 따른 날짜나 지역 등으로 수평 분할 |
데이터를 분할하는 방법 이 예측 가능해야 함. |
년도별로 테이블을 생성하거나 지역별로 테이블을 생성해서 저장 |
Key or Hash Based Partition | 엔터티값을 hash 함수에 넣어서 나온 hash 값을 기준으로 어느 서버에 저할지를 결정 | 균등분할 | 사용자ID가 숫자로만 구성된 경우 이 ID를 일정한 숫자로 나눈 나머지값을 기준으로 저장할 서버 결정 |
DB 확장성 확보 방안
샤드(shard) 와 파티셔닝(partitioning) 의 차이점
파티셔닝(partitioning)이란 성능(performance), 가용성(availability) 또는 유지보수용이성(maintainability)를
목적으로 논리적인 데이터 엘리먼트들을 다수의 엔티티(table)로 쪼개는 행위를 뜻하는 일반적인
데이터베이스 용어이다.
샤딩(sharding)은 수평 파티셔닝(horizontal partitioning)과 동일하다.
데이터베이스를 샤딩하게 되면 기존에 하나로 구성될 스키마를 다수의 복제본으로 구성하고 각각의 샤드에
어떤 데이터가 저장될지를 shard key를 기준으로 분리한다.
예를 들면, 나는 고객의 데이터베이스를 CustomerId를 샤드키로 사용하여 샤딩하기로 하였다.
0 ~ 10000 번 고객의 정보는 하나의 샤드(shard)에 저장하고 10001 ~ 20000 번 고객의 정보는
다른 샤드(shard)에 저장하기로 하였다.
요약하면 파티셔닝은 퍼포먼스, 가용성, 정비용이성등의 목적을 위해 논리적인 엔티티들을 다른 물리적인
엔티티들로 나누는것을 의미하는 일반적인 용어이다. 수평 파티셔닝 또는 샤딩은 스키마 복제 후
샤드키를 기준으로 데이터를 나누는것을 말한다. 수직 파티셔닝(vertical partitioning)은 스키마를 나누고
데이터가 따라 옮겨가는것을 말한다. (발췌: 아이군의 블로그 http://theeye.pe.kr/archives/1917)
'데이터베이스' 카테고리의 다른 글
연관규칙의 측정도구 - 지지도, 신뢰도, 향상도 (0) | 2019.09.28 |
---|---|
연관규칙 : Apriori 알고리즘 - 지지도 (0) | 2019.09.27 |
데이터베이스의 연관규칙(Association Rule) 분석 (2) | 2019.09.26 |
데이터베이스 Isolation Level (고립수준) (1) | 2019.09.24 |
데이터베이스의 ACID (0) | 2019.09.23 |