NoSQL의 mongoDB를 예로 들자면
몽고DB는 데이터를 JSON 형식으로 저장한다.
SQL처럼 행과 열이 존재하는 것이 아니라 어떤 종류, 어떤 모양의 데이터든 저장할 수 있다.
SQL은 데이터의 구조가 엄격하다.
명확하게 정의 된 스키마, 데이터 무결성 보장되며
관계는 각 데이터를 중복없이 한번만 저장됩니다.
수직적 확장가능
그에 비해 NOSQL의 데이터 구조는 유연하다고 볼 수 있다.
데이터가 같은 모양일 필요도 없다.
이 다양한 형태의 저장기술은 RDBMS 스키마에 맞추어 데이터를 관리해야 된다는 한계를 극복하고 수평적 확장성(Scale-out)을 쉽게 할 수 있다는 장점을 가지고 있습니다.
SQL에선 어떤 데이터를 얻을 것인지 고민을 하지 않는다.
데이터 구조에 대해서 고민하고 데이터를 뽑아서 어떻게 할지에 대해서 고민하지 않는다.
하지만 NoSQL에선 저장하기 전에 어떻게 할것 인지 고민을 해야한다. 대부분의 경우엔 SQL로 커버가 가능하다.
사실 자신이 만들 프로젝트가 특이한 케이스가 아니라면 대부분 SQL을 선택한다.
NOSQL은 특별한 이슈에 대응하기 좋은 DB라고 할 수 있다.
인스타 그램도 처음엔 PostgreSQL로 시작했고.
서비스가 점점 커짐에 따라 graphDB로 갈아타게 되었다.
그 외에 GraphDB
document나 column을 저장하는 것이 아니라
entity를 저장하고 이를 관계망으로 연결한다.
sns 같은 소셜 서비스에 이용하기 적합하다.
DBMS란(DataBase Management System) 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해 주고 데이터베이스를 관리해 주는 소프트웨어입니다.
관계형 데이터베이스(RDMBS)는 아래와와 같이 구성된 테이블이 다른 테이블들과 관계를 맺고 모여있는 집합체로 이해할 수 있습니다.
관계형 데이터베이스(RDMBS)에서는 이러한 관계를 나타내기 위해 외래 키(foreign key)라는 것을 사용합니다.
이러한 테이블간의 관계에서 외래 키를 이용한 테이블 간 Join이 가능하다는 게 RDBMS의 가장 큰 특징입니다.
RDBMS, NoSQL 언제 사용해야 될까요?
RDBMS는 데이터 구조가 명확하며 변경 될 여지가 없으며 명확한 스키마가 중요한 경우 사용하는 것이 좋습니다. 또한 중복된 데이터가 없어(데이터 무결성) 변경이 용이하기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합합니다.
NoSQL은 정확한 데이터 구조를 알 수 없고 데이터가 변경/확장이 될 수 있는 경우에 사용하는 것이 좋습니다. 또한 단점에서도 명확하듯이 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 시에는 모든 컬렉션에서 수정을 해야 합니다. 이러한 특징들을 기반으로 Update가 많이 이루어지지 않는 시스템이 좋으며 또한 Scale-out이 가능하다는 장점을 활용해 막대한 데이터를 저장해야 해서 Database를 Scale-Out를 해야 되는 시스템에 적합합니다.