And Brain said,
데이터베이스야, 이리오너라! [Database, DB] 본문
반응형
데이터베이스(Database, DB)
- 정의 : 데이터의 저장소(집합)
1.1 데이터베이스의 역할
- 데이터와 응용프로그램의 중간에서 응용프로그램이 요구하는대로 데이터를 조작하고 관리하는 소프트웨어
- 사용자 데이터 요구의 실시간 응답, 최신 데이터 유지, 여러 사용자가 동시 이용
1.2 데이터베이스 현황
- DB-ENGINES는 매월 인기도에 따라 데이터베이스 관리 시스템의 순위를 공개한다
- 약 350여개의 상용, 오픈소스 DBMS가 존재
2.1.1 관계형 데이터베이스의 특징
- SQL 작업 수행시점에 Replication, Locking 및 Consistency에 대한 확인이 필요
- 데이터 일관성을 위하여 처리성능이 느려 성능의 병목현상이 발생할 수 있음
2.1.2 관계형 데이터베이스의 장점
- 데이터의 일관성을 보증할 수 있음 - 데이터 처리 시 일어나는 트랜잭션의 불일치가 발생하지 않음
- 정규화를 기반으로 하고 있어 데이터 삽입 및 갱신 시 비용이 적게 듦 - 정규화는 데이터베이스 설계 시 불필요한 중복을 줄일 수 있음
- Join이나 복잡한 검색 조건으로 검색이 가능함
- 성숙된 기술로 참고자료나 노하우가 많음
2.1.3 관계형 데이터베이스의 단점
- 대용량 데이터 입력처리의 성능
- 갱신이 발생한 테이블의 인덱스 생성이나 스키마 변경
- 칼럼을 확정하기 어려운 경우의 이용
- 단순히 빨리 결과를 내놓아야 할 때
2.2.1 NoSQL(Not Only SQL) 데이터베이스 특징
- 관계형 데이터베이스 필요할 땐 관계형 데이터베이스를 사용하고, 그렇지 않으면 관계형 데이터베이스에 얽매이지 않는 일정 용도를 위한 데이터 저장소
- 데이터 분산이 용이 - NoSQL은 처음부터 Join이 불가능하며, 각 데이터가 독립적으로 설계돼있어 데이터를 여러 서버에 분산시키는 것이 용이, 데이터를 여러 서버에 분산하는 것을 통해, 각 서버에서 다루는 데이터 양이 줄고 따라서 대용량 데이터의 입력이 있어도 처리가 쉬워진다. 또한, 출력에 있어서도 쉬운 처리를 지원한다.
2.2.2 NoSQL 데이터베이스 유형
- Document Store : 데이터 및 메타 데이터를 데이터베이스 내 JSON 기반 문서에 계층적 저장
- Key-Value Store : Key-Value 쌍의 컬렉션으로 저장
- Wide-Column Store : 관련 데이터는 단일 열에 중첩 키/값의 집합으로 저장
- Graph Store : 그래프 구조에 노드, 에지 및 데이터 속성으로 저장
3.1 RDBMS 아키텍처 - Oracle
- 인스턴스, 데이터베이스 구성
- 데이터베이스 기동과 종료를 위한 환경 정보와 제어를 위한 프로세스
[1]. Memory 영역
- 오라클 서버가 메모리에 할당되어 실제 데이터가 입출력에 필요한 작업을 수행하는 영역
- Library Cache : SQL과 실행계획 등이 저장
- Data Dictionary Cache : 구문분석이나 실행계획을 세울 때 사용하는 사전들이 캐시되어진 공간
- DB Buffer Cache : 데이터 조회/변경 등 실제 작업이 일어나는 공간
- Log Buffer : 변경 내용을 기록하는 메모리 공간
[2]. Process 영역
- SQL 문을 처리하는 프로세스로 오라클 Client 에게 직접서비스를 수행하는 프로세스
- DBWR : 데이터 파일로 저장
- LGWR : 리두로그 버퍼 내용을 파일로 저장
- PMON : 모든 서버 프로세스 감시
- SMON : 인스턴스를 복구하며 관리
- CKPT : DBWR 에게 checkpoint 신호 전달
[3]. Data File 영역
- 데이터 및 관련 로그가 실제 디스크로 저장
- Data files : 데이터를 저장하는 공간
- Control Files : DB 환경정보와 같은 운영 정보
- Redo log Files : 변경 내용을 기록하는 파일
- Archived Log Files : 과거 변경 내용 기록 파일
3.2 RDBMS 아키텍처 - MySQL
[1]. Client 영역
- MySQL Server 접근하기 위해 application에서 설치하여 사용할 수 있는 모듈(드라이버)를 통해 서버와 통신
[2]. Instance 영역
- Client로 부터 들어온 쿼리를 분석하여 최적화하여 실행계획을 만들고, 필요한 경우 메모리에 cache 하는 기능
- SQL Interface : DML, DDL 등 지원을 위한 인터페이스
- Parser/Optimizer : SQL 권한을 확인하고, SQL 문을 데이터베이스 내부 언어로 변환하고, 수행경로를 분석하는 등 SQL 실행을 위한 준비 작업
- Caches & Buffers : 인덱스나 데이터를 빠르게 접근하기 위해 메모리에 저장하는 영역
[3]. Storage Engines 영역
- 데이터를 저장하고 추출하는 역할을 수행하며, 다양한 스토리지 엔진이 있음
- MylSAM : dictionary database 스토리지 엔진
- InnoDB : 트랜지션을 지원하는 스토리지 엔진으로 index 및 row level locking을 지원하고 백업/자동 복구, 데이터와 인덱스의 메모리 캐싱 기능
- NDB (Cluster DB) : 트랜잭션을 지원하고, 모든 테이블과 인덱스가 메모리에 존재해야 하는 스토리지 엔진
3.3 RDBMS 아키텍처 - PostgreSQL
[1]. Server Process 영역
- Postmaster : 서버를 기동 및 중지하는 필수 프로세스
- Postgres Server : 데이터베이스 파일 관리, SQL 전달 및 결과 추출 역할 및 Storage Manager/Utility Process 호출
[2]. System Memory 영역
- Shared Buffer : 데이터와 데이터의 변경 사항 캐싱
- WAL Buffer(Write Ahead Log) : 세션이 수행한 트랜잭션의 변경 로그 캐싱
- CLOG Buffer(Commit Log) : 트랜잭션 상태 정보를 가지고, Commit 여부 캐싱
- Lock Space : 인스턴스가 사용하는 모든 Lock 정보 관리
[3]. Utility Process 영역
- BG Writer : Shared Buffer 에 변경된 버퍼를 디스크에 기록
- WAL Writer : Commit 된 데이터를 WAL Files 저장
- Archiver : 트랜잭션 로그 아카이빙
- Autovacuum Lancher : Unused Memory 해소, 통계정보 갱신, 데이터 손실 예방
- Sys Logger : 모든 프로세스 정보 기록
3.4 MongoDB 아키텍쳐 및 샤딩(Sharding)
- Scale Out(수평확장)을 통한 데이터를 여러 서버에 분산해서 저장하고 처리할 수 있도록 하는 기술
- 복제(Replication)은 고가용성 관점, 샤딩(Sharding)은 대용량 분산 처리 관점
- Config 서버는 3개의 노드가 별도로 필요하며, 이 Config 노드는 다른 노드들과 별도 물리적으로 구성
[1]. Config Server
- 샤드 서버에 저장된 사용자 데이터가 분산되어 있는 메타 정보를 관리
[2]. Router
- 라우터는 사용자의 쿼리 요청을 어떤 샤드로 전달할지 정하고, 각 샤드로부터 받은 결과 데이터를 병합해서 사용자에게 되돌려주는 역할
- 각 샤드가 균등하게 데이터를 가지고 있는지 모니터링하면서 데이터 밸런싱
[3]. Shard Server
- 실제 사용자의 데이터를 저장
참고 :
https://db-engines.com/en/ranking_trend
https://dev.mysql.com/doc/refman/8.0/en/pluggable-storage-overview.html
https://blog.goodusdata.com/12
https://blog.optimal.io/sharding-in-mongodb/
반응형
'IT > Database' 카테고리의 다른 글
MySQL Replication, DB must go on (0) | 2023.09.18 |
---|---|
MongoDB, NoSQL의 거대한 수장 (Version 6.0) | 설치 및 외부접속 허용 (0) | 2023.08.07 |
DB Clustering & Replication, DB must go on (0) | 2023.01.01 |
[MongoDB] mongoose를 이용한 $avg (aggregation) / group by (0) | 2022.10.25 |
Comments