📍 10분 테코톡 - [DB] 파티셔닝? 샤딩? 레플리케이션? (partitioning? sharding? replication?)를 보고 정리한 내용이다.
파티셔닝 = 데이터베이스 테이블을 더 작은 테이블들로 나누는 것
파티셔닝 종류
vertical partitioning
horizontal partitioning
샤딩 = horizontal partitioning처럼 동작! 단, 각 partition이 독립된 DB 서버에 저장된다.(차이점)
레플리케이션 = DB를 복재해서 여러 대의 DB 서버를 저장하는 방식
Q. MySQL8.0의 구체적인 복제 원리 알아보기 👩🏫
기본적으로 복제는 비동기 방식이다. 설정에 따라 전체가 아닌 부분 데이터(일부 데이터베이스, 일부 테이블)를 복제할 수 있다.
MySQL8.0은 다양한 복제 방법을 지원한다.
MySQL의 전통적인 복제 방법은 다음과 같다.
Master 데이터에 대한 모든 변경사항을 로그 파일에 기록한다.(일반적으로 SELECT 명령문은 데이터베이스 구조나 내용을 수정하지 않기 때문에 기록되지 않는다.)
Master에 연결하는 각 복제본(Slave)은 바이너리 로그의 복사본을 요청한다. Slave는 수신한 바이너리 로그에서 이벤트를 실행한다. 이렇게 하면 Master에서 변경된 원래 변경 사항을 반복하는 효과가 있다. Master에서 원래 변경된 내용에 따라 데이터가 삽입, 삭제 및 업데이트된다.
각 Slave는 독립적이기 때문에 Master의 바이너리 로그에서 변경 사항을 재생하는 것은 각 Slave에서 독립적으로 발생한다.
Q. replication과 clustering의 차이는? 👩🏫
replication은 여러 개의 DB를 권한에 따라 수직적인 구조(Master-Slave)로 구축하는 방식이다. replication에서 Master는 쓰기 작업만을 처리하며 Slave는 읽기 작업만을 처리한다. replication은 비동기 방식으로 노드들 간의 데이터를 동기화한다. 비동기 방식으로 운영되는 덕분에 지연 시간이 거의 없다. 반면에, 노드들 간의 동기화가 보장되지 않아 일관성있는 데이터를 얻지 못할 수 있다.
clustering은 여러 개의 DB를 수평적인 구조로 구축하는 방식이다. clustering은 분산 환경을 구성하여 single point of failure와 같은 문제를 해결할 수 있는 fail over 시스템을 구축하기 위해 사용된다. clustering은 동기 방식으로 노드들 간의 데이터를 동기화한다. 따라서, 노드들 간의 데이터를 동기화하여 항상 일관성있는 데이터를 얻을 수 있다. 하지만 여러 노드들 간의 데이터를 동기화하는 시간이 필요하므로 replication에 비해 쓰기 성능이 떨어진다.
[참고자료]
https://www.youtube.com/watch?v=P7LqaEO-nGU&ab_channel=%EC%89%AC%EC%9A%B4%EC%BD%94%EB%93%9C
https://dev.mysql.com/doc/refman/8.0/en/replication-implementation.html
http://cloudrain21.com/mysql-replication
https://mangkyu.tistory.com/97
https://code-lab1.tistory.com/205
여러 곳에서 클러스터링이라는 단어가 나와서 궁금했었는데 덕분에 잘 알고 갑니다.