또 한번에 몰아서 쓰게 되지만 DB 공부 마지막 날에는 MySQL에 대해서 알아보았습니다.
장단점 : MySQL은 Oracle에서 제공하는 오픈소스 DBMS로 고속 트렌잭션과 데드락 자동 감지 등을 지원하고 적은 용량을 차지합니다. 다만 대용량 데이터나 게임 데이터에는 적합하지 않은 단점을 가지고 있습니다.
MySQL 서버 : MySQL 서버는 MySQL 엔진과 스토리지 엔진으로 나뉘어집니다. MySQL엔진은 사용자의 요청을 처리하는 일을 하고 스토리지 엔진은 실질적으로 물리적 데이터에 접근하는 일을 합니다.
MySQL 스레드 : 백그라운드 스레드 / 포그라운드 스레드가 있는데 각각 로그나 데이터 저장 / 클라이언트 요청 처리를 담당합니다.
쿼리 실행 구조 : Parser에서 쿼리문을 파싱 → 전처리기에서 문법에 맞는지, 존재하는 테이블인지 등을 검사 → Optimizer에서 가장 적합한 실행 방법 찾기 → Handler API에서 실행
복제 : MySQL을 두개의 서버에서 운영할때, 둘을 동기화 시키는 방법입니다. 읽기, 쓰기가 모두 가능한 마스터 서버와 읽기만 가능한 슬레이브 서버로 나누어지며, 마스터 서버의 내용을 슬레이브 서버에 복제해옵니다.
쿼리 캐시 : 쿼리문과 그 결과를 key, value의 형태로 저장하는 기능이 있습니다. 쿼리문이 일치하고 결과도 일치한다는 확신이 있어야 사용가능해서 신중하게 사용해야 합니다.
InnoDB : MySQL의 스토리지 엔진 중 하나로 칼럼당 lock이 가능해서 동기화에 유리합니다.
MVCC : lock없이 일관된 읽기를 하기 위한 기능으로 Undo Record에 변경 이전 값을 저장하여 버전별로 접근이 가능하게 합니다.
RDBMS vs NoSQL : RDBMS는 데이터의 일관성을 보장하기가 쉽고 중복을 예방하기가 간단합니다. NoSQL은 데이터 Scale-up, Scale-out이 간단하고 대용량 데이터에서 속도가 빠르다는 장점이 있습니다.
Redis
Dynamo DB