본문 바로가기

database14

[DB 15편] 정규화, 비정규화 목차는 DB 목차 에 있습니다. 공부한 내용을 정리할 목적으로 작성했습니다. [DB 15편] 정규화, 비정규화 정규화 RDB 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화 라고 합니다. RDB 정규화의 목표는 이상이 있는 관계를 작고 잘 조직된 관계를 생성하는 것에 있습니다. 위와 같이 정규화를 통해 테이블을 정비하고 이를 통해 RDB 나머지 부분들로 전파되게 하는 것이 목표입니다. 정규화를 잘못지킬 경우 이상현상이 발생하며, 갱신, 삭제, 삽입 이상이 있습니다. 중복을 줄인다는 것은 데이터를 될 수 있으면 하나의 저장공간에서 관리한다는 의미이며, 데이터를 조회하고 싶을 때 원본 데이터를 조회해야한다는 것입니다. 원본 데이터를 수정하는 것만으로 관련있는 테이블들의 데이터도 같이 변경되겠.. 2023. 1. 10.
[DB 10편] MySQL 확장성 (스케일링, 샤딩) 목차는 DB 목차 에 있습니다. [DB 10편] MySQL 확장성 (스케일링, 샤딩) 읽기 영역 확장성 레플리카 서버를 클러스터로 묶습니다. 이렇게 묶은 클러스터 앞에 Load balancer 를 구성합니다. 읽기 쿼리가 요청이 들어오면 Load balancer 는 요청을 분배해줍니다. HAProxy, 물리 Load balancer, 네트워크 load balancer 가 있습니다. 쓰기 영역 확장성 메시지 기반 오픈소스 큐 또는 카프카와 같은 메시지 기반 오픈소스를 사용하면 쓰기 요청이 늘어나도 처리가 가능합니다. 단, 메시지 기반 처리 방식은 준실시간 처리이기에 비즈니스 요구사항과 맞는지 확인이 필요합니다. 샤딩 쿼리 최적화, 인덱스 최적화, 메시지 기반 오픈소스를 써도 안될때는 샤딩을 고려해보는 것이.. 2022. 11. 25.
[DB 8편] MySQL 복제 정리 목차는 DB 목차 에 있습니다. [DB 8편] MySQL 복제 정리 MySQL 복제 동작 방식 소스는 트래픽을 받아내는 서버를 의미하며, 레플리카는 복제 서버를 의미합니다. 아래 동작 방식은 비동기로 이루어집니다. (I/O 처리) 순서 소스에서 트래픽 (데이터 변경 요청) 이 들어오면 바이너리 로그에 이벤트를 기록합니다. 복제 서버 (레플리카) 는 소스 바이너리 로그에 접근해 릴레이 로그에 copy 합니다. 복제 서버 (레플리카) 는 릴레이 로그를 읽어서 데이터를 변경합니다. MySQL 복제 형식 명령문 기반 복제 로그에 저장할 때, SQL 명령문을 저장합니다. 레플리카는 릴레이 로그에 저장된 SQL 문을 실행합니다. 명령문 방식 장단점 명령문으로 저장하기에 로그 사이즈가 작습니다. 비결정적 쿼리 (실행.. 2022. 11. 24.
[DB 7편] MySQL 인덱스 성능 관련 정리 (커버링인덱스) 목차는 DB 목차 에 있습니다. [DB 7편] MySQL 인덱스 성능 관련 정리 (커버링인덱스) 커버링 인덱스란? 쿼리의 결과 값이 Index 에 전부 존재하는 경우입니다. 데이터를 찾기 위해 추가로 디스크 접근을 할 필요가 없기에 성능이 좋습니다. 무엇이 좋은가? 인덱스의 경우 보통 1 row 보다 데이터가 적기에 디스크 접근 횟수가 전체 행을 조회하는 것보다 빠릅니다. 또한, 인덱스의 경우 같은 페이지내에서 보통 정렬되서 저장되므로 범위 조회를 할 때, 빠른 성능을 보여줍니다. 예시 아래와 같은 예시가 있을 경우 MySQL InnoDB 를 기준으로 실행계획을 수행하면 커버링 인덱스를 타게 됩니다. 실행계획 중 Extra 항목에 Using Index 라고 나온 것이 커버링 인덱스를 탄 항목입니다. cr.. 2022. 10. 15.