MongoDB 개념

누군가·2024년 1월 12일
0

MongoDB Replica Set

목록 보기
1/4

MongoDB란?

MongoDB는 오픈소스이며, 문서 지향 (Document-Oriented)적 Cross-platform 데이터베이스입니다.

  • MongoDB는 뛰어난 확장성과 성능을 자랑하며, 현존하는 NoSQL 데이터베이스 중 인지도 1위를 차지하고 있습니다.

NoSQL

  • NoSQL은 “Not Only SQL” 또는 “Non-Relational Operational Database SQL” 등의 약자로 의견이 갈리지만 기존의 관계형 DBMS가 갖는 특성 뿐만 아니라 다른 특성들을 부가적으로 지원한다는 것을 의미합니다.
  • 기존 RDBMS의 한계를 극복하기 위해 만들어진 새로운 형태의 데이터베이스 저장소이며, 관계형 DB가 아니므로 RDBMS와 같이 고정된 스키마나 JOIN이 존재하지 않습니다.

Document

  • Document는 RDBMS의 Record와 비슷한 개념인데 데이터 구조는 한 개 이상의 Key-Value 쌍으로 이루어져 있습니다.
# Document 예시
{
    "_id": ObjectId("64df2b0ed10006156ad507ff"),
    "name": "American Prometheus",
    "info": { author: "Kai Bird and Martin J. Sherwin", publisher: "Alfred A. Knopf" }
}
  • 여기서 Colon (:) 왼쪽의 값 (_id, name, info)은 Key이고, Colon 오른쪽의 값은 Value입니다.
  • _id는 12bytes의 Hexadecimal 값으로, 각 Document의 유일함 (Uniqueness)을 제공합니다.
    • 첫 4bytes: 현재 Timestamp
    • 다음 3bytes: Machine ID
    • 다음 2bytes: MongoDB 서버의 프로세스 ID
    • 마지막 3bytes: 순차 번호
  • Document는 동적 스키마를 갖습니다.
    • 같은 Collection 안에 있는 Document 끼리 다른 스키마를 가질 수 있습니다.
    • 쉽게 말하면, 같은 Collection 내에서도 다른 데이터 (다른 Key 값)을 가질 수 있습니다.

Collection

  • Collection은 MongoDB Document의 그룹이며, RDBMS의 Table과 비슷한 개념이지만 스키마를 가지지 않는다는 점이 다릅니다.

Database

  • Database는 Collection들의 물리적인 컨테이너입니다.
  • 각 Database는 파일 시스템에 여러 파일들로 저장됩니다.

RDBMS와 비교

  • 아래 표는 MongoDB의 각 속성들의 이해를 돕기 위해 RDBMS의 속성과 비교한 표입니다.
  • 유사한 기능을 갖는 개념이지만 세부적으로는 다를 수 있습니다.
RDBMSMongoDB
DatabaseDatabase
TableCollection
Tuple/RowDocument
ColumnKey/Field
Table JOINEmbedded Documents
Primary KeyPrimary Key (_id)

MongoDB 장점

  • Flexibility: Schema-less라서 어떤 형태의 데이터라도 저장할 수 있습니다.
  • Performance: Read & Write 성능이 뛰어납니다.
    • 캐싱이나 많은 트래픽을 감당할 때 써도 좋습니다.
  • Scalability: 애초부터 스케일아웃 구조를 채택해서 쉽게 운용 가능합니다.
    • Auto Sharding 지원
  • Deep Query ability: 문서지향적 Query Language를 사용하여 SQL만큼 강력한 Query 성능을 제공합니다.
  • Conversion/Mapping: JSON 형태로 저장이 가능해서 직관적이고 개발이 편리합니다.

MongoDB 단점

  • JOIN이 존재하지 않습니다.
    • JOIN이 필요하지 않도록 데이터 구조화가 필요합니다.
  • Memory mapped file로 파일 엔진 DB입니다.
    • 메모리 관리를 OS에게 위임하며, 메모리에 의존적이고 메모리 크기가 성능을 좌우합니다.
  • SQL을 완전히 이전할 수 없습니다.
  • B트리 인덱스를 사용하여 인덱스를 생성하는데, B트리는 크기가 커질 수록 새로운 데이터를 입력하거나 삭제할 때 성능이 저하됩니다.
    • 이런 B트리의 특성 때문에 데이터를 넣어두면 변하지 않는 정보를 조회하는데 적합합니다.

Reference

https://velopert.com/436

https://sjh836.tistory.com/98

https://jwprogramming.tistory.com/70

profile
개발 중에 알게된 내용을 공유합니다 (나도 기억할겸)

0개의 댓글