본문 바로가기
DB

[DB] partitioning, sharding, replication

by 오렌지마끼야또 2024. 3. 22.
728x90
반응형

 

 

 

 

 

❓  partitioning 종류

 

vertical partitioning 수직 파티셔닝

 

 

정규화 1NF, 2NF, 3NF, BCNF 를 통해 테이블을 나누는 것도 vertical partitioning 입니다.

 

 

어떤 테이블에서 select를 통해 특정 컬럼만 가져오는 쿼리를 만들었을 때, 디스크에서 메모리로 데이터를 가져올 때 where 조건에 맞는 것들 중에 select 한 특정 컬럼만 골라서 가져오는 것이 아니라 일단 해당하는 로우를 모두 가져오게 됩니다. 그럼 이때 어떤 컬럼이 사이즈가 매우 큰 데이터(ex 게시글 본문)를 가지고 있는데 select 한 컬럼이 아니라면 필요없는 데이터를 가져온게 되니 메모리 낭비가 발생합니다. 이럴 때 vertical partitioning 을 하면 효율적입니다.

 

이런 상황 외에도 민감한 정보에 대해 접근 제한을 걸기 위해, 자주 사용하는 컬럼과 그렇지 않은 컬럼을 나누기 위해 등등 여러 목적으로 vertical partitioning 을 수행할 수 있습니다. 전체 데이터가 필요하면 join 을 사용합니다.

 

 

 

 

horizontal partitioning 수평 파티셔닝

 

 

horizontal partitioning 을 하는 여러가지 방법이 있는데 가장 많이 사용하는 hash-based 를 보겠습니다.

hash function 을 만들고 partition key로 사용할 컬럼을 넣어서 나오는 값으로 테이블을 새로 생성합니다. 나오는 값은 hash function 을 정의한 것에 따라 여러개가 될 수 있습니다. 아래는 user_id를 넣었을 때 0과 1이 나오는 hash function 을 사용해서 partitioning 한 것입니다.

 

 

 

 

 

 

 

 

❓  sharding 이란

 

sharding 은 partitioning 한 테이블을 서로 다른 DB 서버에 저장하는 것입니다.

 

horizontal partitioning은 파티셔닝 한 테이블들이 같은 DB 서버에 저장되는 것이고

 

 

sharding 은 다른 DB 서버에 저장하는 것입니다.

 

이렇게 함으로써 부하를 분산시킬 수 있습니다.

 

이렇게 sharding 을 한 경우 기존의 partition key(user_id) 를 shard key라고 하고, partition 을 저장한 각각의 DB 서버를 shard 라고 합니다.

 

 

 

 

 

❓ replication 이란

 

DB 서버를 복제하는 것입니다.

 

복제해 놓고 원본 DB에 문제가 생기면 바로 복사본으로 트래픽을 전환해서 정상적으로 서비스 될 수 있도록 하는 특징을 고가용성(HA, High Availability) 이라고 합니다.

 

또한 복사본으로도 read 하는 쿼리를 수행해서 부하를 분산시킬 수 있습니다.

 

 

 

 

요약

 

 

 

 

 

 

 

참고

 

https://www.youtube.com/watch?v=P7LqaEO-nGU&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=30&t=739s

 

728x90
반응형

댓글