데이터베이스(쉬운코드)

29. partitioning, sharding, replication

youbing 2025. 2. 10. 02:03
본 내용은 유튜버 쉬운코드의 강의 "데이터베이스"를 참고하여 작성하였습니다.

 

partitioning

  • database table을 더 작은 table들로 나누는 것
  • vertical partitioning : column을 기준으로 table을 나누는 방식 (예 : 정규화)
  • horizontal partitioning: row를 기준으로 table을 나누는 방식

partitioning 예시

Vertical partitioning 또 다른 예

  • 게시글 목록을 띄울 때 content 부분은 필요하지 않지만 테이블 전체를 secondary storage에서 불러와야 하므로 성능이 안 좋아질 수 있음.
    -> content를 따로 테이블을 분리한다.

예시

 

Horizontal partitioning 예 (hash-based)

해쉬 기반 horizontal partitioning

  • 테이블의 크기가 커질수록 인덱스의 크기도 커진다.
  • 테이블에 읽기/쓰기가 있을 때마다 인덱스에서 처리되는 시간도 조금씩 늘어난다.
  • 해쉬 기반으로 테이블을 바꾸게 되면 어떤 유저의 정보를 알아내는 건 쉽지만 어떤 채널이나 알림 등을 기준으로 정보를 알아내는 것은 어렵다.
    -> 가장 많이 사용될 패턴에 따라 partition key를 정하는 것이 중요!
  • 데이터가 균등하게 분배될 수 있도록 hash functions을 잘 정의하는 것도 중요!
  • hash-based horizontal partitioning은 한 번 partition이 나눠져서 사용되면 이후에 partition을 추가하기 까다롭다.
  • hash based 외에도 range based 등이 있다.

sharding

  • horizontal partitioning처럼 동작
  • 각 partition이 독립된 DB 서버에 저장 (horizontal은 같은 DB 서버에 저장) -> DB 서버 부하 분산 가능
  • partition key를 shard key라고 부름.
  • 각 partition을 shard라고 부름.

replication

  • DB를 복제해서 여러 대의 DB 서버에 저장하는 방식
  • 다른 DB에 문제가 생겼을 때 대체하는 용도로 DB 사용

  • high availability(고가용성)

참고 사항

  • 비슷한 용어들의 개념을 설명하는 목적의 영상입니다. 디테일한 내용들은 추가적인 공부가 필요합니다.