MongoDB - 기본 사용법과 Setup

choko's avatar
Jun 29, 2024
MongoDB - 기본 사용법과 Setup
 

MongoDB

  • Json과 유사한 문서에 데이터를 저장한다.
    • DatabaseCollectionsDocuments 구조이고, Document는 key-value 형태의 BSON(Binary Json)으로 되어 있다.
      • 데이터 표현은 JSON으로 되지만, 데이터베이스 내부에 저장될 때는 BSON 형태로 저장한다.
      • notion image
    • Document 구조
      • Document는 id를 가진다. document의 유일함을 제공한다.
      • 그 뒤는 1개 이상의 key-value 데이터 쌍으로 이루어진다.
      • { "_id": ObjectId("5099803df3f4948bd2f98391"), "username": "ljh", "name": { first: "J.H.", last: "Lee" } }
  • 다양한 인덱싱, 쿼리문을 제공한다.
  • 간단한 설정으로 데이터 복제를 지원한다.
  • 자동으로 데이터를 분산하여 저장하여 하나의 컬랙션처럼 사용할 수 있게 해줌 → 수평적 확장
  • Join이 없다. → 데이터 구조화필요
  • 쿼리의 결과를 커서(Cursor, 쿼리 집합에 대한 포인터)로 반환한다.
 
 
 

인덱스

  • 쿼리를 더 효율적으로 할 수 있도록 Document에서 정렬된 목록을 생성하는것
  • 몽고디비는 B-트리 형태로 인덱싱되어있다.
  • 단일 키 인덱스
    • 하나의 필드 인덱스를 사용하는것
      • db.user.createIndex({score:1}) → score라는 필드에 오름차순(1→오름차순, -1→내림차순)으로 인덱스를 만들겠다.
  • 복합 키 인덱스
    • 두 개 이상의 필드를 인덱스로 사용
      • db.user.createIndex({userid:1 ,score:-1})
 
 

배포 형태별 아키텍처

  • 단일 노드
    • 단일 노드의 경우는 관리용 컴포넌트가 필요하지 않는다.
  • 레플리카 셋
    • 장애는 항상 발생하기 때문에, 여러 서버에 데이터를 복제하여 저장한다.
    • Master(Primary)-Slave(Secondary) 구조로 원본과 복사본을 가진다.
    • Master에서 작업 수행 로그(oplog)를 기록하면 slave들은 결과를 복제하고 각자의 데이터셋에 비동기 방식으로 적용한다.
      • Master은 read/write 모두, Slave는 read 전용이다.
    • 노드의 개수는 홀수로 가진다.
      • 노드 간 투표를 통해 Master 노드를 결정하기 때문
        • heartbeat - 서로 heartbeat로 노드가 죽었는지 주기적으로 확인한다. Master 노드는 과반수 이상의 heartbeat를 가져야 한다.
  • 샤딩
    • 빅데이터를 저장하기 위해 여러 대의 서버에 분산 처리하여 저장한다.
    • MongoDB 클라이언트와 MongoDB 라우터(Mongos)와의 연결
      • 라우터는 자동으로 MongoDB config 서버로부터 각 샤드의 메타정보를 참조하여 쿼리를 사용한다.
      • Mongos는 사용자의 요청을 실제 데이터를 가지고 있는 샤드로 전달하는 역할을 수행한다.
    • 샤드 키
      • 여러 개의 샤드 서버로 분할되어있는 데이터들의 기준 필드이다.
      • 따라서, 적절한 필드를 shard key로 설정하여야 한다. (너무 높거나 적지 않은 카디널리티)
        • 카디널리티는 전체 행에 대한 특정 컬럼의 중복 수치를 나타내는 지표
 

설치(community) & 실행

  • 설치
      1. brew tap mongodb/brew
      1. brew update
      1. brew install mongodb-community
  • 실행
    • brew services start mongodb-community
  • config 파일을 사용하여 백그라운드에서 실행
    • mongod --config /opt/homebrew/etc/mongod.conf --fork
  • 중지
    • brew stop start mongodb-community
  • 몽고DB 사용 시작
    • mongosh
    • ieungyu@ieungyuui-MacBookPro-2 test % mongosh Current Mongosh Log ID: 6655807f8c5cbdac190a6a43 Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.6 Using MongoDB: 7.0.11 Using Mongosh: 2.2.6 For mongosh info see: https://docs.mongodb.com/mongodb-shell/ To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy). You can opt-out by running the disableTelemetry() command. ------ The server generated these startup warnings when booting 2024-05-28T15:52:36.797+09:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted ------ test>
 
  • 몽고DB 모니터링(Mac에서 몽고DB 설치 시 자동으로 설치)
    • mongotop
    •  
       
 
 
Share article

Tom의 TIL 정리방