데이터베이스 종류 및 간단 설명
데이터베이스의 개념을 알기 위해 데이터베이스의 종류에 무엇이 있는지에 대해 알아보자
1. Key-value Database
- 키와 값 형태로 데이터를 저장하는 데이터베이스이다.
- 너무 간단하기 때문에 서브용 DB로 많이 사용된다.
- 예를 들어, 이름과 나이를 저장하고 싶다면, 다음과 같이 저장한다.
redis
- redis는 key-value 형태로 데이터를 저장하는 방식으로 많이 사용된다
- 데이터를 하드디스크에 저장하지 않고 ram에 저장하여 속도가 빠르다는 장점이 있다.
redis 활용
- 메인 DB를 두고, 사람들이 자주 쓰는 데이터들을 redis에 복사해 둔다
- 해당 데이터가 필요할 경우, 메인 DB에 데이터를 요청하지 않고 redis에서 꺼내서 사용한다.
- 즉, 다음과 같이 빠른 서비스를 만들 때 사용한다.
- 자주 쓰는 데이터 캐싱
- 채팅을 위한 pub/sub
- 영상 스트리밍
- 로그인 기록 저장
2. Relational Database
- table(표)를 하나 만들고 그 위에 어떤 데이터를 저장할지 이름을 써 놓고 하나의 행마다 데이터를 저장하는 방법이다.
- 엑셀도 하나의 관계형 데이터베이스라 할 수 있다.
관계형 데이터베이스에서는 다음과 같이 대량의 데이터들을 저장할 때 다음과 같은 DBMS 등이 사용된다.
데이터베이스 점유율을 보면, 상위권에 관계형 데이터베이스들이 많이 있는 것을 확인할 수 있다. 즉, 가장 많이 쓰인다.
- 관계형 데이터베이스를 사용할 때는 SQL(Structured Query Language) 문법을 사용한다.
- 또한, 관계형 데이터베이스의 특징은 데이터를 정규화해서 저장한다는 점이다.
정규화
- 데이터에서 중복이 발견되었을 때 중복이 되는 부분을 다른 테이블로 모두 쪼개서 중복을 제거하는 것
- 입출력과 같은 문법이 길고, 복잡해진다는 단점이 있다.
ACID Transaction 기능
- 관계형 데이터베이스는 transaction 기능이 기본적으로 들어있다.
- transaction 기능을 사용하면, 돈거래와 같은 기능을 구현하고 싶을 때 안전하게 구현할 수 있고, 실패 시 롤백이 가능하다.
즉, 관계형 데이터베이스는 입출력 속도보다 데이터 정확도가 매우 중요한 서비스라면 일반적으로 관계형 DB를 사용한다.
3. Graph Database
- 많은 사람들이 이름 때문에 관계형 데이터베이스를 관계를 잘 표현한다고 생각한다.
- 하지만, '관계'라는 용어는 수학 용어 중 relation이라는 행렬에서 쓰는 용어를 말한다.
- 즉, 관계형 데이터베이스는 관계를 중점으로 다루기엔 어려운 점이 많다.
- 관계를 주로 다루고 싶을 때 Graph Database를 활용한다.
Graph Database에는 다음과 같은 DB가 있고, 가장 유명한 DB는 neo4j이다.
- Graph Database를 사용하는 방법은 노드를 만들고, 그 안에 데이터를 저장할 수 있는데, 노드끼리 어떤 관계를 갖고 있는지 표현할 수 있다.
- 이를 사용하기 위해 Graph Query Language를 사용한다.
- Graph Database는 다음과 같은 경우에 사용한다.
- 비행기 노선
- 친구 관계
- 코로나 전염맵
- 추천 서비스
4. Document Database
- Graph Database와 같이 특수한 것이 아닌, 일반적인 상황에서 쓰는 데이터베이스는 Relational Database과 Document Database가 있다.
- Document Database의 경우 Relational Database보다 좀 더 자유로운 상황에서 쓰며, 다음과 같은 것들이 있다.
- Document Database는 다음과 같이 데이터를 저장한다.
- collection이라는 이름의 폴더를 만든다.
- 그 안에 document라고 부르는 파일들을 만든다.
- document 파일 안에 json(key-value) 형태로 데이터를 저장한다.
관계형 데이터베이스와 차이점 및 특징
- 어떤 데이터를 저장할지 미리 정의할 필요가 없다.
- 즉, 중간에 데이터의 구조가 바뀌어도 에러가 나지 않는다.
- 가장 큰 특징은 데이터의 중복 제거를 하지 않는다는 점이다. 즉, 정규화가 필요 없어 데이터의 입출력과 같은 문법이 간단해진다.
- 데이터의 분산 처리를 잘해주어 데이터의 입출력이 많은 서비스들에 사용된다.
- SNS
- 실시간 채팅
- 게시판
- 온라인 게임
- 하지만, 데이터의 일관성이 떨어진다는 단점이 있다.
5. Column-family Database
- 관계형 DB과 같이 데이터를 표 형식으로 저장하고 싶은데, 좀 더 유연하게 저장하고 싶을 때 column-family database를 사용한다.
- 대표적으로 다음과 같은 데이터베이스들이 있다.
- 사용 방법
- table을 만들고, row를 만든다.
- row에 자유롭게 column들을 만들어 데이터를 기입한다.
- 행마다 컬럼이 달라도 상관없다.
- 데이터를 입출력하기 위해서 sql문이 아닌 자신들이 만든 언어를 사용한다.
- 정규화가 필요 없어 입출력이 간단하다.
- 복제, 분산 처리 등에 매우 유용하다.
- 데이터의 일관성이 부족하다는 단점이 있다.
6. Search engine Database
- 검색용 인덱스를 보관하기 위한 데이터베이스이다.
- 일반적인 데이터베이스로도 사용할 수 있지만, index 보관에 특화된 데이터베이스이다.
- index란 데이터의 빠른 검색을 도와주기 위한 색인, 목차 같은 것을 말한다.
정리
- 일반적으로 relational database나 document database 중 하나를 골라 사용하면 된다.
- 입출력이 매우 잦을 경우에는 document database를 사용하면 된다.
- 정확도와 일관성이 중요할 경우에는 relational database를 사용하면 된다.
'Database' 카테고리의 다른 글
[데이터베이스] SQL로 DB에 데이터를 추가, 수정, 삭제하기 (2) | 2024.02.29 |
---|---|
[데이터베이스] SQL 개념, 데이터베이스 정의 방법 (0) | 2024.02.23 |
[데이터베이스] 관계형 데이터베이스 개념과 relation, primary key, foreign key, constraints (0) | 2024.02.21 |
[데이터베이스] 데이터베이스(database) 기본 개념 (1) | 2023.11.18 |