본문 바로가기

TIL/DataBase

MongoDB 개념

반응형

1. SQL vs NoSQL ?

 

왜 종류가 나뉠까?

과거에는 흔치 않았던 테라바이트 수준의 데이터도 현재는 꽤 흔하게 접한다
저장할 데이터가 증가함에 따라 개발자는 '데이터베이스를 어떻게 확장할 것인가'와 같은 어려운 의사 결정에 직면하게 된다. 데이터베이스의 확장은 결국 더 큰 장비로 성능 확장할지 혹은 여러 장비에 데이터를 나눠 분산 확장할지 결정해야 하는 갈림길에 서게 한다. 일반적으로 성능 확장이 더 편한 길이지만, 대형 장비는 대체로 가격이 비싸고 결국에는 더는 확장할 수 없는 물리적 한계에 부딪히고 만다. 
반면에 분산 확장은 저장 공간을 늘리거나 처리량을 높이고 서버를 구매해서 클러스터에 추가하는 방법이여서 경제적이고 확장이 용이하다 

MongoDB는 분산 확장을 염두에 두고 설계됐다

 

[ SQL ( RDBMS ) ] 

종류 
Oracle / PostgreSQL / MySQL / SQLite

특징

  • 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
  • 데이터는 관계를 통해 여러 테이블에 분산된다.
  • 데이터는 테이블에 레코드로 저장되는데, 각 테이블마다 명확하게 정의된 구조가 있다. 해당 구조는 필드의 이름과 데이터 유형으로 정의된다. 따라서 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다. 즉, 스키마를 수정하지 않는 이상은 정해진 구조에 맞는 레코드만 추가가 가능한 것이 관계형 데이터베이스의 특징 중 하나다.

장 · 단점

  • 데이터 무결성 보장 - DB 내의 데이터에 대한 일관성, 유효성, 신뢰성을 보장하기 위해 데이터 변경 혹은 수정 시 여러 가지 제한을 두어 데이터의 정확성을 보증하는 것을 말한다
  • 정해진 스키마 - 명확한 데이터 구조를 보장한다 

 

  • 복잡한 관계 - 테이블 간 관계를 맺고 있어서 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어진다 
  • 유연하지 못한 데이터 - 스키마로 인해서 유연성이 떨어지고, 스키마 변경 시에는 번거롭고 어렵다 

 

언제 사용할까 ?

  1. 관계를 맺고 있는 데이터가 자주 변경될 경우 (NoSQL은 여러 컬렉션을 모두 수정해줘야만 하기 때문이다)
  2. 명확한 스키마가 중요한 경우 사용

 

 

[ NoSQL ]

종류
MongoDB / CouchDB / ArangoDB

 

특징

  • NoSQL에서는 레코드를 문서(documents)라고 부른다 
  • 스키마 없음, 관계없음
  • SQL은 정해진 스키마를 따르지 않으면 데이터 추가가 불가능하지만 NoSQL에서는 다른 구조의 데이터를 같은 컬렉션에 추가가 가능하다 
  • 관계형 데이터베이스처럼 데이터를 여러 테이블에 나누어 담지 않고 관련 데이터를 동일한 컬렉션에 넣기 때문에 조인(join) 할 필요 없이 이미 필요한 모든 것을 갖춘 문서를 작성하게 된다 

 · 단점

  • 유연함 - 스키마가 없어서 훨씬 더 유연하기 때문에 저장된 데이터를 조정하고 새로운 "필드"를 추가할 수 있다
  • 속도 - 데이터는 애플리케이션이 필요로 하는 형식으로 저장되어 데이터를 읽어오는 속도가 빨라진다 

 

  • 불명확한 데이터 - 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않으며 데이터 구조 결정이 어렵다
  • 수정이 어렵다 - 데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정을 해야 하는 경우 모든 컬렉션에서 수행해야 한다 

언제 사용할까 ?

  1. 데이터베이스를 수평으로 확장해야 하는 경우 즉, 막대한 양의 데이터를 다뤄야 하는 경우
  2. 정확한 데이터 구조를 알 수 없거나 변경 / 확장될 수 있는 경우

 

2. MongoDB ?

탄생한 이유 

대규모 데이터를 처리해야 하는 데에는 RDBMS는 한계가 있다
일관성과 무결성을 버리고 더 빠른 읽기 성능과 수평 확장이 가능한 DB가 필요해서 탄생하였다 

특징

  • Document

- 몽고디비는 nosql이기 때문에 값을 저장하기 전에 schema를 별도로 정의하지 않으며, document를 추가하면 그게 바로 schema가 되기 때문에 자유롭게 데이터 구조를 잡을 수 있다 

 

  • BASE

- Basically Avaliable : 기본적으로 언제든지 사용할 수 있다는 의미로 가용성이 필요하다는 의미

- Soft state : 외부의 개입이 없어도 정보가 변경될 수 있다는 의미

- Eventually consistent : 일시적으로 일관적이지 않은 상태가 되어도 일정 시간 후 일관적인 상태가 되어야 한다

 

* BASE 기반이어서 성능과 가용성을 우선시한다

 

  • Open Source : 무료로 이용이 가능하다

 

 

 

* IOT 사업에 MongoDB를 사용한 이유 ?

1. 많은 양의 데이터

2. 전자 기기들의 서로 다른 정보

반응형

'TIL > DataBase' 카테고리의 다른 글