1. Trigger와 Procedure
트리거(Trigger)란 영어로 방아쇠라는 뜻인데,- 방아쇠를 당기면 그로 인해 총기 내부에서 알아서 일련의 작업을 실행하고 총알이 날아감
- 이처럼 데이터베이스에서도
트리거(Trigger)는 특정 테이블에- INSERT, DELETE, UPDATE 같은 DML 문이 수행되었을 때,
- 데이터베이스에서 자동으로 동작하도록 작성된 프로그램을 말한다.
- 즉 사용자가 직접 호출하는 것이 아니라, 데이터베이스에서 자동적으로 호출하는 것이 가장 큰 특징입니다
e.g. 트리거(Trigger)를 사용하여 주문한 건이 입력될 때마다, 일자별 상품별로 판매수량과 판매금액을 집계하여 집계 자료를 보관하면, 미리 계산된 일자별 판매 집계 테이블을 조회하게 하여 실시간 조회 할 수 있다.
💡 프로시저(procedure) vs 트리거(trigger)
- 트리거 : A끝나면 B 실행해줘 (e.g. 로그 기록하기)
- 프로시저 : DB에서 함수 만들기 (e.g. 더미 데이터 만들기)
cf. 요즘은 Trigger, Procedure를 DB에서 직접 적용하기보다는 가급적이면 JS단에서 적용하는 편.
2. Index
- 인덱스(= 책갈피)는 테이블을 빨리 조회하기 위해 테이블 데이터에 포인터를 주는 검색 방법
- 인덱스는 책의 목차와도 같아서 특정 컬럼에 인덱스를 지정해주면,
- 테이블 조회 시 인덱스를 이용해 빠르게 조회 가능
인덱스가 걸려있는 컬럼으로 찾으면 빨리 찾음
2.1 Explain 명령어
Explain 명령어로 옵티마이저의 실행계획을 분석
옵티마이저: 검색을 효율적으로 해주는 DB 내장기능실행계획: 효율적인 검색 계획Explain 명령어: 옵티마이저가 결정한 실행결과를 볼 수 있는 명령어
type의 대표적인 유형
ALL: 인덱스 안찾고 하나하나 다 찾아볼 예정const: 인덱스 찾아볼 예정(PK, FK, UNIQUE 중에서)ref: 인덱스 찾아볼 예정(내가 만든 인덱스 중에서)range: 인덱스 찾아볼 예정 (크다, 작다 등 범위 검색 중에서)
빠른 검색을 위해 모든 컬럼에 인덱스를 적용하게 되면,
- 데이터를 등록, 수정할 때 마다 정렬을 시도하기 때문에, 속도가 느려진다.
- 따라서, 검색에 자주 사용되는 컬럼에 인덱스를 적용하는 것이 좋다.
3. Redis
- Memcached와 비슷한 캐시 시스템으로서 동일한 기능을 제공하면서,
- 영속성, 다양한 데이터 구조와 같은 부가적인 기능을 지원
- Redis는 모든 데이터를 메모리에 저장하고 조회하는
인메모리 데이터베이스 - 다른 인메모리 디비들과의 가장 큰 차이점은
Redis의 다양한 자료구조 - 다양한 자료구조를 지원하면, 개발의 편의성이 좋아지고 난이도가 낮아진다는 장점이 존재
- e.g. 어떤 데이터를 정렬할 때, DBMS를 이용한다면 DB에 데이터를 저장하고,
- 저장된 데이터를 정렬하여 다시 읽어오는 과정은
- 디스크에 직접 접근을 해야하기 때문에 시간이 더 걸린다는 단점이 있다.
- 하지만 Redis에서 제공하는 Sorted-Set이라는 자료구조를 사용하면 더 빠르고 간단하게 데이터를 정렬 가능
3.1 Redis 특징
- 영속성을 지원하는 인메모리 데이터 저장소
- 읽기 성능 증대를 위한 서버 측 복제를 지원
- 쓰기 성능 증대를 위한 클라이언트 측 샤딩(Sharding) 지원
- 다양한 서비스에서 사용되며 검증된 기술
- 문자열, 리스트, 해시, 셋, 정렬된 셋과 같은 다양한 데이터형을 지원.
- 메모리 저장소임에도 불구하고 많은 데이터형을 지원하므로 다양한 기능을 구현
요약하면,
- 고성능 키-값 저장소로서
- Stirng , list, hash, set, sorted set형식의 데이터를 지원하는 NoSQL
3.2 Redis 패턴
Cache-Aside 패턴(빠른검색용)
- 검색 시 Redis에서 먼저 찾아보고
- Redis에 저장된 내용이 있다면 저장된 정보를 바로 보여주고,
- 없다면 MySQL에서 정보를 보여준 다음 검색된 내용을 redis에 저장하는 방식
- Cache-Aside패턴를 사용한다면,
- 같은 내용의 2번째 검색부터는 redis에 저장된 정보를 보여주기 때문에, (Cache-Hit)
- 속도가 빨라진다.
Write-Back 패턴(임시저장용)
- redis에 먼저 임시 저장해놓은 뒤 Database에 저장하는 방식
- 디스크 기반의 Database에 저장해야할 데이터 양이 많은 경우
- 디스크I/O(속도가 느린 현상)가 발생하게 되는데,
- 이를 해결하기 위해 Write-Back 패턴을 사용한다.