개념과 구조
RDB개념
- IBM소속 Edgar F. “Ted” Codd가 1970년에 RDB 개념제시, 구조와 접근 방식을 테이블(릴레이션)로 정리한 관계형 DB
- 데이터를 테이블 형식으로 저장하며, 행과 열로 구성
- 테이블 간의 관계는 키(기본키 → 외래키)를 사용하여 정의
구조
- 주 구성요소
- SQL엔진: SQL 쿼리의 해석, 최적화, 실행을 담당하며, 데이터베이스의 논리적 데이터 구조를 관리
- 스토리지 엔진: 데이터의 물리적 저장, 검색을 처리하며, 다양한 스토리지 엔진 옵션(My SQL의 경우 InnoDB, MyISAM 등)이 존재
- InnoDB: 트랜잭션 지원, ACID준수, 무결성 보장과 동시성 제어 중시
- MyISAM: 트랜잭션 지원x, 빠른 읽기 작업과 낮은 메모리 사용 중점
- HDD: 데이터를 실제로 저장하는 하드웨어 장치
- RDBMS 처리과정
1.SQL 사용자: SQL 쿼리를 전송
SELECT * FROM students WHERE subject = 'Java';
2. DBMS: 연결을 수락하고 쿼리를 수신
- Conection Pool을 통해 연결을 설정하고 쿼리를 수신
- 커넥션 풀은 매번 통신 과정 필요x, 이미 연결이 수립된 다수의 커넥션 존재
- 하단 참고자료 블로그글에 매번 통신 연결vs 커넥션 미리 생성후 연결 성능차이 테스트 존재
3. SQL Interface: 쿼리 해석
- 쿼리를 해석하여 구문 분석 단계로 전달
- 해석의 의미: 쿼리가 적절한 데이터베이스와 테이블 참조하는지 확인
4. Parser: 쿼리 구문 분석
- 내부 데이터 구조로 변환, 각 SELECT, FROM, WHERE등을 파악 및 구조화
- 추상 구문 트리, 전위순회로 분석
- Spring Data JPA의 일부인 JPQL도 같은 방식
5. Optimizer: 쿼리 최적화
- 가장 효율적인 인덱스 사용, 조인의 순서 결정
- 쿼리 최적화 방식 하단 내용 참고
6. Query Execution Engine: 쿼리 실행
- 최적화된 실행 계획을 바탕으로 실제 쿼리 실행
- 조인, 필터링, 정렬 등의 작업을 수행하며, 필요한 데이터를 메모리로 로드하고, 결과를 생성
7. Storage Engine: 데이터를 검색 또는 수정
- 데이터의 물리적 저장과 관리를 담당하는 모듈
- B-Tree 기반엔진 사용
- 장점: 높은 읽기 성능, O(log n)
- 단점: 추가, 엄데이트와 같은 연산에서 다시 기록하는 과정이 발생함에 따라 추가 비용과 성능이 낮아짐
- 쿼리 최적화 방식
- NL Join(Nested Loop Join)
- Sort-Merge Join
- 테이블의 조인키를 기준으로 먼저 각각 정렬한 후, 정렬된 상태에서 상위행부터 순차적으로 스캔 및 조인조건 확인
- 병합하는 과정에서 일치하는 데이터 효율적으로 찾음
- 정렬 비용 사용, 대신 정렬된 상태에서 병합이 가능해 효율적인 경우가 많음
- 병합과정 아래 그림참고, 투포인터 개념이랑 비슷
- Hash Join
- 해슁 기법을 이용하여 조인을 수행
- 선행 테이블의 조인키를 토대로 해쉬테이블 생성
- 조인을 빠르게 수행할 수 있어 대규모 데이터 집합에 자주 사용, 메모리사용에 유의
- 아래 그림과 같이 해쉬테이블 생성 후에 후행 테이블의 subId와 해쉬값 비교 같을시 키를 토대로 데이터가져와서 비교
RDBMS 장점과 단점
장점
- 신뢰성과 가용성: 데이터의 무결성과 안정성을 보장하며, 장애 발생 시 신속한 복구가 가능
- 데이터 베이스의 스냅샷을 주기적으로 생성하여 저장 이후 문제 발생시 복원(전체 DBMS의 장점)
- 효율성과 융통성: 다양한 쿼리와 트랜잭션 처리 능력을 제공하여 복잡한 데이터를 효율적으로 관리
- ex. 여러 조인이 들어간 고객의 구매 데이터를 기반으로 구매 패턴을 분석 및 마케팅 전략 수립
- 데이터의 가용성과 신뢰성 증가: 중앙 집중식 데이터 관리로 데이터 접근성과 일관성을 향상
- 중앙 집중식: 단일 서버, 시스템에 저장 및 관리
- 중복방지, 데이터 일관성 유지 수월
단점
- 설계 및 관리의 복잡성: 데이터베이스 설계와 관리가 복잡하며, 전문 지식이 필요
- 당장 성능 최적화만 하더라도 서버 CPU, Memory에 맞게 튜닝해서 사용 요구
- 처리 비용의 증대: 데이터 추가에 따른 비용 상당, 확장성이 낮음
- 수평적 확장을 고려하고 만든 nosql과 다르게 RDBMS의 수직 확장의 비용이 상당이 많이 듬→ 최근 RDMBS도 수평적 확장이 가능한 추세로 변경중
참고 자료
[MySQL] MySQL 엔진 아키텍처-1
MySQL 서버 MySQL 엔진 : 머리 역할 스토리지 엔진 : 손과 발 핸들러 API를 만족하면 누구든 스토리지 엔진을 구현하여 서버에 추가해서 사용할 수 있음 MySQL 전체 구조 대부분의 프로그래밍 언어로부
velog.io
데이터베이스 커넥션 풀 (Connection Pool)과 HikariCP
데이터베이스 커넥션 풀 (Connection Pool)과 HikariCP
데이터베이스 커넥션 데이터베이스 커넥션 풀에 대해 알아보기 이전에 데이터베이스 커넥션이 무엇인지부터 알아봐야한다. 우리가 개발하는 웹 애플리케이션과 데이터베이스는 서로 다른 시
hudi.blog
Spring Data JPA introduces query parser!
Spring Data JPA introduces query parser!
The Problem One of Spring Data JPA’s handy features is letting you plugin in custom JPA queries through its @Query annotation. This allows some flexiblity because you are still able to offer sort parameters to the consumers of your app. Check out the exa
spring.io
A Busy Developer’s Guide to Database Storage Engines — The Basics
A Busy Developer’s Guide to Database Storage Engines — The Basics
When evaluating operational databases, developers building distributed cloud apps tend to focus on data modeling flexibility, consistency…
medium.com
SQL 전문가 가이드(자료 출처: 한국데이터산업진흥원)
'데이터베이스' 카테고리의 다른 글
[DB]AWS RDS를 이용한 MySQL 서버 생성 (0) | 2024.12.15 |
---|---|
[데이터베이스] DB전체 요약(조르디 CS강의) (1) | 2023.10.28 |