목록Database (9)
이것저것
[동시성 제어란?] 동시성 제어란 DBMS가 다수의 사용자 사이에서 동시에 작용하는 다중 트랜잭션의 상호간접 작용에서 database를 보호하는 것을 의미한다. 일반적으로 동시성을 허용하면 일관성이 낮아지게 된다. 동시성과 일관성의 상관 관계 - 다수 사용자의 동시 접속을 위해 DBMS는 동시성 제어를 할 수 있도록 Lock 기능과 SET TRANSACTION 명령어를 이용해 트랜잭션의 격리성 수준을 조정할 수 있는 기능도 제공한다. - 동시성 제어 방법 -> 비관적 동시성 제어, 낙관적 동시성 제어 [비관적 동시성 제어] 데이터를 읽는 시점에 Lock - 사용자들이 같은 데이터를 동시에 수정할 것이라고 가정 - 데이터를 읽는 시점에 Lock을 걸고, 트랜잭션이 완료될 때까지 이를 유지 - SELECT ..
[Lock이란?] 로킹 기법 : 트랜잭션들이 동일한 데이터 항목에 대해 임의적인 병행 접근을 하지 못하도록 제어하는 것 "나 지금 작업할거니깐 Lock 걸 것이고 Lock건 동안에는 접근 못해!" 트랜잭션 T가 데이터 항목 X에 대해 Read(X) or Write(X) 연산을 수행하려면 반드시 lock(X) 연산을 해주어야함 트랜잭션 T가 실행한 lock(X)에 대해서는 해당 트랜잭션이 종료되기 전에 반드시 unlock(X) 연산을 해주어야함 트랜잭션 T는 다른 트랜잭션에 의해 이미 lock이 걸려있는 X에 대해 다시 lock을 수행시키지 못한다. 트랜잭션 T가 X에 lock을 걸지 않았다면, unlock(X)를 수행시키지 못한다. 즉, 여러개의 트랜잭션들이 하나의 데이터로 동시에 접근하려고 할 때 이를..
[동시성 제어란?] 다중 사용자 환경을 지원하는 DB 시스템에서 동시에 실행되는 여러 트랜잭션의 간섭으로 문제가 발생하지 않도록 트랜잭션의 실행 순서를 제어하는 기법이다. 일반적으로 동시성을 허용하면 일관성이 낮아진다. 동시성 제어의 목적 - 실행되는 트랜잭션의 수를 최대화 - 입력, 수정, 삭제, 조회 시 데이터의 무결성 유지 동시성을 위한 기본 요소 "직렬성" 직렬성 : 여러 트랜잭션들이 동시에 수행될 때, 마치 각각의 트랜잭션이 순차적으로 수행되는 것처럼 트랜잭션 간 간섭이 없다는 것을 의미한다. 격리 수준 (Isolation Level)이 높을 수록 직렬성 (Serializabilty)가 높다. [동시성 제어를 하지 않을 경우의 문제점] 1. 갱신 분실 (Lost Update) 여러 트랜잭션들이 ..
RDBMS 과 NOSQL의 차이란? 가장 큰 차이는 RDBMS(관계형 데이터베이스)에는 "TABLE(테이블)"이 존재한다는 점이다. 테이블을 통해 데이터의 종속성을 관계로 표현한다는 것이 RDBMS의 가장 큰 특징이다! 반면, NOSQL은 행과 열로 이루어진 테이블 형식 스키마를 사용하지 않는다. 즉, 고정된 테이블 스키마가 필요하지 않다는 것이 NOSQL의 가장 큰 특징이다. NOSQL 의 장점 - 가장 큰 장점이라면 NOSQL에서는 JOIN 연산을 사용할 수 없기 때문에, 스케일 아웃을 통한 노드 확장이 용이하다. (수평적 확장 가능) - 또한, 고정적인 테이블 스키마가 필요 없기 때문에 가변적인 구조로 데이터를 저장할 수 있기 때문에 유연성이 높다. NOSQL 의 단점 - 다양하고 복잡한 쿼리의 사..
1. Transaction의 정의 트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 2. Transaction의 성질- ACID Atomicity(원자성) 트랜잭션의 연산은 데이터베이스에 모두 반영되든지, 아니면 전혀 반영되지 않아야 함. 트랜잭션 내의 모든 명령은, 분할할 수 없는 단위로 여겨 모든 단계가 완료되거나, 모두 완료하지 않도록 해야 함. Consistency(일관성) 트랜잭션은 데이터의 무결성을 위반한 상태로 데이터베이스를 내버려 두지 않음 Isolation(독립성, 격리성) 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭..
[2pl이란?] Lock을 걸고 해제하는 시점에 제한을 두지 않으면 두 개의 트랜잭션이 동시에 실행될 때 데이터의 일관성이 깨질 수 있으므로 로킹 단계를 2개로 구분하여 이를 방지하는 방법 결론 : 직렬 가능성을 보장한다 but 교착상태가 발생할 수 있다. 확장 단계 (Growing Phase) : 트랜잭션은 새로운 Lock 연산만 할 수 있고, Unlock 연산은 할 수 없는 단계 축소 단계 (Shrinking Phase) : 트랜잭션은 Unlock 연산만 실행할 수 있고, Lock 연산만 실행할 수 없는 단계 로킹 단위가 속성->튜플->릴레이션->데이터베이스로 커질 수록 구현이 용이하고, Lock의 수가 적어지며 제어가 간단하지만 병행성이 떨어진다. 그러나, 로킹 단위가 작을 수록 구현이 복잡하고, ..
[DBCP란?] 서버는 동시에 사용할 수 있는 사람의 수라는 개념이 존재한다. 일반적으로 Connection Pool을 이용하지 않으면 동시 접속자 수를 벗아나게 될 경우 에러(예외)가 발생하게 됩다. 예외가 발생하게 된다면 접속자는 더 이상 처리를 하지 못하므로, 사이트 이용자는 다시 접속을 시도해야하는 불편함이 있다. 이를 해결하기 위해 탄생한 것이 Connection Pool이다. Connection Pool이란 동시 접속자가 가질 수 있는 Connection을 하나로 모아두고 관리한다는 개념이다. 누군가 접속하면 자신이 관리하는 Pool에서 남아있는 Connection을 제공한다. 하지만 남아있는 Connection이 없는 경우라면 해당 클라이언트는 대기 상태로 전화시킨다. 그리고 Connecti..
[데드락(교착상태)이란?] 두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 Lock을 획득하고 상대방 데이터에 대하여 Lock을 요청하면 무한 대기 상태에 빠질 수 있는 현상 데이터베이스의 데드락은 운영체제의 데드락과 상당히 비슷합니다. 위의 정의를 풀어 설명하면, 공통된 자원을 이용하기 위해 여러 개의 트랜잭션이 서로 Lock을 걸어주다가 무한 대기 상태에 빠지는 것을 데드락이라고 한다. 예를 들어 먼저 T1에서 A에 대해 Lock을 걸고, T2에서 B에 대해 Lock을 걸었다고 가정해보자. 그리고 나서 T1에서 B에 대해 Lock을 걸고 T2가 A에 대해 Lock을 건다면, T1과 T2는 서로 A, B에 대한 Lock을 유지하며 무한루프에 빠지게 된다. 일반적으로 데드락이 발생하면 DBMS가 T..