1. 개념
원래는 Non-SQL 또는 Non-Relational 데이터베이스 종류를 지칭하기 위해 생긴 용어이다. 하지만, IT 업계 전반에 걸쳐 SQL의 활용도가 높기 때문에 NoSQL 데이터베이스인데도 오히려 SQL을 지원하는 경우가 많아지고 있다. 이 때문에 현재는 Not-only SQL의 의미로 쓰이는 경우도 있다.
RDBMS의 한계점을 각 NoSQL마다의 해결책을 제시하고 있어 어떤 속성을 가져야 NoSQL이다라고 지칭할 수 없다.
2. 특징
2.1 RDBMS와 비교한 장점
- 데이터 형식이 자유롭다. * 데이터 타입 * 데이터 길이, 크기
- RDBMS에서 데이터의 형식이 테이블로 정해져 있기 때문에 데이터를 Java의 객체 모델에 연결해서 표현하기 힘든 문제(Object-Relation Impedance Mismatch)를 해결할 수 있다. * Object를 표현할 수 있는 문서의 구조를 가질 수 있다.
- SQL 형식을 맞추지 않더라도, 전용 라이브러리나 함수 등으로 쉽게 조회할 수 있다.
- 용도나 목적에 맞는 DB를 선택하면 데이터 저장/조회 속도를 높일 수 있다. * RDBMS는 관계형 데이터를 범용적으로 표현할 수 있지만, 데이터가 많아지면 일정 수준 이상의 속도를 갖는 데 한계가 있다.
- 빅데이터 NoSQL DB의 경우, 더 많은 데이터를 저장하면서도 빠른 데이터 접근 속도를 보장할 수 있다.
단, NoSQL 데이터베이스 종류는 너무 많기 때문에, 위에 언급한 모든 장점을 갖는 NoSQL DB는 없다. RDBMS에서 할 수 없는 것 중에 여기 있는 장점 중 필요한 것이 있다면, 그것을 제공할 수 있는 NoSQL DB를 선택하면 된다.
2.2 RDBMS와 비교한 단점
- 기능이나 형식의 표준이 없다. 사용하는 DB별로 전용 라이브러리나 함수를 이용해서 각각 구현해야 한다.
- JDBC, ODBC에서 Client를 제공하기도 하지만, NoSQL DB마다 사용하는 용도나 목적이 분명하기 때문에 RDBMS 수준으로 스펙을 모두 지켜서 제공하기 힘들다.
- 다른 데이터 집합(table, collection, index 등)에 대해 Foreign Key가 없거나, 있더라도 Cascading 옵션이 없기 때문에 서로 다른 집합의 데이터 사이의 관계 설정에서 정합성을 보장하지 못 한다.
- SQL을 지원하더라도 표준 SQL의 모든 기능을 제공하지 못한다.
- Transaction의 ACID 특성을 모두 제공하지 못한다. eventually consistency를 상정하고 사용해야 한다.
3. 종류
3.1 MongoDB
- 대표적인 NoSQL DB이다.
- 가장 범용적으로 많은 기능을 담고 있는 데이터베이스이다.
- RDBMS의 대표 기능인 Transaction 기능이 초기에는 없었지만, 발전해오면서 단일 Collection의 Document 단위로 Atomicity와 Transaction 기능을 제공한다.
- 빅데이터용 데이터베이스는 아니지만 Sharding으로 확장성도 제공한다.
3.2 Redis In-Memory
- 데이터베이스의 대표 주자이다.
- 자료구조를 먼저 정하고 사용하게 된다.
- 싱글 스레드로 Lock을 제공하지 않으면서도 빠르게 데이터를 조회할 수 있는 장점이 있다.
- 자료구조의 특징을 이해한 뒤에 성능에 주의해서 사용해야 한다.
- In-Memory는 Data가 memory에 있어서 빠르지만, 전원이 꺼졌을 때 삭제 위험이 있다. 즉, 유실되어도 괜찮은 데이터에 대해서만 사용한다.
3.3 Apache HBase
- 빅데이터용 데이터베이스의 대표 주자이다.
- 단일 Key로만 데이터를 저장, 조회하는 것이 가장 큰 제약이자 장점이다.
- 데이터가 아무리 많아져도 단일 Key에 대한 조회 속도는 거의 느려지지 않는다.
- Key를 제대로 사용하는 방법을 중심으로 익혀야 한다.
3.4 Apache Druid
- Cube형 데이터베이스의 대표 주자이다.
- 집계 연산에 최적회 되어 있다.
- 대용량의 데이터에 대한 합, 카운트 등의 연산을 빠르게 수행할 수 있다.
- 단, 집계 조건에 맞춰 Cube Modeling을 미리 해둬야 한다. Cube Modeling을 위한 개념과 방법을 중심으로 익혀야 한다.
'Computer Science > Database' 카테고리의 다른 글
[Database] ORM(Object Relation Mapping) (0) | 2023.01.24 |
---|---|
[Database] JDBC - Prepared Statement, CallableStatement (0) | 2023.01.19 |
[Database] JDBC - Statement, ResultSet (0) | 2023.01.17 |
[Database] JDBC - DriverManager, Connection (MySQL 접속) (0) | 2023.01.13 |
[JDBC] JDBC (Java Database Connectivity) (0) | 2023.01.12 |