쉬운 코드님의 강의 내용을 정리한 글입니다.
강의가 궁금하시다면, 최하단의 링크를 참고해주세요.
파티셔닝은 database table을 더 작은 table들로 나누는 것을 의미한다.
데이터를 가져올 때, 하나의 행을 통으로 가져오기 때문에 필요하지 않은 정보까지 가져올 수 있다.
이는 체감하지 못할 수 있지만, 만약 딸려오는 불필요 데이터가 크다면 조회 성능에 영향을 줄 수 있다.
그렇기 때문에 불필요한 데이터를 파티셔닝 한다면 필요한 데이터들만 포함되어 있는 table에서 필요한 데이터만 읽어 올 수 있어서 성능이 더 좋을 것이다.
horizontal partitioning 의 종류는 hash based, rage based 등 다양하지만 우리는 hash-based horizontal partitioning
으로 좀 더 알아보겠다.
partition key를 기준으로 hash function의 반환 값에 따라 파티셔닝이 진행된다. 이를 통해 같은 partition key를 가지면 같은 스키마에 저장될 수 있다.
하지만 partition key 가 아닌 컬럼으로 조회할 때는 양쪽 테이블을 모두 조회해야 한다.
그렇기 때문에 해당 파티셔닝을 사용하기 전에 아래 사항을 고려해야 한다.
horizontal partitioning 처럼 동작한다. 즉, row를 기준으로 테이블을 나눈다.
하지만 각 partition이 독립된 db 서버에 저장되는 차이점이 있다.
horizontal partitioning 의 경우, 하나의 컴퓨터(DB 서버)에서 partition들을 관리하기 때문에 하드웨어 자원이 한정적이라는 문제가 있다. 이는 서버의 부하로 이어질 수 있다.
샤딩을 통해서 DB 서버의 부하를 분산시킬 수 있다. 그렇기 때문에, 트래픽이 많이 몰리는 DB나 서비스에 샤딩을 사용하면 좋다.
cf. 샤딩에서는 partition key를 shard key라고 하고, 각 partition을 shard라고 부른다.
보조 DB 서버를 두고, 주 DB 서버(master, primary, leader)에서 보조 DB서버(slave, secondary,replica)로 지속적으로 삽입, 삭제, 업데이트에 대한 카피를 하면서 싱크를 맞춘다.
이 때, 보조 서버는 여러 대 일 수 있다.
[DB] 파티셔닝? 샤딩? 레플리케이션? (partitioning? sharding? replication?)