티스토리 뷰

면접 질문

[면접준비] 파티셔닝

lkh's 2019. 3. 18. 16:22

대용량 테이블이나 인덱스를 동일한 논리적 속성을 가진 작은 단위로 분할하는 것을 파티셔닝이라고 한다. 물리적으로 분할은 했지만, 애플리케이션은 파티셔닝을 인지하지

못한다. 큰 테이블을 분할하여 작은 테이블로 나누었기 때문에 관리 측면에서의 편의성 제공한다. 파티셔닝을 사용하면 아래와 같은 효과를 기대할 수 있다.


 - 데이터 풀스캔 시, 엑세스의 범위를 줄여 성능 향상

 - 각 파티션별로 백업 및 복구 작업 가능

 - 물리적으로 여러 영역으로 파티셔닝했기 때문에 전체 데이터가 훼손되는 가능성 감소

 - 파티션 단위로 디스크 I/O를 분산해 부하 감소 가능


하지만, 장점만 있지는 않다. 단점도 존재한다. 


 - 테이블간의 JOIN 많이 발생하여 비용 증가

 - 테이블과 인덱스를 별도로 파티셔닝이 불가 (테이블과 인덱스는 항상 함께 파티셔닝 해야한다)


 (1) 레인지 파티셔닝


 특정한 칼럼의 정렬값을 기준으로 분할하는 기업을 의미한다. 주로 순차적인 데이터를 관리하는 테이블에서 많이 사용한다.

 예를들어 마케팅 대상들을 조회할 때, 최근 1년 가입자들을 대상으로 하는 것이 유리하다. 레인지 파티셔닝을 하지 않으면 특정 풀스캔 후, 필터를 거쳐야지만 날짜를 기준으로

 정렬해서 파티셔닝한다면, 특정 파티셔닝한 테이블만 조회를 하면 되기 때문에 유리하다. 그러나, 18년 4월, 16년 7월과 같이 특정 기간이 아니라, 특정 월에 대해서 조회를

 했을 때는 효과를 기대하기가 어렵다. 또한 레인지 파티셔닝의 단점은 각각의 파티션이 균일한 데이터 분포도를 가지지 못한다는 것이다.

 예를들어, 특정 기간에 가입자가 많다면 해당 테이블에 데이터가 많이 있을 것이다.


 (2) 리스트 파티셔닝


 데이터들의 값이 서로 이질적이지 않으며, 특정 칼럼에 대해 동일한 데이터를 많이 가지고 있는 경우에 많이 사용된다. 예를들어, 쇼핑몰 가입자 중에서 관심도에 따라 회원들을

 저장한다고 하면, 관심도를 기준으로 분할하면 된다.  레인지 파티셔닝이 정렬을 기준으로 했다면, 리스트 파티셔닝은 칼럼의 특정값을 기준으로 파티셔닝 하는 것이다.


 (3) 해시 파티셔닝

 

 해시 파티셔닝은 특정 칼럼에 해시함수를 적용해서 데이터를 분할하는 방식이다. 레인지 파티셔닝처럼 데이터가 균등하게 분포되어 있는 것이 아닌 경우에 사용된다.

 또한, 레인지 파티셔닝은 각 분할된 테이블의 크기가 균등하지 않았는데 해시 파티셔닝은 분할된 테이블의 크기는 균등하게 하여 밸런스를 유지한다. 


 (4) 수직 파티셔닝


 테이블의 칼럼을 기준으로 파티셔닝하는 기법으로, 정규화와 비슷하다고 생각할 수 있지만, 정규화된 데이터를 나눈다. 

 자주 사용하는 칼럼들을 분리시켜 성능 향상할 수 있다. 불필요한 데이터에 대한 엑세스하는 것이 자주 사용되는 데이터만을 엑세스하기 때문에 빠르다.


 (5) 수평 파티셔닝 == 샤딩


 데이터의 갯수를 분할하는 방식으로서, 데이터의 수가 감소하기 때문에 풀스캔의 대상도 적어지며, 인덱스도 작아진다.

 테이블을 분할할 때, 인덱스도 함께 분할해야하기 때문에 인덱스도 작아지는 것이다.

 그러나, 서버간의 연결과정이 많아지며, 분할된 데이터를 찾는 과정이 복잡하여 지연발생한다. 하나의 서버가 고장나면 데이터의 무결성이 깨질 수 있다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함