개념과 구조
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도 수평적 확장이 가능한 추세로 변경중
참고 자료
데이터베이스 커넥션 풀 (Connection Pool)과 HikariCP
Spring Data JPA introduces query parser!
A Busy Developer’s Guide to Database Storage Engines — The Basics
SQL 전문가 가이드(자료 출처: 한국데이터산업진흥원)
'데이터베이스' 카테고리의 다른 글
[데이터베이스] DB전체 요약(조르디 CS강의) (1) | 2023.10.28 |
---|