테이블 간에 중복된 데이터를 최소화
저장 용량의 최적화 가능
데이터의 무결성 유지
쿼리 내의 Join을 많이 사용하게 되어, 응답시간 저하를 초래할 수 있음
시스템의 성능 향상, 개발과정의 편의성, 운영의 단순화를 위해 사용
정규화 원칙에 위배되는 행위를 의도적으로 수행하게 되는 일련의 과정
정규화 이후에 수행하는 것 (반정규화부터 수행하는 것은 아님)
대량의 범위를 자주 처리해야 하는 경우
특정 범위의 데이터만 자주 처리하는 경우
요약/집계 정보가 자주 요구되는 경우
Join으로 인한 성능 저하가 예상되는 경우
1:1 관계의 테이블 병합
1:N 관계의 테이블 병합
수퍼/서브 타입 테이블 병합
수직 분할(집중화된 일부 컬럼을 분리)
수평 분할(행으로 구분하여 구간별 분리)
테이블 추가(중복테이블, 통계테이블, 이력테이블, 부분테이블)
공통접 : 큰 데이터를 여러 서브셋으로 나누어 저장하는 기술
사용 이유 : 성능 향상과 확장성
하나의 인스턴스의 여러 테이블에 나누어 저장
인덱스 크기가 작아짐으로 조회시간을 줄임
큰 테이블을 제거하여 관리에 용이
종류
Horizontal Partitioning
데이터의 개수를 기준으로 Partitioning
동일한 스키마를 가진 데이터를 분산
Sharding도 Horizontal Partitioning의 한 종류로 볼 수 있다.
Vertical Partitioning
테이블의 컬럼을 기준으로 데이터 분할
정규화된 데이터를 분리하는 과정
자주 사용하는 컬럼을 분리하여 성능 향상
여러 인스턴스로 나눠서 저장
여러 대의 컴퓨터 혹은 여러 개의 DB에 분산하여 저장한다는 의미
쿼리 성능 향상과 더불어 부하가 분산된다는 이점이 있다.
여러 샤드 노드로 데이터가 분산 저장
적절한 샤드키를 지정하여 해당 데이터가 존재하는 인스턴스를 찾을 수 있게 해야 한다.
유저가 많은 경우에 사용
주의점
샤드키를 잘못 선정할 경우 한쪽으로 치우치게 될 수 있음
데이터베이스 서버간의 연결 과정이 많아져 비용이 증가할 수 있다.
하나의 서버가 고장나면 데이터의 무결성이 깨질 수 있다.
테이블의 개수가 많아지고 조인이 빈번하게 일어날 경우 반정규화를 통해 하나의 테이블로 합쳐 관리
예시
code_seq | group_seq | code_name | is_use |
---|---|---|---|
1 | 1 | 무기 | 1 |
2 | 1 | 방패 | 1 |
3 | 1 | 갑옷 | 1 |
4 | 2 | 그린 | 1 |
5 | 2 | 옐로우 | 1 |
6 | 2 | 레드 | 1 |
7 | 3 | 일반회원 | 1 |
8 | 3 | 관리자 | 0 |
... | ... | ... | ... |
유익한 정보를 얻을 수 있어서 기쁩니다.