일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Srping AOP
- 스페인 준비물
- sprintboot
- 마드리드
- 세비야
- elk
- 코프링
- b-tree index
- git명령어
- 본식후기
- 아펠가모선릉
- 400에러
- 코틀린 함수
- 스페인
- 바르셀로나
- 아펠가모
- Kotlin
- kopring
- db index
- 아펠가모 선릉
- @Component
- HTTP
- kotiln
- http상태코드
- 코틀린
- c# scv
- 관심지향프로그래밍
- 스프링 AOP
- HTTP #웹기술
- 그라나다
- Today
- Total
끄적이는 메모장
[DB] 파티셔닝(Partitioning) 본문
RDBMS에서 Table의 크기가 너무 크다면 관리 측면에서 이슈가 발생할 수 있음
이슈는 용량의 한계와 성능의 저하를 뜻함
파티셔닝이란?
- 거대한 Table을 작은 단위로 나누어 관리하는 기법
- 데이터베이스를 분산처리 하는 것
성능적 측면에서
Query의 성능을 향상시킴, Full Scan을 줄임(Access범위의 축소), 대용량 데이터의 쓰기에 효율적, DML 경합 분산 (SELECT, INSERT, UPDATE, DELETE가 분산 될 수 있음)
가용성 측면에서
전체 데이터에 대한 훼손 가능성이 줄어듦(영역별 독립적인 백업이나 복구가 가능), 데이터 가용성이 향상
관리용이성 측면에서
작은 Table의 관리가 큰 Table의 관리보다 용이
장점
- 가용성이 좋음
- 관리가 용이
- 파티션별 장애대응이 수월
- I/O분산으로 효율이 좋음
- 즉 데이터 조회 및 수정이 빠름
단점
- 테이블간 Join 비용이 증가
- 장애 시 데이터 무결성이 깨질 수 있는 위험
- table과 index는 같이 파티셔닝 해야함
종류
수평 파티셔닝 (샤딩)
- 스키마를 유지한채로 데이터를 나누는 것을 말함
이름1 | 주소1 | 번호1 | 특징1 |
이름2 | 주소2 | 번호2 | 특징2 |
이름3 | 주소3 | 번호3 | 특징3 |
- 동일한 스키마를 가진 데이터를 둘 이상의 테이블로 분산하여 저장
- 샤드키를 기반으로 분산 저장
특징
- 데이터가 자연스럽게 분산됨 (개수를 기준으로)
- 분산된 테이블에 대한 데이터수가 작아지므로 성능이 향상됨
- 데이터를 찾는 과정이 복잡해짐 (지연이 증가)
- 장애 시 무결성이 깨질 수 있음
수직 파티셔닝
- 컬럼을 쪼개는 방식
- 스키마를 나누고 데이터를 옮기는 방식 (정규화하는 과정과 비슷하지만 차이점은 이미 정규화된 데이터를 분리한다는 점)
특징
- 사용이 자주되는 컬럼을 분리시켜 성능 향상을 모색할 수 있음
- 필요한 컬럼만 읽기때문에 효율이 증대
- 동일한 타입의 데이터가 저장될 확율이 높으므로 저장시 데이터의 압축률을 증대 시킬 수 있음
분할 기준
범위 분할(range partitioning)
- 분할 키 값이 범위 내에 있는지 여부로 구분
- 년도, 시간, 우편번호 등의 범위를 갖는 데이터가 분할 기준이 되는 경우
목록 분할(list partitioning)
- 분할 키는 특정 컬럼의 목로에 들어있는 값을 기준으로 함
- 국가, 도시 등을 기준으로 사용하는 경우
해시 분할(hash partitioning)
- 해시 함수에 의해 결정된 키를 기분으로 함
- 데이터를 균등하게 배분할 수 있음
- 범위가 존재하지 않는 데이터를 가지고 있을 때 적합함
- 각 파티션된 테이블에 어떤 값이 들어있는지 알수 없음
합성 분할 (composite partitioning)
- 위의 기술들을 복합적으로 사용하는 방법
- 예시) 범위 분할 후 분할 된 데이터를 해시 분할 하는 등
참고
https://nesoy.github.io/articles/2018-02/Database-Partitioning
https://en.wikipedia.org/wiki/Partition_(database)
https://gmlwjd9405.github.io/2018/09/24/db-partitioning.html
'웹기술 개발자 되기 > DB기술' 카테고리의 다른 글
[DB] 데이터베이스 정규화 (0) | 2020.04.17 |
---|---|
[DB] 트랜잭션(Transaction) (0) | 2020.04.15 |
[DB] Index란 (0) | 2020.04.14 |