분산 데이터베이스 : 논리적으로 하나의 시스템에 속하지만 물리적으로 네트워크를 통해 연결된 컴퓨터에 분산되어있는 DB 물리적으로 분산된 DB 시스템을 사용자가 하나의 중앙 집중 DB 시스템처럼 사용 가능 분산 데이터베이스의 목표 위치 투명성 (Location Transparency) 접근하려는 DB의 실제 위치를 알 필요 없이 논리적인 명칭만으로 접근 가능 중복 투명성 (Replication Transparency) 여러 곳에 중복된 데이터가 있어도 사용자는 하나의 데이터만 존재하는 것처럼 사용 시스템은 자동으로 여러 곳의 데이터에 대한 작업 수행 병행 투명성 (Concurrency Transparency) 다수의 트랜잭션들이 동시에 수행되어도 트랜잭션의 결과는 영향을 받지 않음 장애 투명성 (Failu..
인덱스 (Index) : 데이터베이스 테이블에 대한 검색 속도를 향상시켜주는 자료구조 RDBMS에서 사용, 자주 사용하는 칼럼에 대해 인덱스 관리를 하여 별도의 저장 공간이 필요함 사용자가 생성하고 시스템에 의해 자동 관리됨 정렬된 상태이기 때문에 index range scan을 통해 full scan보다 빠르게 데이터에 접근함 해시테이블 / B트리로 주로 구현함 인덱스가 사용되는 칼럼 - 삽입, 삭제, 갱신이 적음 - 정수형 - 데이터의 중복도가 낮음 (분포도가 좋음) - 검색, join 등이 자주 발생함 - 규모가 큰 테이블 자주 삽입, 삭제, 갱신되는 필드에는 인덱스를 정의하지 않는 것이 좋음 - Insert: 새로운 데이터에 인덱스를 추가해야 함 - Delete: 삭제하는 데이터의 인덱스를 사용하..
병행 제어 (Concurrency Control) : 여러 트랜잭션을 병행 수행할 때 데이터베이스의 일관성을 파괴하지 않게 제어함 병행의 문제점 - 갱신 분실 (Lost Update): 두 개의 트랜잭션이 같은 데이터를 갱신할 때, 하나의 갱신 작업이 분실됨 - 비완료 의존성 (Uncommited Dependency): 트랜잭션 수행이 실패 후 회복되기 전, 다른 트랜잭션이 실패한 결과를 참조함 - 모순성 (Inconsistency): 두 개의 트랜잭션이 같은 데이터에 접근하여 일관성을 해치는 경우 - 연쇄 복귀 (Cascading Rollback): 병행 수행되던 트랜잭션 중 하나가 롤백하는 경우 다른 트랜잭션도 함께 롤백되는 현상 병행 제어 목적 - 데이터베이스의 공유 최대화 - 시스템 활용도 최대화..
데이터베이스 읽기 이상 현상 (Read Phenomena) Dirty Read: 아직 commit되지 않은 트랜잭션의 변경사항을 다른 트랜잭션이 조회하는 경우 Non-repeatable Read: 같은 쿼리를 두 번 실행하는 트랜잭션에서 그 사이 다른 트랜잭션이 변경하여 다른 결과값이 나오는 경우 Phantom Read: 같은 쿼리를 두 번 실행하는 트랜잭션에서 그 사이 없던 데이터가 추가되는 경우 트랜잭션 고립 수준 (Isolation Level) 레벨이 오를수록 격리 수준/데이터 정합성 증가, 성능 감소 Level 0 - Read Uncommited 트랜잭션 수행중이거나 아직 commit되지 않은 데이터를 다른 트랜잭션에서 read 허용 Dirty Read, Non-repeatable Read, Ph..
회복 (Recovery) : 트랜잭션 처리를 수행하는 도중 장애 발생으로 데이터베이스 손상시 이전 상태로 복구 장애 유형 실행 장애: 무결성 규정 위반 등 연산이 실패 트랜잭션 장애: 트랜잭션 내부의 비정상적인 상황으로 프로그램 실행이 중지 시스템 장애: 하드웨어 오동작 미디어 장애: 저장장치인 디스크 손상으로 데이터베이스의 물리적 손상 Redo, Undo Redo 장애 발생 시점 기준 이미 완료된 트랜잭션에 대해서 로그 파일을 읽어서 복구 변경되는 내용은 로그 파일에 기록 로그 레코드 순차적 실행 Undo 장애 발생 시 진행중이던 트랜잭션은 수행 이전 상태로 복구 장애가 발생하면 변경된 모든 내용 취소 로그 레코드 역순 실행 회복 기법 1. 로그 기반 회복 기법 - 지연 갱신 (Deferred Upda..
트랜잭션(Transaction) : 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위 (작업 단위: 많은 SQL 명령문들을 사람이 정하는 기준에 따라 정하는 것) 트랜잭션의 특징 - 복구 및 병행 수행 시 처리되는 작업의 논리적 단위 - 하나의 트랜잭션은 COMMIT 되거나 ROLLBACK 됨 - 일반적으로 회복의 단위임 트랜잭션의 성질 (ACID) 원자성 (Atomicity): 트랜잭션은 모두 DB에 반영이 되거나 모두 반영되지 않음 일관성 (Consistency): 트랜잭션이 완료되면 DB는 일관성 있는 상태를 유지함 격리성 (Isolation): 트랜잭션 수행 중 다른 트랜잭션이 끼어들 수 없음 영속성/지속성 (Durability): 트랜잭션의 결과는 영구적으로 반영됨 트랜잭션의 연산과 상태..
뷰 (View) : 사용자에게 자료를 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된 가상 테이블 (테이블은 디스크 공간이 할당되어 데이터를 저장함 / 뷰는 데이터 딕셔너리 테이블에 뷰에 대한 정의만 저장) 물리적으로 존재하지 않고 논리적 데이터 독립성을 가짐 정의된 뷰를 다른 뷰의 정의의 베이스가 될 수 있음 뷰를 삭제하면 그 뷰를 베이스로 정의된 뷰도 자동 삭제됨 기본키를 포함한 속성 집합으로 뷰를 구성해야만 삽입, 삭제, 갱신 연산이 가능 DML 구문 적용 시 기본 테이블 데이터도 변경됨 변경 연산(삽입, 삭제, 갱신) 불가능한 경우 - 뷰의 열이 산술식(상수, 연산자, 함수) - 집단함수, distinct, group by 등이 사용되어 정의된 뷰 - 두 개 이상의 테이블과 관련되어..
반정규화 : 정규화로 데이터 조회 비용이 늘어남, SELECT 속도 향상을 위해 중복을 허용하여 DB 구조 재조정 반정규화 방법 테이블 병합 두 테이블이 조인되어 사용하는 경우가 많으면, 성능 향상을 위해 하나의 테이블로 병합하여 사용 고려사항 조회가 간편하지만 레코드(row) 증가로 데이터 처리량 증가 입력, 수정, 삭제 규칙이 복잡해질 수 있음 NOT NULL, DEFAULT, CHECK 등 constraint 설계가 어려움 테이블 분할 수직 분할 테이블에 속성이 너무 많을 경우, 칼럼을 분할하여 새로운 테이블을 만드는 것 UPDATE/SELECT 자주 되는 속성 / 크기가 큰 속성 / 보안 적용이 필요한 특정 속성을 분할 수평 분할 레코드별 사용 빈도에 따라 레코드를 기준으로 테이블 분할 고려사항 ..