Not Only SQL의 약자
기존 RDBMS의 한계를 극복하기 위해 만들어진 새로운 형태의 DB
고정된 스키마가 없고, 조인이 힘듦
빅데이터, 분산 환경에서 대용량의 데이터를 처리하기 위해 개발
Horizontal Scalability(수평 확장), High Availability(고가용성)
Scale out
거대한 Map으로서 key-value 형식을 지원
RDBMS는 Foreign Key, Join 등으로 관계를 정의하지만, NoSQL은 관계를 정의하지않음
대용량 데이터를 저장할 수 있음
읽기/쓰기의 성능이 RDBMS보다 빠름
데이터 구조가 명확하며 변경 될 여지가 없으며 명확한 스키마가 중요한 경우 사용하는 것이 좋습니다.
중복된 데이터가 없어(데이터 무결성) 변경이 용이하기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합합니다.
정확한 데이터 구조를 알 수 없고 데이터가 변경/확장이 될 수 있는 경우에 사용하는 것이 좋습니다.
단점에서도 명확하듯이 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 시에는 모든 컬렉션에서 수정을 해야 합니다. 이러한 특징들을 기반으로 Update가 많이 이루어지지 않는 시스템이 좋으며 또한 Scale-out이 가능하다는 장점을 활용해 막대한 데이터를 저장해야 해서 Database를 Scale-Out를 해야 되는 시스템에 적합합니다.
분산형 구조는 일관성(Consistency), 가용성(Availability), 분산 허용(Partitioning Tolerance)의 3가지 특징을 가지고 있다.
CAP이론은 이 중 2가지만 만족할 수 있다는 이론인데, NoSQL은 대부분 이 CAP이론을 따른다.
일관성(Consistency) : 분산된 노드 중 어느 노드로 접근하더라도 데이터 값이 같아야한다.
가용성(Availability) : 클러스터링된 노드 중 하나 이상의 노드가 실패라도 정상적으로 요청을 처리할 수 있는 기능을 제공한다.
분산 허용(Partitioning Tolerance) : 클러스터링 노드간에 통신하는 네트워크 장애가 나더라도 정상적으로 서비스를 수행한다. 노드 간 물리적으로 전혀 다른 네트워크 공간에 위치도 가능하다.
일반적으로 RDBMS는 일관성, 가용성을 만족한다.
NoSQL은 가용성, 분산허용을 만족하는 제품군과 일관성, 분산허용을 만족하는 제품군으로 나눌 수 있다.
단순한 저장구조를 가지며, 복잡한 조회 연산을 지원하지 않음
고속 읽기와 쓰기에 최적화된 경우가 많음
메모리를 저장소로 쓰는 경우, 아주 빠른 get과 put을 지원
Value는 문자열이나 정수와 같은 원시 타입이 들어갈 수 있고, 또 다른 key/value가 들어갈 수도 있음. ( Column Family )
key/value store와 데이터 저장 방식은 동일
보통의 NoSQL은 order by같은 정렬기능을 제공하지 않지만, 이 모델은 내부적으로 key를 정렬
날짜나 선착순으로 정렬해서 보여줄 때 유용
key/value store의 확장된 형태로, value에 Document라는 타입을 저장 (Document : XML, JSON, YAML 등)
복잡한 데이터 구조 표현 가능
Document id 또는 속성값 기준으로 인덱스를 생성
key값의 range에 대한 효율적인 연산이 가능해지므로 이에 대한 쿼리를 제공
Sorting, Join, Grouping등이 가능
쿼리 처리에 있어서 데이터를 파싱해서 연산해야 하므로 overhead가 key-value 모델보다 큼
B트리 인덱스를 사용하여 2차 인덱스를 생성 > B트리는 크기가 커질 수록 insert, delete의 성능이 떨어짐 (읽기/쓰기 비율이 7:3일 때 더 좋은 성능을 보임)
B트리 특성 때문에 자주 변하지 않는 정보를 저장하고 조회하는데 적합 (로그, 타임라인, 채팅로그 등)
node들과 relationship들로 구성된 개념
key/value store방식이며 모든 노드는 끊기지 않고 연결되어 있어야함
relationship은 direction, type, start node, end node에 대한 속성등을 가짐
MongoDB는 C++로 작성된 오픈소스 문서지향(Document-Oriented) 크로스 플랫폼 데이터베이스이다.
여러 데이터가 모인 하나의 단위를 컬렉션(Collection)이라고 부릅니다.
문서지향 데이터베이스
스키마가 없다
몽고 디비는 스키마가 존재하지 않는다. 이 것은 필요할 때 마다 필드를 추가하거나 제거하는 것이 매우 쉬워졌음을 의미한다. 따라서 개발 과정이 매우 단순해지고 빠르게 개발이 가능하게 된다.
스케일 아웃이 가능하다.
범용 데이터베이스
조인과 트랜잭션 없음
매우 고성능이다
리얼타임 웹에 최적화된 오픈소스 데이터베이스
Apache의 CouchDB를 기반으로 새롭게 만든 솔루션이 카우치베이스 Server라는 NoSQL 솔루션이다
완전히 관리(Fully managed)되는 AWS 상의 NOSQL 데이터베이스