MongoDB
- Json과 유사한 문서에 데이터를 저장한다.
Database
→Collections
→Documents
구조이고,Document
는 key-value 형태의 BSON(Binary Json)으로 되어 있다.- 데이터 표현은 JSON으로 되지만, 데이터베이스 내부에 저장될 때는 BSON 형태로 저장한다.
- 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) & 실행
- 설치
brew tap mongodb/brew
brew update
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