
데이터베이스 사용 최적화
- 데이터베이스 인덱싱
: 데이터베이스 인덱싱은 조회 성능을 크게 향상할 수 있는 방법
인덱스를 사용하면 데이터베이스는 데이터를 빠르게 검색할 수 있음
올바르게 설계된 인덱스는 읽기 성능을 적화 하고 쿼리 응답시간을 줄임
인덱스가 너무 많으면 쓰기 성능이 저하됨
- 데이터베이스 샤딩
: 데이터베이스 샤딩은 데이터베이스를 여러 샤드로 분할하여
각각의 샤드가 독립적으로 쿼리를 처리하도록 하는 방법
이를 통해 단일 데이터베이스에 대한 부하를 분산시킬 수 있으며,
읽기 요청에 대한 응답 속도를 향상 시킬 수 있음
ex) 사용자 데이터를 여러 샤드에 분산 저장하여 읽기 성능 최적화
- 읽기전용 데이터베이스
: 데이터를 주기적으로 동기화하여 최신 상태를 유지하면서 요청을 처리
이 방법은 주 데이터베이스에 대한 읽기 부하를 줄이고 성능을 최적화할 수 있음
- 쿼리 최적화
: SQL쿼리를 효율적으로 작성하여 데이터베이스의 읽기 성능을 향상시키는 방법
ex) 불필요한 조인 줄이기, 필요한 컬럼만 석택하여 적절한 조건을 사용
쿼리 실행 계획을 분석하여 병목 지점을 찾아내고, 최적화할 수 있음
쓰기 요청 최적화
- 비동기 처리
: DB에 직접 접근하지 않고 빠르게 응답을 반환할 수 있음
ex) 메시지를 바로 DB에 쓰지 않고, 큐에 넣어 나중에 처리
높은 트래픽을 처리할 때 유용
사용자는 요청을 보낸 후 즉시 응답을 받기 때문에 사용자 경험이 향상됨
비동기 처리 시 데이터 소실이나 오류를 방지하기 위해
큐에 데이터를 넣을 때 적절한 검증을 수행하고,
큐에 쌓인 데이터를 지속적으로 모니터링하여
실패한 요청을 재시도 할 수 있는 메커니즘을 마련해야 함
데이터의 순서를 보장하고, 중복 처리를 방지하기 위한
고유 식별자(ID)를 사용해야 함
- 배치 처리
: 실시간으로 처리할 필요가 없는 쓰기 요청은 배치 처리를 통해
한꺼번에 처리할 수 있음
ex) 일정 시간마다 큐에 쌓인 메시지를 DB에 씀
ex) 매일 자정에 하루동안 수집된 로그 데이터를 한 번에 DB에 저장
이를 통해 실시간 처리의 부담을 줄이고,
시스템 자원을 효율적으로 사용할 수 있음
배치 처리 시에도 데이터 소실을 방지하기 위해
배치 작업 중 오류가 발생한 경우 이를 기록하고,
재시도할 수 있는 메커니즘을 마련해야 함
배치 작업의 상태를 모니터링하고, 배치 작업이 완료되었는지
확인하는 프로세스를 마련해야 함
- 분산 DB
: 단일 DB로 모든 쓰기 요청을 처리하기 어렵다면,
분산 DB를 사용하여 부하를 분산시킬 수 있음
ex) 여러 개의 DB 인스턴스를 사용하여 각 인스턴스가
특정 사용자 그룹의 데이터를 처리하도록 할 수 있음
분산 DB는 데이터를 여러 개의 노드에 분산 저장하여
고가용성과 확장성을 제공
샤딩(Sharding) 기법을 통해 데이터베이스를 수평으로 분할하여
각 샤드가 독립적으로 쓰기 작업을 처리하도록 할 수 있음
이를 통해 단일 노드의 부하를 줄이고,
시스템의 전체 성능을 향상할 수 있음
'대규모 스트림처리' 카테고리의 다른 글
| 대규모 시스템 - 데이터 일관성 유지 (0) | 2024.08.23 |
|---|---|
| 대규모 시스템 - TPS(Transaction Per Second) (0) | 2024.08.16 |