융융이'Blog

mongoDB특징 본문

2022이전/mongoDB

mongoDB특징

바로퇴장 2020. 1. 8. 16:52

mongoDB

mongoDB는 NoSQL중 하나이다.

mongoDB의 구조는 위 그림과 같이 구성되어 있다. Document가 모여서 Collection이 되고, Collection들이 모여서 Database를 이루게 됩니다.

Document

JSON과 비슷한 BSON구조로 되어 있다.

RDB과 비교

mongoDB는 C++로 짜여진 오픈소스 데이터베이스이다. 문서지향(Document-Oriented)적이며 뛰어난 확장성과 성능을 자랑한다. NoSQL이다.

RDBMSMongoDB

DataBase DataBase
Table Collection
Tuple/Row Document
Column Key/Field
Table Join Embedded Documents
PrimaryKey Primary Key(_id)

특징과 장단점

특징

  • Document-oriented storage : MongoDB는 database > collections > documents 구조로 document는 key-value형태의 BSON(Binary JSON)으로 되어있다.

  • Full Index Support :

    다양한 인덱싱을 제공한다.

    • Single Field Indexes : 기본적인 인덱스 타입

    • Compound Indexes : RDBMS의 복합인덱스 같은 거

    • Multikey Indexes : Array에 미챙되는 값이 하나라도 있으면 인덱스에 추가하는 멀티키 인덱스

    • Geospatial Indexes and Queries : 위치기반 인덱스와 쿼리

    • Text Indexes : String에도 인덱싱이 가능

    • Hashed Index : Btree 인덱스가 아닌 Hash 타입의 인덱스도 사용 가능

  • Replication& High Availability : 간단한 설정만으로도 데이터 복제를 지원. 가용성 향상.

  • Auto-Sharding : MongoDB는 처음부터 자동으로 데이터를 분산하여 저장하며, 하나의 컬렉션처럼 사용할 수 있게 해준다. 수평적 확장 가능

  • Querying(documented-based query) : 다양한 종류의 쿼리문 지원. (필터링, 수집, 정렬, 정규표현식 등)

  • Fast In-Pace Updates : 고성능의 atomic operation을 지원

  • Map/Reduce : 맵리듀스를 지원.(map과 reduce 함수의 조합을 통해 분산/병렬 시스템 운용 지원, 하둡처럼 MR전용시스템에 비해서는 성능이 떨어진다)

  • GridFS : 분산파일 저장을 MongoDB가 자동으로 해준다. 실제 파일이 어디에 저장되어 있는지 신경 쓸 필요가 없고 복구도 자동이다.

  • Commercial Support : 10gen에서 관리하는 오픈소스

장점

쌓아놓고 삭제가 없는 경우가 제일 적합하다. (ex. 로그데이터, 세션 등)

  • Flexibility : Schema-less라서 어떤 형태의 데이터라도 저장할 수 있다.

  • Performance : Read & Write 성능이 뛰어나다. 캐싱이나 많은 트래픽을 감당할 때 써도 좋다.

  • Scalability : 애초부터 스케일아웃 구조를 채택해서 쉽게 운용가능하다. Auto sharding 지원

  • Deep Query ability : 문서지향적 Query Language 를 사용하여 SQL 만큼 강력한 Query 성능을 제공한다.

  • Conversion / Mapping : JSON형태로 저장이 가능해서 직관적이고 개발이 편리하다.

단점

정합성이 떨어지므로 트랜잭션이 필요한 경우에는 부적합하다. (ex. 금융, 결제, 회원정보 등)

  • JOIN이 없다. join이 필요없도록 데이터 구조화 필요

  • memory mapped file으로 파일 엔진 DB이다. 메모리 관리를 OS에게 위임한다. 메모리에 의존적, 메모리 크기가 성능을 좌우한다. 2-4를 참고하자.

  • SQL을 완전히 이전할 수는 없다.

  • B트리 인덱스를 사용하여 인덱스를 생성하는데, B트리는 크기가 커질수록 새로운 데이터를 입력하거나 삭제할 때 성능이 저하된다. 이런 B트리의 특성 때문에 데이터를 넣어두면 변하지않고 정보를 조회하는 데에 적합하다.

참조:

https://jinshine.github.io/2018/06/07/MongoDB/MongoDB%20%EA%B5%AC%EC%A1%B0/

https://sjh836.tistory.com/98

https://docs.mongodb.com/

'2022이전 > mongoDB' 카테고리의 다른 글

mongoDB 쿼리의 모든 것!  (1) 2020.01.12
mongoDB와 Express연동하기  (0) 2020.01.08