파티셔닝( Partitioning )
- 데이터베이스 table을 더 작은 table들로 나누는 것을 의미합니다.
파티셔닝의 종류
vertical partitioning | horizontal partitioning |
---|---|
column을 기준으로 table을 나누는 방식 | row를 기준으로 table을 나누는 방식 |
vertical partitioning
vertical partitioning의 종류
- 정규화 과정을 통해서 테이블을 나누는 방식
- 자주 사용되지 않고 너무 큰 데이터의 column은 테이블로 나누는 방식
- 민감한 정보에 제한을 더 걸기 위해서 테이블을 나누는 방식
- 자주 사용되는 column과 자주 사용되지 않는 column을 모아 테이블을 나누는 방식
horizontal partitioning
- vertical partitioning은 column을 기준으로 partitioning을 하기 때문에 테이블의 스키마가 변경되지만, horizontal partitioning은 row를 기준으로 partitioning을 하기 때문에 테이블의 스키마는 유지됩니다.
horizontal partitioning이 필요한 이유
- 테이블에 튜플이 점점 추가됨에 따라서 인덱스의 크기도 커지기 때문에 테이블에 읽기/쓰기/수정/삭제가 있을 때마다 인덱스에서 처리되는 시간도 조금씩 늘어납니다.
horizontal partitioning 종류
- hash-based horizontal partitioning은 특정 attribute를 해쉬하여 나온 값을 기준으로 partitioning을 하는 것을 말합니다.
- range-based horizontal partitioning은 특정 attribute의 범위를 정하여 partitioning을 하는 것을 말합니다.
hash-based horizontal partitioning
- 특정 attribute를 hash하여 hash에 나온 값을 기준으로 테이블을 나누어 저장하는 방식을 말합니다. hash에 사용된 attribute를 partition key라고 합니다.
hash-based horizontal partitioning 주의점
- partition key는 가장 많이 사용될 패턴에 따라 선택해야 테이블을 나눈 이점을 최대한 얻을 수 있습니다.
- 한 번 partition을 나눈 테이블에 partition을 추가하는 것은 굉장히 어렵습니다. 이미 저장된 데이터의 partition key를 기준으로 재해쉬하여 다시 partition하여 저장해야하기 때문입니다.
sharding
- sharding은 horizontal partitioning으로 나누어진 table들을 각각의 DB서버에 저장하는 방식을 말합니다.
- sharding에서 partition key를 shard key라고 부릅니다. 그리고 각 partition을 shard라고 부릅니다.
sharding이 필요한 이유
- horizontal partitioning은 결국 하나의 DB서버에서 나누어진 partition을 관리하기 때문에 각 partition에 대한 요청도 하나의 DB서버에 몰려 부하가 집중됩니다. 그렇기 때문에 DB 서버의 부담을 줄이기 위해서 sharding을 통해 각 shard을 독립된 DB서버에 저장하여 각 shard에 대한 요청을 분산하여 DB서버의 부하를 줄일 수 있습니다.
replication
- DB를 복제해서 여러 대의 DB 서버에 저장하는 방식을 말합니다.
- 기존 DB를 master/primary/leader라고 부르며 복사된 DB를 slave/secondary/replica라고 부릅니다.
- secondary는 primary와 데이터가 동일한 상태에서 primary에 요청되어 변경된 데이터들을 계속해서 확인하여 sync를 맞춥니다.
- secondary는 여러 대가 있을 수 있습니다.
replication의 High availability(고가용성) 이점
- 서비스중에 primary DB서버에 문제가 생겼다면 secondary중에 하나가 primary를 대체하여 서비스가 정상적으로 유지될 수 있도록 할 수 있습니다. 이처럼 자동적으로 장애를 극복하여 서비스가 유지되도록 하는 것을 failover라고 합니다.
replication의 읽기/쓰기 분산 이점
- 대부분의 서비스는 write보다는 read 트래픽이 훨씬 많습니다. write는 동기화를 확실히 맞출 필요가 있지만 대부분의 서비스에서 read는 정확한 동기화까지는 필요가 없기 때문에 read를 secondary로 처리할 수 있도록 하여 부하 분산을 할 수 있습니다.
참고 자료 : https://www.youtube.com/watch?v=P7LqaEO-nGU&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=26
'데이터 베이스 > RDBMS' 카테고리의 다른 글
ODBC(Open Databse Connectivity)란? (0) | 2023.03.05 |
---|---|
DBCP( DB Connection Pool )란? (0) | 2023.02.13 |
Clustered Index와 Non-Clustered Index (0) | 2023.02.11 |
DB index란? 그리고 index의 기본 동작 방식과 사용법 (0) | 2023.02.10 |
DB 정규화란? 그리고 1NF, 2NF, 3NF, BCNF 정규화하기 (0) | 2023.02.10 |