본문 바로가기

반응형

데이터베이스(DB)

[DB] 11. 인덱스(Index) - (1) 개념, 장단점, B+Tree 등 [목차] 1. 인덱스(Index)란? 2. 인덱스(Index)의 장단점 3. 인덱스를 사용하면 좋은 경우 4. 인덱스의 자료 구조 1. 인덱스(Index)란? 인덱스(Index)는 데이터베이스의 테이블에 대한 검색 속도를 향상시켜주는 자료구조이다. 테이블의 특정 컬럼(Column)에 인덱스를 생성하면, 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다. 컬럼의 값과 물리적 주소를 (key, value)의 한 쌍으로 저장한다. 인덱스는 책에서의 목차 혹은 색인이라고 생각하면 된다. 책에서 원하는 내용을 찾을 때 목차나 색인을 이용하면 훨씬 빠르게 찾을 수 있는데, 마찬가지로 테이블에서 원하는 데이터를 찾기 위해 인덱스를 이용하면 빠르게 찾을 수 있다. 그러므로 데이..
[DB] 10. B-Tree (B-트리) [목차] 1. B-Tree란? 2. B-Tree의 key 검색 3. B-Tree의 key 삽입 4. B-Tree의 key 삭제 참고) emplam27.log 블로그 https://hyungjoon6876.github.io/jlog/2018/07/20/btree.html https://helloinyong.tistory.com/296 1. B-Tree란? B-Tree는 탐색 성능을 높이기 위해 균형 있게 높이를 유지하는 Balanced Tree의 일종이다. 모든 leaf node가 같은 level로 유지되도록 자동으로 밸런스를 맞춰준다. 자식 node의 개수가 2개 이상이며, node 내의 key가 1개 이상일 수 있다. node의 자식 수 중 최댓값을 K라고 하면, 해당 B-Tree를 K차 B-Tree라..
[DB] 9. 트랜잭션(Transaction) - (4) 고립화 수준, 회복 기법 [목차] 1. 트랜잭션 고립화 수준 2. 트랜잭션 회복 기법 1. 트랜잭션 고립화 수준 트랜잭션 고립화 수준(Transaction Isolation Level)은 트랜잭션의 독립성, 고립성을 유지하기 위해 데이터에 대한 접근을 허용하는 수준을 말한다. 로킹(Locking) 기술을 기반으로 고립화 수준을 조정하며 총 4개의 레벨로 구성되어있다. 고립화의 수준에 따라 발생할 수 있는 문제점들이 있는데, 수준이 높아질수록 문제점이 줄어드는 형태이다. 다음과 같은 문제점들이 발생할 수 있다. 1) 부정 판독(Dirty Read) 부정 판독은 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것을 말한다. 트랜잭션 T1이 특정 데이터를 갱신한 후 T2가 해당 데이터를 읽은 다음 T1이 Rollb..
[DB] 9. 트랜잭션(Transaction) - (3) 병행 제어, 로킹, 타임스탬프 [목차] 1. 병행 제어(Concurrency Control)란? 2. 병행의 문제점 3. 병행 제어 기법 1. 병행 제어(Concurrency Control)란? 병행 제어에 앞서, 먼저 병행에 대해서 알아보자. 병행(Concurrency)은 매우 빠르게 여러 트랜잭션 사이를 이동하면서 조금씩 처리를 수행하는 방식이다. 따라서 실제로는 한 번에 한 트랜잭션만 수행하지만, 마치 동시에 여러 트랜잭션을 수행하는 것처럼 보이도록 하는 것이다. 병행 제어(Concurrency Control)는 이렇게 트랜잭션이 병행 수행될 때 트랜잭션이 데이터베이스의 일관성을 파괴하지 않고, 다른 트랜잭션에 영향을 주지 않도록 트랜잭션 간의 상호작용을 제어하는 것을 말한다. 병행 제어의 목적은 다음과 같다. 데이터베이스의 일..
[DB] 9. 트랜잭션(Transaction) - (2) 트랜잭션 스케줄 & 충돌, 뷰 직렬 [목차] 1. 트랜잭션 스케줄 2. 충돌 직렬 가능 3. 뷰 직렬 가능 1. 트랜잭션 스케줄 데이터베이스에서 여러 트랜잭션이 동시에 수행될 때, 수행되는 트랜잭션의 순서에 따라서 결과가 달라질 수 있다. 이때 처리하는 순서를 스케줄이라고 한다. 트랜잭션 스케줄은 크게 3가지로 이루어져 있다. 직렬(Serial) 스케줄 : 트랜잭션 별로 연산을 순차적으로 수행하는 것 비직렬(Non-serial) 스케줄 : 인터리빙(Interleaving) 방식을 이용하여 트랜잭션들을 병행하여 수행하는 것 직렬 가능(Serializable) 스케줄 : 직렬성을 가진 스케줄. 트랜잭션이 동시에 수행되더라도 직렬 스케줄과 동일한 결과를 갖는 것 2. 충돌 직렬 가능 스케줄에 따라 결과가 달라지는 이유는 충돌(Conflict)이..
[DB] 9. 트랜잭션(Transaction) - (1) 특성, ACID, 연산, 상태 [목차] 1. 트랜잭션(Transaction)이란? 2. 트랜잭션의 특성 3. 트랜잭션의 연산 4. 트랜잭션의 상태 1. 트랜잭션(Transaction)이란? 트랜잭션(Transaction)은 데이터베이스에서의 논리적 작업 단위이다. 하나의 작업을 수행하기 위해 필요한 데이터베이스 연산 기능들을 모아놓은 것이며 분리되지 않도록 하여 작업의 완전성을 보장한다. 트랜잭션을 통해서 데이터베이스의 회복과 병행 제어가 가능하다. 즉, 데이터베이스에서 오류가 발생하는 경우의 빠른 회복이나, 여러 사용자가 동시에 데이터베이스를 사용할 수 있도록 제어해주는 중요한 역할을 한다. 데이터베이스의 연산을 SQL문으로 표현한다면, 하나의 작업을 수행하는 SQL문의 집합으로 생각할 수도 있다. 2. 트랜잭션의 특성 트랜잭션이 ..
[DB] 8. 정규형 (1NF, 2NF, 3NF, BCNF) [목차] 1. 제1 정규형 2. 제2 정규형 3. 제3 정규형 4. BCNF 정규형이란 정규화된 결과를 말하며, 제1 정규형, 제2 정규형, 제3 정규형, BCNF, 제4 정규형, 제5 정규형이 있다. 실무적으로 제4, 제5 정규형은 잘 쓰이지 않는다고 한다. 따라서 BCNF까지만 설명할 예정이다. 1. 제1 정규형 (1NF) 제1 정규형은 릴레이션에 속하는 속성의 속성 값이 모두 원자값(Atomic Value)만으로 구성되어야 한다. 원자값이란 더 이상 쪼개질 수 없는 단위를 말한다. 예를 들어 위처럼 릴레이션이 이루어져 있다면, 제1 정규형을 만족하지 못한다. 학번이 100인 학생의 과목 번호와 성적이 2개로 이루어져 있기 때문이다. 따라서 제1 정규형이 되려면 다음과 같이 속성 값을 분리해주어야 한..
[DB] 7. 정규화 & 함수 종속성 & 이상현상 [목차] 1. 정규화가 생겨난 배경 2. 정규화란? 3. 반정규화란? 4. 함수 종속성 5. 이상현상(Anomaly) 1. 정규화가 생겨난 배경 한 릴레이션(Relation)에 여러 엔티티의 속성을 혼합하면 정보가 중복 저장되며 저장 공간을 낭비하게 된다. 또 중복된 정보로 인해 '이상 현상'이 발생하게 된다. 이러한 문제를 해결하기 위해 정규화 과정을 거치는 것이다. 2. 정규화란? Attribute 간의 종속성으로 인한 이상현상이 발생하는 릴레이션을 분해하여 재디자인함으로써 이상현상을 없애는 과정 데이터의 중복 방지, 무결성을 충족하기 위해 데이터베이스를 설계하는 방법 정규화에는 아래와 같은 3가지 원칙이 있다. 1. 정보의 무손실 : 분해된 릴레이션이 표현하는 정보는 분해되기 전의 정보를 모두 포함..