No SQL 은 "관계형데이터베이스(RDBMS)를 사용하지 않는다" 는 의미가 아닌, 여러 유형의 데이터베이스를 사용하는 비관계형 데이터베이스 프로그래밍언어이다.
요약하자면 대표적으로 다음과 같은 특징을 가진다.
- 테이블, 칼럼과 같은 스키마를 가지지 않는다.
- 대규모 확대가 가능하도록 수평적 확장성을 가져 대규모의 데이터를 유연하게 처리할 수 있다.
- 집합-지향(Aggregate-oriented)모델을 사용한 분산환경으로, 지연과 처리율이 우수(속도처리빠름)
- 데이터 베이스의 다양한 저장소 사용 가능
- Scale-out구조
- Read/Write 의 성능이 뛰어남
- 빅데이터 처리에 특화되어 있다.
특징
1. 비일관성
NoSQL은 비일관성의 특징을 가진다.
RDBMS와 다르게 ACID를 충족하지 않는다.
* ACID
데이터베이스의 트랜잭션이 안전하게 수행된다는것을 보장하기 위한 성질로,
원자성, 일관성, 격리성(=독립성), 지속성(=영속성)의 4가지 특성을 한 글자씩 따 acid로 부른다.
* 일관성(Consistency)이란?
하지만, NoSQL은 이러한 일관성을 유지하지 않는다. NoSQL은 데이터를 분산저장하기 때문에, 한 영역에 Update가 생길 시 실시간으로 다른 영역에 반영하는것이 쉽지않기 때문에, 꼭 최신은 아닐 수 있지만 업데이트가 되기 전까지는 가지고 있는 최신의 데이터를 반환한다는 "Eventual Consistency" 의 개념을 사용한다.
2. 분산 저장
NoSQL은 수평적 확장을 바탕으로,대량의 데이터와 컴퓨팅 부하를 처리하는 것을 가능하게 하였다.
효율적인 데이터 처리를 위해, 장비의 성능을 향상할 때 수평적 확장(Scale-up)과 수평적 확장(Scale-out) 으로 나눈다.
- 수직적 확장 : 장비의 성능을 키우는 확장법
(하나의 DB를 가지고, 해당 DB의 성능을 향상시킨다.)
- 수평적 확장 : 장비의 수를 늘리는 확장법
(더 많은 서버가 추가되며, DB가 전체적으로 분산된다.)
RDBMS는 수직적 확장을 따르고 있는데, 이러한 수직적 확장의 가장 큰 문제는 높은 비용에 있다. 데이터와 트래픽의 양이 굉장히 늘면서, 장비의 성능을 좋게 하면 할수록 수직적 확장을 위한 비용은 기하급수적으로 증가할 수 밖에 없다.
NoSQL은 수평적 확장을 통해 RDBMS의 문제를 해결했다. 여러대의 컴퓨터에 데이터를 분산 저장함으로써, 작고 값싼 장비 여러 대로 대량의 데이터와 컴퓨팅 부하를 처리하는 것이 가능하게 되었다.
3. Schema-less
NoSQL은 스키마 없이 동작한다. 데이터 구조를 미리 정의할 필요가 없기 때문에 비형식적인 데이터를 저장하는데 용이하지만, NoSQL은 데이터베이스가 스키마를 직접 관리하지 않는것을 의미할 뿐, 데이터 타입에 따른 암묵적인 스키마는 존재한다.
ex)
필드의 이름을 "StudentName" 로 저장했다면, 항상 저장할때 반드시 필드의 이름을 "StudentName" 으로 저장하겠다는 암묵적 스키마가 되지만, 이러한 스키마를 무시하고 "studentname" , "SN" , "STUDENT" 등으로 저장하게 될 수도 있다.
이럴 때 필드의 이름이 다르기 때문에 SN, STUDENT의 새로운 필드가 추가되는것이기 때문에 데이터의 불일치가 존재할 수 있기 때문에 사용에 주의를 기울여야 한다.
장단점
- 장점
1. 스키마가 없기 때문에 유연하다.
=> 비형식적인 데이터를 저장할 수 있고, 언제든지 데이터를 조정하며 새로운 필드를 추가할 수 있다.
2. 데이터를 읽는 속도가 빠르다.
3. ORM 프레임워크가 필요하지 않다.
=> RDMBS는 데이터 구조를 데이터베이스에 저장하기 위해 관계형 표현으로 변환하는 데 이때 ORM프레임워크를 사용한다. 하지만, NoSQL은 메모리 내의 데이터가 어떤 구조이던 상관없이 하나의 집합(Aggregation)으로 저장하기 때문에 변환이 필요없다.
- 단점
1. 데이터 중복이 존재한다.
=> 계속 업데이트 해야되는 단점
2. 데이터를 분산 저장하고 있기 때문에, 중복저장 되어 수정 시 모든 영역의 데이터를 수정해야 한다.
4가지 모델
- Key-Value
- Document
- Column_family
- Graph
NoSQL의 종류
- Redis
- Apache Cassandra(아파치 카산드라)
- 하둡(Hadoop)
- 몽고디비(MongoDB)
- Firebase의 실시간 데이터베이스와 Cloud Firestore
- HBase
NoSQL과 RDBMS의 차이
NoSQL (개념, 특징, 장단점, RDBMS와의 차이점, 모델, 종류 ) : 네이버 블로그 (naver.com)
'CS > 데이터베이스' 카테고리의 다른 글
[DB] 엔터티(Entity)란? (0) | 2024.09.10 |
---|---|
데이터 웨어하우스(DW)란? (0) | 2024.08.16 |
데이터 모델링의 이해 (0) | 2024.08.15 |
데이터 테이블의 종류 및 특성 (0) | 2024.08.11 |
[DB] 데이터 딕셔너리 (0) | 2024.08.05 |