몽고DB란 NoSql 의 대표적인 데이터베이스이다 그래서 많은 회사들이 쓰고 있다.
일단 여기서 NoSql 이란 NotOnlySql이다 단어그대로 기존에 Sql방식과 다르게 데이터를 저장한다.
NoSql 은 요즘 대세인 빅데이터에 맞는 언어라고 생각이 된다 기존에 방식처럼 한서버에 연결해서 처리하는게 아니라 여러서버에서
연결해서 처리하기 때문에 요새 정보가 엄청나게 많고 빠르게 유용한 정보들을 수집하기 위해서는 요새추세에 맞는 언어라고 생각이된다.
그리고 스키마의 유동형태또한 자유롭다.
특징
1.Foreign Key 등으로 데이터의 관계가 정의되어 있는 RDBMS 방식과는 다르게 NoSQL은 데이터 간의 관계를 정의하지 않습니다.(join 연산x)
2.PB급의 대용량 데이터를 저장할 수 있다.
3.RDBMS처럼 1대에 데잍터를 저장하는 것이 아닌, 일반적인 서버들을 연결해 데이터를 저장,처리하는 구조로 되어있다.
4.데이터를 여러 서버에 분산 저장이 가능하고 복제와 회복이 가능한 형태이다, 장애가 발생하더라도 대응이 유리하다.
5.RDBMS와는 다르게 테이블 스키마가 유동적이다. 한 번 정의하면 그 틀에 맞게 데이터를 집어넣어야 하고 스키마 변경이 어려운 반면에 NoSQL은 다양한 형태의 데이터들을 유연하게 처리할 수 있다.
CAP이론
분산컴퓨팅 환경에서는 Consistency(일관성), Availability(가용성), Partition Tolerance(부분결함 용인) 의 3가지 특징을 가지고 있는데, 이 중 2가지만 만족할 수 있다는 이론을 말합니다.
NoSQL의 방식은 분산형 구조를 가지기 때문에 CAP 중 2가지만 만족할 수 밖에 없습니다.
출처: https://flowarc.tistory.com/113 [Jamin's Dev log]
CAP 각 특징을 더 자세하게 알아봅시다.
Consistency : 일관성을 뜻합니다. 모든 클라이언트들은 항상 같은 데이터를 볼 수 있어야 합니다. 한 데이터를 동시에 두 클라이언트가 바라봤을 때 그 데이터가 항상 같아야만 만족합니다.
Availability : 가용성을 뜻합니다. 각 클라이언트는 항상 데이터를 읽고 쓸 수 있어야만 합니다. 어떤 상황이던 간에 (장애가 발생해도) 정상적으로 데이터를 읽고 쓸 수 있어야 만족합니다.
Partition Tolerance : 파티션 허용, 분산화 가능을 뜻합니다. 물리적인 네트워크 분산 환경에서도 시스템이 잘 작동해야 만족합니다.
기존의 RDBMS는 이 3가지 특징 중 CA 2가지를 만족합니다. 분산화 특성 보다는 데이터의 일관성과 가용성에 중점을 둔 형태라고 볼 수 있습니다. 즉, 시스템의 신뢰성이 높다는 특징을 가집니다. 분산 구조로 가져가는 것이 가능하지만 Replication의 경우 퍼포먼스를 고려해야 하며, Sharding의 경우 데이터의 관계가 무너질 수 있는 부담감이 있습니다. 이러한 경우 신뢰성이 깨지는 리스크가 발생할 수 있습니다. 애초에 분산적인 처리보다는 신뢰성에 중점을 두고 만들어진 방식이기 때문에 발생하는 부분입니다.
NoSQL은 AP 또는 CP의 특징을 만족합니다. 데이터의 신뢰성보다는 분산에 중점을 둔 방식이라 약간의 데이터의 유실, 변형 등이 발생할 수 있습니다. 하지만 빠르게 확장을 하여 대규모 데이터를 저장하고 핸들링 할 수 있는 구조를 갖출 수 있도록 합니다. 기존의 RDBMS 형태에는 없는 특징을 가져가는 대신 C나 A 하나를 포기할 수 밖에 없습니다.
이러한 이유 때문에 보안에 취약하다는 평이있다.