TCL(Transaction Control Language): COMMIT, ROLLBACK, SAVEPOINT
rarely used
데이터 정의 언어(Data Definition Language (DDL))
데이터베이스 스키마 정의를 위한 명세 표기법(Specification notation for defining the database schema)
create table instructor (
ID char(5)
name varchar(20),
dept_name varchar(20),
salary numeric(8,2))
DDL 컴파일러는 data dictionary에 저장된 일련의 테이블 템플릿을 생성한다
Data dicionary는 metadata를 생성한다(i.e., data about data)
Database Schema
Integrity constraints
Primary key(줄여서 PK라고 함. 유일하게 identifying 할 수 있는 Key)
ex) instructor Table에서 ID attribute
Authorization
누가 어떤 것에 접근할 수 있는지
Data Manipulation Language (DML)
DML은 적절한 데이터 모델에 의해 구성된 데이터를 접근하고 조작하기 위한 언어입니다.
DML은 쿼리 언어(Query Language)로도 알려져 있습니다.
DML은 데이터베이스에서 데이터를 삽입, 삭제 및 갱신하는 데 사용됩니다.
널리 사용되는 데이터 조작 언어는 관계형 데이터베이스에서 데이터를 검색하고 조작하는 데 사용되는 SQL(Structured Query Language, 구조적 질의 언어)입니다.
Structured Query Language (SQL)
SQL이란 무엇인가?
SQL은 데이터베이스에 접근하고 조작하기 위한 표준 언어입니다.
SQL이 할 수 있는 일:
SQL은 데이터베이스에 대한 쿼리를 실행할 수 있습니다.
SQL은 데이터베이스에서 데이터를 retrieve(검색) 할 수 있습니다.
SQL은 데이터베이스에서 record를 insert/update/delete 할 수 있습니다.
SQL은 새로운 데이터베이스를 생성할 수 있습니다.
SQL은 데이터베이스에 새로운 table을 생성할 수 있습니다.
SQL은 데이터베이스에서 view를 생성할 수 있습니다.
Database Design
데이터베이스의 일반적인 구조를 설계하는 과정:
논리적 설계(Logical Design) - 데이터베이스 스키마를 결정하는 것
데이터베이스 설계는 "good" collection of releation schemas를 찾는 것을 요구합니다.
비즈니스 결정 - 데이터베이스에 어떤 attributes(속성)을 기록할 것인가?
Computer Science(CS) 결정 - relation schema를 어떻게 설정하고 각 schema 사이에 attribute를 어떻게 배분할 것인가?
Speed, memory, capacity 등을 고려하게 된다.
물리적 설계(Physical Design) - 데이터베이스의 물리적 레이아웃을 결정하는 것
ex) 어떻게 데이터를 압축하여 저장할 것인지
복잡해질수록 고려해야 할 사항들이 많아진다.
Database Engine
데이터베이스 시스템은 전체 시스템의 각 책임을 다루는 모듈로 분할됩니다.
데이터베이스 시스템의 functional component(기능적 구성 요소)는 다음과 같이 나눌 수 있습니다:
스토리지 관리자(Storage Manager)
쿼리 프로세서 구성 요소(Query Processor Component)
트랜잭션 관리 구성 요소(Transaction Management Component)
Storage Manager
데이터베이스에 저장된 low-level 데이터와 데이터베이스에 제출된 응용 프로그램 프로그램 및 쿼리 사이의 인터페이스를 제공하는 프로그램 모듈입니다.
Storage Manager는 다음 작업을 담당합니다:
OS 파일 관리자와의 상호작용
데이터의 효율적인 저장, 검색 및 갱신
스토리지 관리자 구성 요소에는 다음이 포함됩니다:
권한 및 무결성 관리자(Authorization and Integrity Manager)
트랜잭션 관리자(Transaction Manager)
파일 관리자(File Manager)
버퍼 관리자(Buffer Manager)
Storage Manager는 물리적 시스템 구현의 일부로 여러 데이터 구조를 구현합니다:
데이터 파일(Data Files)
데이터베이스 자체를 저장합니다.
데이터 사전(Data Dictionary)
데이터베이스의 구조에 대한 메타데이터를 저장하며, 특히 데이터베이스의 스키마를 저장합니다.
인덱스(Indices)
데이터 항목에 빠르게 접근할 수 있습니다.
데이터베이스 인덱스는 특정 값을 보유한 데이터 항목에 대한 포인터를 제공합니다.
Query Processor
쿼리 프로세서 구성 요소에는 다음이 포함됩니다:
DDL interpreter
데이터 정의 언어(DDL)는 데이터베이스의 다른 구조를 정의하는 명령어에 대한 표준입니다. DDL 명령어는 테이블, 인덱스, 사용자와 같은 데이터베이스 객체를 생성, 수정 및 제거합니다. 일반적인 DDL 명령어에는 CREATE, ALTER, DROP이 있습니다.
DDL interpreter는 DDL 명령어를 해석하고 data dictionary에 definition을 기록합니다.
DML compiler
이는 DML 명령어를 query evaluation engine이 이해하는 low-level 명령어로 구성된 evaluation plan으로 변환합니다.
Query Evaluation Engine
이는 DML 컴파일러가 생성한 low-level 명령어를 실행합니다.
구문 분석 및 번역(Parsing and Translation)
최적화(Optimization)
평가(Evaluation)
Transaction Management
트랜잭션(Transaction)은 데이터베이스 애플리케이션에서 단일 logical function을 수행하는 작업들의 집합입니다.
트랜잭션 관리 컴포넌트(Transaction-Management Component)
이는 시스템 오류(예: 전원 장애 및 운영 체제 충돌) 및 트랜잭션 오류에도 불구하고 데이터베이스가 일관된(올바른) 상태를 유지하도록 보장합니다.
동시성 제어 관리자(Concurrency-Control Manager)
이는 concurrent transaction 간의 상호작용을 제어하여 데이터베이스의 일관성을 보장합니다.
데이터베이스의 트랜잭션은 다음 상태 중 하나일 수 있습니다:
Active - 이 상태에서 트랜잭션이 실행 중입니다. 이는 모든 트랜잭션의 초기 상태입니다.
Partially Committed - 트랜잭션이 최종 operation을 실행할 때 Partially Committed 상태에 있습니다.
Failed - 데이터베이스 복구 시스템이 실패를 감지한 경우 트랜잭션이 Failed 상태에 있다고 합니다. 실패한 트랜잭션은 더 이상 진행할 수 없습니다.
Aborted- 트랜잭션이 중단된 상태입니다. 어떤 검사가 실패하고 트랜잭션이 실패 상태에 도달하면 recovery manager가 데이터베이스의 모든 쓰기 작업을 롤백하여 트랜잭션 실행 전의 원래 상태로 되돌립니다. 이 상태의 트랜잭션을 중단되었다고 합니다. 트랜잭션 중단 후 데이터베이스 recovery module 은 다음 두 가지 작업 중 하나를 선택할 수 있습니다:
트랜잭션 재시작
트랜잭션 종료
Comitted - 트랜잭션이 모든 operation을 성공적으로 실행하면 커밋되었다고 합니다. 모든 실행 결과는 이제 데이터베이스 시스템에 영구적으로 설정됩니다.
Database Engine
MySQL 아키텍처 이해하기
Memory Caches in Database
데이터베이스의 메모리 캐시
temporary storage인 memory cache에 올려 놓고 access를 한다(성능 향상을 위해서)
Database Architecture
데이터베이스 시스템 구조
중앙 집중식 데이터베이스 (Centralized Databases)- One to a few core, shared memory
클라이언트-서버 (Client-Server)- 한 서버 머신이 여러 클라이언트 머신을 대신하여 작업을 수행합니다.
병렬 데이터베이스 (Parallel Databases)- Many core shared memory
분산 데이터베이스 (Distributed Databases)- Geographical distribution, Schema/data heterogeneity
재난이 발생했을 때를 생각해보자
Database Applications
데이터베이스 애플리케이션은 보통 두 개 또는 세 개의 파트로 나뉩니다:
Two-Tier Architecture- 애플리케이션이 클라이언트 머신에 있으며 서버 머신에서 데이터베이스 시스템 function을 invoke(호출)합니다.
Three-Tier Architecture- 클라이언트 머신은 front-end 역할을 하며 직접적인 데이터베이스 call(호출)을 포함하지 않습니다:
Client end는 보통 foam interface를 통해 애플리케이션 서버와 통신합니다.
애플리케이션 서버는 데이터베이스 시스템과 통신하여 데이터를 액세스합니다.
Two-tier and three-tier architectures
Database Users
데이터베이스 시스템 사용자는 네 가지 유형이 있습니다:
Naïve(순수한) Users- 미리 작성된 애플리케이션 프로그램 중 하나를 호출하여 시스템과 상호 작용하는 단순한 사용자
Application Programmers- 애플리케이션 프로그램을 작성하는 컴퓨터 전문가
Sophisticated(정교한) Users- 프로그램을 작성하지 않고 시스템과 상호 작용하는 사용자:
데이터베이스 쿼리 언어를 사용
데이터 분석 소프트웨어와 같은 도구 사용
Specialized Users- 그래픽 데이터, 오디오, 비디오 등 기존 데이터 처리 프레임워크에 맞지 않는 전문화된 데이터베이스 애플리케이션 작성
Database Administrator
시스템에 대한 중앙 제어 권한을 가진 사람을 데이터베이스 관리자(DBA)라고 하며, 그 기능은 다음과 같습니다:
스키마 정의
저장 구조 및 액세스 방법 정의
스키마 및 physical-organization 수정
정기 유지보수
정기적으로 데이터베이스 백업
정상 운영을 위해 충분한 여유 디스크 공간을 보장하고 필요한 경우 디스크 공간 업그레이드
데이터베이스에서 실행 중인 작업을 모니터링하고 일부 사용자가 제출한 매우 비용이 많이 드는 작업으로 인해 성능이 저하되지 않도록 보장