RDB

RDB는 Relation DataBase의 약자이다. RDB를 만든 핵심 개념이 관계형 대수학이다. 자료를 관계형 대수학 개념으로 묶고 이를 바탕으로 테이블을 만든다. 뿐만 아니라 SQL문법역시 관계형 대수학을 기반으로 한다. 그리하여 "관계형"데이터베이스 라는 이름을 얻었다.

데이터는 테이블에 레코드로 저장되는데, 각 테이블마다 명확하게 정의된 구조(스키마)가 있다. 데이터를 저장할때 스키마를 준수하지 않은 레코드는 저장할 수 없다.

 

NOSQL

Nosql은 RDB의 확장성이슈를 해결하기 위해 나온 데이터베이스 모델이다. 

스키마가 없기때문에 RDB보다 자유롭게 데이터를 관리할 수 있다.

NoSQL 에서는 Document에 데이터가 저장된다. 여기서 Document는 RDB의 레코드이며 테이블은 Collection이라는 형태로 데이터를 관리한다.

 

위와같은 데이터가 있다면 RDB는 필요한 정보만 따로 빼서 각각의 테이블에 저장해야 하지만 NoSQL의 경우 위 데이터를 통째로 저장할 수 있는 차이점이 있다.

RDB의 경우 성능상 이슈가 있을경우 Scale-Up을 통해 업그레이드를 할수밖에 없지만 NoSql의 경우 데이터 모델 자체가 독립적으로 설계되어있어 데이터를 여러 서버에 분산 시키는 Scale-Out을 통해 개선이 가능하다. 물론 RDB도 샤딩을 통해 충분히 Scale-Out할 수 있지만 어플리케이션 레벨에서 모든 샤딩을 제어해야 한다 (어떤 데이터를 요청하면 어느 클러스터에서 처리해라) 그러나 NoSql은 자체적으로 지원하기 때문에 복잡한 제어가 필요하지 않다.

'데이터베이스' 카테고리의 다른 글

Index  (0) 2021.05.18
Transaction  (0) 2021.05.17

Index의 목적 : SELECT 쿼리의 WHERE절이나 JOIN 예약어를 사용했을때만 인덱스를 사용되며 SELECT 쿼리의 검색 속도를 빠르게 하는데 목적을 두고 있다.

테이블의 칼럼을 색인화하여 데이터베이스 안의 레코드를 처음부터 풀스캔하지 않고, B+ Tree로 구성된 구조에서 Index 파일 검색으로 속도를 향상시키는 기술이다.

 

테이블 생성시, 3가지 파일이 생성된다.

  • FRM : 테이블 구조 저장 파일
  • MYD : 실제 데이터 파일
  • MYI : Index 정보 파일 (Index 사용 시 생성)
    • 해당 컬럼을 인덱스로 설정해 놓으면 SELECT를 할때 MYI파일의 내용을 검색한다.

 

인덱스의 장점

  • 키 값을 기초로 하여 테이블에서 검색과 정렬 속도를 향상시킨다.
  • 질의나 보고서에서 그룹화 작업의 속도를 향상시킨다.

'데이터베이스' 카테고리의 다른 글

RDB와 NOSQL 차이점 간단 정리  (0) 2021.06.07
Transaction  (0) 2021.05.17

Transaction : 데이터베이스의 데이터를 조작하는 작업의 단위이다.

transaction은 ACID원칙을 보장해야 한다. 

  • Atomicity (원자성) : 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장한다. All or Nothing의 개념
  • Consistency (일관성) : 트랜잭션이 성공적으로 완료되면 일관적인 DB상태를 유지해야 한다.
  • Isolation (독립성) : 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는것을 말한다.
  • Durability (영구성) : 성공적으로 수행된 트랜잭션은 영원히 반영되는것을 말한다.

 

Commit : 하나의 트랜잭션이 성공적으로 끝났고, DB가 일관성있는 상태일 때 이를 알려주기 위해 사용하는 연산

Rollback : 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션 원자성이 깨진 경우, 트랜잭션의 시작상태로 롤 백 할 수 있음.

 

하지만 ACID 원칙은 종종 지켜지지 않는다. 원칙을 완벽하게 지키려 하면 동시성이 매우 떨어지기 때문이다. 

그렇기 때문에 DB 엔진은 ACID 원칙을 희생하여 동시성을 얻을 수 있는 방법을 제공한다. 바로 transaction의 Isolation level이다. Isolation 원칙을 덜 지키는 level을 사용할수록 문제가 발생할 가능성은 커지지만 동시성은 얻을 수 있다. 

동시성을 제공함으로써 생기는 격리성 문제

1. Dirty Read

- 데이터 캐시에는 변경이 되었지만, 디스크에는 변경되지 않은 데이터를 Dirty Page라하고, 이를 읽는 작업을 Dirty Read

2. Non-Repeatable Read

- 트랜잭션 내 다른 시점에 읽은 하나의 데이터가 값이 다른 것

3. Phantom Read

- 트랜잭션 수행 중 없던 행이 추가되어 새로운 데이터를 읽게 되거나 존재하던 데이터가 사라지는 것, 트랜잭션 내 동일한 조건으로 읽은 데이터의 개수가 달라지는 것

 

트랜잭션 격리 Level

1. Read Uncommitted

  • 트랜잭션이 완료(Commit)되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용
  • 해당 데이터를 SELECT할 경우 Shared-Lock이 걸리지 않는다.
  • 발생할 수 있는 격리성 문제 : Dirty Read, Non-repeatable Read, Phantom Read

 

2. Read Committed

  • 트랜잭션이 완료된 데이터만 읽는 것을 허용
  • 해당 데이터를 SELECT할 경우 Shared-Lock 이 적용된다.
  • SELECT가 끝날때까지만 Shared-Lock이 적용된다. 
  • 발생할 수 있는 격리성 문제 : Non-repeatable Read, Phantom Read

 

3. Repeatable Read

  • 트랜잭션이 완료되기 전까지 Shared-Lock을 적용하여 다른 트랜잭션에서 해당 데이터를 읽을 수 없다.
  • 따라서 트랜잭션이 완료 되기 전까지 일관된 데이터가 보장된다. (Non-Repeatable Read 예방)
  • Shared-Lock이 해제 되기 전에도 다른 트랜잭션에서 새로운 데이터를 삽입하는 것은 가능하기때문에 Phantom Read는 발생할 수 있다.
  • 발생할 수 있는 격리성 문제 : Phantom Read

 

4. Serializable

  • Shared-Lock이 범위(Range) 단위로 적용되고, 트랜잭션이 완료된 이후에 해제가 된다.
  • 범위 단위의 Lock 덕분에 Phantom Read까지 예방할 수 있다.
  • 발생할 수 있는 격리성 문제 : 없음



출처: https://s1107.tistory.com/45 [개발자]

'데이터베이스' 카테고리의 다른 글

RDB와 NOSQL 차이점 간단 정리  (0) 2021.06.07
Index  (0) 2021.05.18

+ Recent posts