기존에 업무에서는 DB의 데이터 관리가 중요하지 않은 파트였는데, 현재는 대규모 트래픽과 데이터를 다루는 업무를 담당하게 되어서 DB의 데이터 관리가 중요하게 되었습니다.
그러다 보니 DB의 확장성에 대한 문제로 샤딩과 파티셔닝에 관련된 업무를 접하게 되었습니다.
이 참에 해당 내용에 대해서 정리하고 가면 좋을 거 같아 정리해 보겠습니다.
데이터 양이 많아지게 되면 하나의 DB 인스턴스로는 읽고 쓰기를 감당할 수 없습니다.
이 경우 여러 개의 DB 인스턴스가 필요합니다.
이때 확장성을 위해 샤딩, 파티셔닝을 필수적으로 고려하게 됩니다.
샤딩과 파티셔닝은 모두 큰 데이터셋을 여러 서브셋으로 나눈다는 공통점이 있습니다.
파티셔닝 ( Partitioning )
하나의 인스턴스내에서 여러 테이블로 나누어 저장하는 기법
큰 테이블이나 인덱스를 관리하기 쉬운 크기로 분리하는 방법
샤딩 ( Sharding )
여러 인스턴스에 여러 서브셋을 저장하는 기법
물리적으로 다른 데이터베이스에 데이터를 수평 분할 방식으로 분산 저장하는 방법
파티셔닝 장점
데이터를 여러 테이블에 나누어 저장 -> 인덱스의 크기가 작아짐 -> 인덱스를 통한 조회 시간이 줄어들어 성능 향상
이력 데이터의 효울적인 관리 (불필요한 데이터 삭제 작업을 파티션을 추가하거나 삭제하는 방식으로 간단하고 빠르게 해결 가능)
파티셔닝 단점
테이블 간 join 비용 증가
샤딩 장점
쿼리(read, write)를 여러 인스턴스로 분산하여 처리 -> 성능, 확장성 향상
샤딩 단점
다른 샤드끼리 join 할 수 없다
auto increment가 샤드 별로 달라질 수 있다
하나의 트랜잭션에서 두개 이상의 샤드에 접근할 수 없다