데이터 베이스 개념 정리
개념정리
데이터베이스란 일반적으로 컴퓨터 시스템에 전자 방식으로 저장된 구조화된 정보 또는 데이터의 체계적인 집합을 의미한다.
DBMS(DataBase Management System)란 사용자와 데이터베이스 사이엥서 사용자의 요구에 따라 정보를 생성해 주고 데이터베이스를 관리해 주는 소프트웨어입니다.
SQL(Structured Query Language)란 관게형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.
Transaction
Transaction은 데이터베이스 관리시스템에서 하나의 작업단위이다.
데이터베이스는 여러 사람들이 데이터를 공유하여 이용하기위한 목적을 가진다. 이를 위해서 트랜젝션의 기능을 제대로
수행하기 위해서는 4가지의 특성을 만족해야하는데 이를 ACID 라고 부른다.
ACID
- Atomicity(원자성) : 트랜잭션이 수행하는 연산들을 모두 정상적으로 처리하거나 모두 처리하지
않아야한다는 All-or-nothing 방식을 의미한다. - Consistency(일관성) : 트랜잭션이 성공적으로 수행된 이후에도 데이터베이스의 데이터는 일관된 상태를
유지해야 하는 것을 의미한다. - Isolation(격리성) : 하나의 트랜잭션이 완료될 때까지 다른 트랜잭션이 간섭하지 못하도록하여 각각의
트랜잭션이 독립적으로 수행되어야 한다는 것을 의미한다. - Durability(지속성) 트랜잭션이 성공적으로 완료된 이후에 데이터베이스의 데이터들이 영구적으로 보존되어야 한다는 것을 의미한다.
RDBMS - 관계형 데이터베이스 관리 시스템
관계형 데이터베이스란 테이블로 이루어져 있으며, 이 테이블은 Key와 value의 관계를 나타낸다.
이처럼 데이터의 종속성을 관계로 표현하는 것이 특징이며 외래 키를 사용하여 테이블 간 Join이 가능하다.
특징
1
2
3
4
1. 데이터의 분류, 정렬, 탐색 속도가 빠르다.
2. 오랫동안 사용된만큼 신뢰성이 높고, 어떤 상황에서도 데이터의 무결성을 보장한다.
3. 기존에 작성된 스키마를 수정하기가 어렵다.
4. 데이터베이스의 부하를 분석하는 것이 어렵다.
NoSQL(Not Only SQL)
NoSQL은 테이블 간 관계를 정의하지 않으며 데이터 테이블은 그냥 하나의 테이블이며 테이블 간의 관계를
정의하지 않아 일반적으로 테이블 간 Join도 불가능하다.
빅데이터의 등장으로 인해 데이터와 트래픽이 기하급수적으로 증가함에 따라 RDBMS에 단점인 성능을
향상시키기 위해서 장비를 업그레이드하는 Scale-Up의 비용이 기하급수적으로 증가시키기 때문에
데이터의 일관성은 포기하되 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 Scale-out 목표로 등장했습니다.
1. Key-Value Database
key와 Value의 쌍으러 저장되며 Key는 Value에 접근하기 위한 용도로 사용되며, 값은 어떠한 형태의 데이터라도 담을 수 있다.
간단한 API를 제공하는 만큼 질의의 속도가 굉장히 빠른 편이다.
대표적인 NoSQL Key-Value Model로는 Redis, Riak Amazon Dynamo DB등이 존재한다.
2. Document Database
key와 Document의 형태로 데이터가 저장되며 Key-Value Model과 다른 점이라면 Value가 계층적인 형태인 Docuement로 저장된다.
객체지향에서의 객체와 유사하여, 하나의 단위로 취급되어 저장된다. 즉 하나의 객체를 여러 개의 테이블에 나눠 저장할 필요가 없어지는 것이다.
위의 모델 또한 검색에 최적화되어있지만 사용이 번거롭고 쿼리가 SQL과 다르다는 점이 단점이다.
질의의 결과가 JSON이나 xml 형태로 출력되기 때문에 사용 방법이 RDBMS에서의 질의 결과를 사용하는 방법과 다르다.
대표적인 NoSQL Document Model로는 MongoDB, CouchDB등이 존재한다.
3. Wide Column Database
Column-family Model 기반의 Database이며 이전의 모델들이 Key-Value 값을 이용해 필드를 결정했다면,
해당 모델은 키에서 필드를 결정한다, 키는 Row와 Column-family, Column-name을 가진다.
연관된 데이터들은 같은 Column-family 안에서 각자의 Column-name을 가지게 되며, 이렇게 저장된 데이터는
하나의 커다란 테이블로 표현이 가능하다.
질의는 Row,Column-family, Column-name을 통해 수행된다.
대표적인 NoSQL Column-family model로는 HBase, Hypertable, Cassandra 등이 있다.
4. Graph Database
Graph Model 에서는 데이터를 Node와 Edge, Property와 함께 그래프 구조를 사용하여 데이터를 표현하고 저장하는 DataBase이다.
개체와 관계를 그래프 형태로 표현한 것이므로 관계형 모델이라고 할 수 있으며, 데이터 간의 관계가 탐색의 키일 경우에 적합하다.
연관된 데이터를 추천해주는 추천엔진이나 패턴 인식등의 데이터 베이스로 적합하다.
대표적으로 NoSQL Graph Model로는 Neo4j 등이 있다.
5. Time Series Database
시계열 데이터를 처리하기 위해 최적화된 데이터베이스로써 바르고 정확하게 실시간으로 쌓이는 대규모 데이터들을 처리할 수 있도록 고안되었다.
시간의 흐름에 따라 데이터를 분석하기에 매우 용이하다.
대표적으로 influxDB, TimeScale 등이 존재한다.
6. Real-time Database
실시간 데이터베이스는 구글 클라우드에 호스팅된 데이터베이스로써 데이터들이 JSON 형태로 저장된다.
대표적으로 Firebase 등이 존재한다.
RDBMS | NoSQL | |
---|---|---|
장점 | 명확한 데이터 구조를 보장한다 | 자유로운 데이터 구조를 가질 수 있다. |
- | 관계는 각 데이터를 중복없이 한번만 저장할 수 있다. | 데이터 분산이 용이하며 성능 향상을 위한 Scale-Up뿐만 아니라 Scale-Out 또한 가능하다. |
단점 | 시스템이 커질 경우 Join문이 많은 복잡한 쿼리가 만들어질 수 있다. | 데이터 중복이 발생할 수 있다. |
- | 서버의 성능을 향상 시켜야하는 Scale-up만 지원한다. | 중복된 데이터가 변경 될 경우 수정을 모든 컬렉션에서 수행을 해야한다. |
- | 스키마로 인해 데이터가 유연하지 못한다. | 명확한 데이터 구조를 보장하지 않으며 데이터 구조 결정이 어려울 수 있다. |
RDBMS, NoSQL 사용하는 경우
RDBMS는 데이터 구조가 명확하며 변경 될 여지가 없으며 명확한 스키마가 중요한 경우 사용하는 것이 좋다.
중복된 데이터가 없어 변경이 용이하기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합하다.
NoSQL은 정확한 데이터 구조를 알 수 없고 데이터가 변경/확장이 될 수 있는 경우에 사용하는 것이 좋다.
데이터 중복이 발생 수 있고, 중복된 데이터가 변경될 시에는 모든 컬렉션에서 수정을 해야하는 단점이 있다.
이를 기반으로 Update가 많이 이루어지지 않는 시스템이 좋으며 또한 Scale-out이 가능하므로 막대한 데이터를 저장해야하는 시스템에 적합하다.