MongoDB 기본 개념

zz1·2024년 12월 13일

MongoDB

MongoDB는 애플리케이션 개발 및 확장이 용이하도록 설계된 NoSQL 문서 데이터베이스이다.

  • MongoDB Atlas: 클라우드에서의 완전 관리형 서비스
  • MongoDB Enterprise: 구독 기반의 셀프 관리형 버전
  • MongoDB Community

문서 데이터베이스

MongoDB의 기록은 필드와 값의 쌍의로 구성된 데이터 구조인 문서이다. MongoDB 문서는 JSON 객체와 유사하며 필드 값에는 다른 문서, 배열 및 문서 배열이 포함될 수 있다.

  • MongoDB는 문서를 컬렉션에 저장한다. 컬렉션은 관계형 데이터베이스의 테이블과 유사하다.
  • 컬렉션 외에도 뷰, 온디맨드 구체화된 뷰를 지원한다.

주요 기능

고성능

  • 임베디드 데이터 모델 지원으로 DB 시스템의 I/O 활동이 줄어든다.
  • 인덱스는 더 빠른 쿼리를 지원하며 내장된 문서 및 배열의 키를 포함할 수 있다.

Query API

다음과 같은 읽기 및 쓰기 작업을 지원한다.

  • 데이터 집계
  • 텍스트 검색 및 지리 공간적 쿼리

고가용성

복제본 세트라고 하는 MongoDB의 복제 기능은 다음을 제공한다.

  • 자동 페일오버
    데이터 중복성

수평적 확장성

  • 샤딩은 클러스터 컴퓨터에 데이터를 분산한다.

여러 스토리지 엔진 지원

  • WiredTiger Storage Engine
  • 자체 관리형 배포를 위한 인메모리 스토리지 엔진

MongoDB 기본 개념

Document

데이터의 단위. JSON 형식이며 필드-값 쌍의 집합이다.

Collection

Document들의 집합으로, 관련된 문서들을 그룹화하여 저장한다.
RDBMS의 테이블과 유사한 개념.

Database

Collection의 집합이다.

   RDB    VS   MongoDB
Database  ===  Database
  Table   === Collection
 Column   ===   Field
   Row    ===  Document

Index

Database 내에서 검색 경로를 만들어 주는 데이터 구조이다.

Shard

Database를 여러 서버에 분산하여 저장하는 방식을 Sharding이라고 한다. 데이터를 파티션으로 분할하고, 파티션을 각 서버에 배치한다.

Replica set

여러 대의 서버에 동일한 데이터를 복제하여, 하나의 서버에 문제가 생겨도 다른 서버에서 서비스를 제공할 수 있도록 한다.

Aggregation

데이터를 집계하거나 여러 컬렉션의 데이터를 조합하여 결과를 반환한다.
SQL의 GROUP BY와 비슷한 개념.


MongoDB 쿼리 언어

연산자

  1. 비교연산자
    $eq, $ne, $gt, $gte, $lt, $lte
  2. 특정 값을 검색하는 연산자
    $in, $nin
  3. 논리연산자
    $and, $or, $not
  4. 특정 필드의 존재 여부를 검색하는 연산자
    $exists
  5. 정규식으로 특정 패턴을 가지는 문서를 검색하는 연산자
    $regex
  6. Document를 조작하는 연산자
    $push, $pull

문서 쿼리

반환할 문서를 나타내는 쿼리 조건자를 지정.
쿼리 조건자: 문서가 지정된 쿼리와 일치하는지 나타내는 부울 값을 반환하는 표현식

컬렉션에서 모든 문서 선택

db.collection('collection_name').find({})

동일성 조건 지정

db.collection('collection_name').find({ status: 'D' })

쿼리 연산자를 사용하여 조건 지정

db.collection('collection_name').find({
	status: { $in: ['A', 'D'] }
})

동일한 필드에 동등성 검사를 할 때에는 $or 대신 $in 연산자 사용.

AND 조건 지정

db.collection('collection_name').find({
	status: 'A',
 	qty: { $lt: 30 }
})

OR 조건 지정

db.collection('collection_name'),find({
	$or: [{ status: 'A' }, { qty: { $lt: 30} }]
})

AND 및 OR 조건 지정

db.collection('collection_name').find({
	status: 'A',
	$or: [{ qty: { $lt: 30 } }, { item: { $regex: '^p' } }]
});

MongoDB Index

Collection의 검색 속도를 높이기 위한 방법이다. 인덱스가 없는 경우 컬렉션의 모든 문서를 스캔해야 하지만, 쿼리에 적합한 인덱스가 있으면 스캔해야 하는 문서 수를 제한할 수 있다.

single-field index

하나의 필드를 기준으로 검색할 때 효과적이다.
db.<collection>.createIndex( { <field>: 1 } )

Compound index

2개 이상의 필드를 기준으로 검색할 때 효과적이다.

Text index

특정 텍스트를 포함한 Document를 검색할 때 효과적이다.


MongoDB Atlas

멀티 클라우드 데이터베이스 서비스이다. 온디맨드 방식으로 데이터베이스를 쉽게 배포하고 관리할 수 있다.
온디맨드: 사용자가 필요할 때 즉시 자원을 제공


참고

0개의 댓글