-
1012. [MongoDB] NoSQL 입문DB/mongoDB 2023. 10. 12. 14:59
oracle과 같은 RDBMS이고 컬럼에서 정해진 거 외엔 저장할 수 없는 "정형데이터" (형태없는 건 비정형데이터)
*RDBMS는 비정형보다 정형데이터를 다룰 때 편하다
🖤MongoDB를 쓰는 이유
1. 고정된 스키마가 없다. "flexible schema"
스키마(데이터의 논리적 구조-테이블의 형태)가 자주 바뀌는 환경에서 유용
스키마가 고정되어있지 않아 어떠한 테이블의 형태도 사용할 수 있다. "다양한 형태의 테이블 사용"
2. 분산 컴퓨팅 환경
샤딩과 복제가 default로 설정되어 있다. "고가용성"
3. 임의의 추가적인 인덱스를 설정할 수 있다.
4. in memory로 메모리에 올려두며 사용해서 처리속도가 빠르면서 메모리 사용량이 늘어나 단점이기도 하다.
⭐분산 컴퓨팅 환경이란?
*네트워크 환경에서 서버를 여러 대 두고 운영하는데 클라이언트에게는 마치 한 개의 서버가 동작하는 것처럼 보이게 하는 시스템 (어떤 서버가 응답을 할지 클라이언트가 신경 쓸 필요 없음)
문제점 : 고장이 났을 때 대응이 어렵다. (DB가 더이상 서비스를 못 해서 전체 서비스 불가 상태)
=> DB 서버도 여러 개 둠으로 해결함 "계속 가용서비스 상태"❤️복제(미러링) : 똑같은 데이터를 가진 또다른 서버를 여러 개 두는 것
- 장점 : 서버 하나가 고장나도 전체 서비스가 죽지 않음
- 단점 : 효율성이 떨어짐 (각 서버가 완전히 같은 내용의 데이터여야 하므로 1개 수정하면 다른 곳도 다 수정해야 한다.)
=> "clustering"
❤️샤딩(Sharding) : 정보를 분할해서 관리(서버들이 각자 나눠서 분담)
- 장점 : 데이터 분석 시 병렬 처리가 가능(동시에 각자 분석해서 나중에 merge 가능) - 속도 측면에서 유리하므로 빅데이터등의 대규모 분석 시 유용하다.
**db의 분산기법
어떤 데이터 구성이냐에 따라 다르게 선택해서 사용
가로샤딩 : 로우복제 - 행 단위
세로 샤딩 : 컬럼복제 - 컬럼(열) 단위
⭐Redis 는 보조데이터를 다룰 때 많이 사용 : 좋아요, 조회수, 추천 등
MongoDB는 메인DB로 많이 사용
RDB(관계형 모델)과 MongoDB 모델
관계형 모델에서는 테이블 정의가 중요하다.
행 단위로 고정된 컬럼(id, 이름, 물품번호 등)의 데이터가 생성된다.
MongoDB 모델에서는 Javascript의 Object(객체) 표현과 같다. (문자열로 보면 JSON같지만)
즉, 자바스크립트와 잘 맞다.
프로퍼티명이 : 컬럼에 해당해서 value가 컬럼 값에 대응한다.
관계형 DB에서는 1:1 대응관계만 가능하여 컬럼에 배열을 넣지 못 하므로 join을 써야 했는데
MongoDB에서는 {}안에 바로 [4,3] 처럼 쓸 수 있어 No Join (테이블, 컬럼이란 표현도 안 씀)
❗개발자에게 모든 책임을 넘기므로 유효성 검사를 하지 않는다. (장점이자 단점)
* 테이블 : 컬렉션(도큐먼트를 여러 개 모은 것)
한 행 : 도큐먼트
컬럼 : 프로퍼티=필드(자유로움)
필드에서 쓸 수 있는 타입 정의
*자바스크립트에서의 타입과 같다.
⭐ U UID
Universally Unique ID
전세계적으로 유일한 아이디
PK를 설정하지 않으면 자동으로 U UID 란 개념으로 16byte 데이터를 key로 해서 id를 만들어낸다.
"위치정보 + 시간정보 + 순차정보" 로 유일한 아이디를 만들어낸다.
🌏MongoDB 문서화 자료 링크
https://www.mongodb.com/docs/v7.0/crud/
'DB > mongoDB' 카테고리의 다른 글
1013. [mongoDB] 인증 (수정 중) (0) 2023.10.13 1012. MongoDB와 Studio 3T 설치 방법 (0) 2023.10.12