본문 바로가기
728x90

전체 글110

[MySQL] INDEX 최적화 - 2 (feat. 커버링, 컨디션 푸시다운) [MySQL] INDEX 최적화 - 1 글에 이어 두 번째 정리를 해야겠다. 커버링 인덱스 처음 글에 정리했던 것처럼 인덱스는 데이터를 효율적으로 탐색해서 디스크 I/O를 줄이는 게 하는 방법이라고 했다. 커버링 인덱스는 쿼리를 충족하는데 필요한 모든 데이터를 갖는 인덱스를 말한다. WHERE절에 대한 쿼리에 인덱스 컬럼을 걸어 사용하는 것 이외에 SELECT / GROUP BY / ORDER BY 등에 활용되는 모든 컬럼의 인덱스의 구성 요소를 뜻한다. 인덱스를 사용하여 처리하는 부분 중에 가장 큰 부하를 차치하는 부분은 인덱스 검색에서 일치하는 키 값의 레코드를 읽는 것이다. 위의 그림처럼 인덱스 탐색에서 일치하는 키 값의 데이터를 조회하기 위해서 추가적인 디스크 I/O가 발생하게 된다. N번의 인덱.. 2022. 11. 17.
[MySQL] INDEX 최적화 - 1 인덱스를 왜 써야 할까? 데이터베이스의 성능은 디스크 I/O 영향이 크다 디스크와 메모리 I/O의 속도 차이는 10만 ~ 15만 배 정도로 차이가 크다. 요즘은 성능이 좋은 SSD도 보편화되었지만 그래도 메모리에 비해 많이 느리다. 즉, 성능 개선은 디스크 I/O를 줄이는 게 핵심이다. 인덱스를 사용하면 조회는 빨라지지만 데이터 생성, 수정, 삭제는 느려지는데 그럼에도 불구하고 우리는 왜 인덱스를 써야 할까? 웹 서비스에서 CUD와 R의 비율은 9:1 또는 8:2 정도라고 한다. GET 요청이 압도적으로 발생하기 때문에 전체적인 성능 이점을 취하기 위해 조회 성능 개선에 중점을 둔다. player table create index idx_game_nickname on player (game, nickna.. 2022. 11. 16.
CQRS 패턴 CQRS는 Command and Query Responsibility Segregation의 약자로 명령의 해당하는 영역과 조회에 해당하는 영역을 분리하는 것이다. 명령과 조회의 영역을 분리하게 되면 성능, 확장성 및 보안이 최적화될 수 있고 유연성이 생기므로 시스템이 진화하고 업데이트 수행하는 데에 도메인 레벨에서 충돌과 악영향을 일으키지 않도록 할 수 있는 방향성을 두고 있다. 명령과 조회의 영역이 하나인 구조 분리되지 않는 단순한 아키텍처를 살펴보면 데이터베이스를 Read와 Write 하는 데 동일한 모델을 사용하게 된다. 복잡성이 없는 간단한 모델 및 구조의 CRUD라면 최적화된 구조일 수도 있다. 하지만 서비스 비즈니스가 커짐으로 인해 시스템 애플리케이션이 구조가 더 복잡해졌고 많은 트래픽을 감.. 2022. 11. 15.
[Database] CAP 이론 CAP이론은 많은 책이나 블로그에서 언급되는 내용인데 정의된 내용은 동일하다. 분산 데이터 저장소 환경은 일관성(Consistency), 가용성(Availability), 분할 내구성(Partitioning) 세 가지의 특성을 가지고 있는데 모든 특성을 만족할 수 없음을 인지하고 이중 두 가지 특성만 만족하는 선택지를 제공해주는 이론이다. 일관성 (Consistency) 모든 클라이언트는 동시에 동일한 데이터를 볼 수 있어야 한다. 노드에서 쓰기 동작이 완료된 후에는 마지막으로 쓰인 데이터를 모든 노드들이 동일하게 제공해주어야 한다는 의미이다. 가용성 (Availability) 특정 노드가 장애로 인해 동작 중지가 되어도 서비스가 가능하도록 데이터를 제공해야 한다. 분산 시스템에서는 운영 중인 모든 노드.. 2022. 11. 14.
300x250