- 몽고 디비는 json과 유사한 형태의 도큐먼트를 저장한다.
- 도큐멘트는 직관적이고 모든 형태를 표현할 수 있다.
- 컬렉션 = 도큐멘트 그룹
- 데이터베이스 = 컬렉션 그룹
- 출력은 json으로 저장은 bson으로 됨
- bson은 json 보다 더 많은 데이터 타입을 지원한다.
- ObjectID (_id) 는 PK이다. 지정하지 않으면 몽고디비가 자동 생성한다.
- _id는 데이터 타입은 아니다.
- 스키마가 자유롭지만, 벨리데이션/컨스트레인츠을 추가할 수 있다.
- 임베딩과 레퍼런스로 데이터 관계를 표현 할 수 있다.
- 임베딩
- 임베딩을 통해 쿼리를 단순화 할 수 있다.
- 네스티드 다큐먼트다.
- 액세스 투게더, 스토어 투게더 원칙을 지킬 수 있다.
- 조인을 예방한다.
- 조회 성능을 높인다.
- 한번의 쓰기로 업데이트 할 수 있다.
- 단점
- 도큐멘트를 계속 크게 만든다.
- 메모리 비효율을 초래한다.
- 퍼포먼스 하락이 올 수 있다.
- 언바운디드 도큐멘트, 계속되는 확장으로 16메가를 초과하는 도큐멘트가 생성될 수 있다.
- 레퍼런스
- 엑세스 투게더, 스토어 투게더
- 링크, 데이터 노말라이제이션이라고도 한다.
- 여러 도큐멘트의 데이터 조인이 필요하다.
- 도뮤멘트 사이즈를 작게 유지할 수 있다.
- 데이터 중복을 피할 수 있다.
- 스케일러블
- 엑세스 투게더, 스토어 투게더
- 데이터를 디자인할때 언바운딩을 경계한다.
- 끝없이 확장되는 형태의 데이터를 경계한다.
- 예를들어 블로그의 모든 포스팅을 하나의 도큐멘트에 저장한다면?
- 도큐멘트 하나의 최대 값은 16메가 이다.
- 이런 경우 임베딩은 좋지 못하다.
- 스키마 안티 패턴
- 스키마 디자인 패턴, 베스트 프랙티스
- 안티패턴
- 지나친 배열
- 지나친 콜렉션
- 불필요한 인덱스
- 인덱스 없는 쿼리
- 비대한 도큐먼트
- 엑세스 투게더, 스토어 디프런트
- 아틀라스
- 인덱스 항목을 보면 불필요한 인덱스를 삭제할 수 있다.
- 스키마 안티패턴 항목에 성능 향상을 위한 제안이 있다.
- 퍼포먼스 어드바이저
- 인덱스, 퍼포먼스 항목을 제안해준다.
'Software Engineering > MongoDB' 카테고리의 다른 글
| [MongoDB] Replicat set 구성을 위한 사전 지식 정리 (0) | 2025.01.14 |
|---|---|
| [MongoDB] 사용자 계정 생성 및 관리를 위한 사전 지식 정리 (0) | 2025.01.13 |