❓ 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
'DB' 카테고리의 다른 글
DB 저장 글 (0) | 2024.07.09 |
---|---|
[DB] 인덱스에서 B tree 를 쓰는 이유 (0) | 2024.03.20 |
[DB] 인덱스, unique index, multicolumn index, hash index (0) | 2024.03.19 |
[DB] super key, candidate key, primary key, unique key, 1NF, 2NF, 3NF, BCNF (0) | 2024.03.18 |
[DB] ACID, 동시성 제어, serializabiliy, recoverabiliy, lock, MVCC, isolation 레벨 (0) | 2024.03.18 |
댓글