DB | 파티셔닝, 샤딩, 레플리케이션 개념 알아보기

yeonk·2024년 1월 11일
0

database

목록 보기
34/34
post-thumbnail

쉬운 코드님의 강의 내용을 정리한 글입니다.
강의가 궁금하시다면, 최하단의 링크를 참고해주세요.





파티셔닝(Partitioning)


파티셔닝은 database table을 더 작은 table들로 나누는 것을 의미한다.

데이터를 가져올 때, 하나의 행을 통으로 가져오기 때문에 필요하지 않은 정보까지 가져올 수 있다.
이는 체감하지 못할 수 있지만, 만약 딸려오는 불필요 데이터가 크다면 조회 성능에 영향을 줄 수 있다.

그렇기 때문에 불필요한 데이터를 파티셔닝 한다면 필요한 데이터들만 포함되어 있는 table에서 필요한 데이터만 읽어 올 수 있어서 성능이 더 좋을 것이다.



파티셔닝의 종류

  • vertical partitioning: column을 기준으로 table을 나누는 방식
    • 컬럼 기준으로 테이블을 분리하는 정규화(normalization) 도 여기에 포함될 수 있다.
    • 이미 정규화가 되어 있다고 해도 파티셔닝을 통해 성능을 높일 수 있다.
    • 민감한 정보들에 제한을 더 걸어서 쉽게 접근하지 못하게 하는 목적도 있다.
    • 자주 사용되는 데이터들을 하나로 묶어서 사용할 수 있다는 이점이 있다.
  • horizontal partitioning: row를 기준으로 table을 나누는 방식
    • 테이블의 스키마는 변화 없이 유지된다.
    • 테이블의 크기가 커질수록(데이터가 쌓일수록) 인덱스의 크기도 커지고, 테이블에 읽기/쓰기가 있을 때마다 인덱스에서 처리되는 시간도 조금씩 늘어난다. 이 때 사용할 수 있는 방식이 horizontal partitioning이다.
    • horizontal partitioning을 하는 여러 방범론이 존재한다.

horizontal partitioning 의 종류는 hash based, rage based 등 다양하지만 우리는 hash-based horizontal partitioning으로 좀 더 알아보겠다.
partition key를 기준으로 hash function의 반환 값에 따라 파티셔닝이 진행된다. 이를 통해 같은 partition key를 가지면 같은 스키마에 저장될 수 있다.
하지만 partition key 가 아닌 컬럼으로 조회할 때는 양쪽 테이블을 모두 조회해야 한다.

그렇기 때문에 해당 파티셔닝을 사용하기 전에 아래 사항을 고려해야 한다.

  • 가장 많이 사용될 패턴에 따라 partition key를 정하는 것이 중요하다.
  • 데이터가 균등하게 분배될 수 있도록 hash function을 잘 정의하는 것도 중요하다.
  • hash-based horizontal partitioning은 한 번 partition이 나눠져서 사용되면 이후에 partition을 추가하기 까다롭다.





샤딩(sharding)


horizontal partitioning 처럼 동작한다. 즉, row를 기준으로 테이블을 나눈다.
하지만 각 partition이 독립된 db 서버에 저장되는 차이점이 있다.

horizontal partitioning 의 경우, 하나의 컴퓨터(DB 서버)에서 partition들을 관리하기 때문에 하드웨어 자원이 한정적이라는 문제가 있다. 이는 서버의 부하로 이어질 수 있다.
샤딩을 통해서 DB 서버의 부하를 분산시킬 수 있다. 그렇기 때문에, 트래픽이 많이 몰리는 DB나 서비스에 샤딩을 사용하면 좋다.

cf. 샤딩에서는 partition key를 shard key라고 하고, 각 partition을 shard라고 부른다.





레플리케이션(replication)


보조 DB 서버를 두고, 주 DB 서버(master, primary, leader)에서 보조 DB서버(slave, secondary,replica)로 지속적으로 삽입, 삭제, 업데이트에 대한 카피를 하면서 싱크를 맞춘다.
이 때, 보조 서버는 여러 대 일 수 있다.

  • replication의 장점
    • 고가용성(High availability, HA) 보장: primary DB 서버에 문제가 생기면 빠르게 secondary DB서버로 작업을 처리할 수 있다(failover).
    • read 쿼리를 분산시킬 수 있다 (트래픽을 나눠 처리할 수 있다).





정리


  • 파티셔닝(partitioning): table을 목적에 따라 작은 table들로 나누는 방식
  • 샤딩(sharding): horizontal partitioning 으로 나누어진 table들을 각각의 DB 서버에 저장하는 방식
  • 레플리케이션(replication): DB를 복제해서 여러 대의 DB 서버에 저장하는 방식





참고 자료


[DB] 파티셔닝? 샤딩? 레플리케이션? (partitioning? sharding? replication?)

0개의 댓글