RDB와 MongoDB의 구조는 조금 다르다.
RDB는 데이터베이스 안에 테이블이 있고, 테이블에는 row들로 이루어져 있다.
MongoDB는 데이터베이스안에 테이블이 아닌 document로 이루어져 있다.
{"id":1, "name":"홍길동"} 과 같이 json과 모양이 똑같은 중괄호 하나가 하나의 document이다.
데이터베이스는 이 document가 모인 컬렉션인 것이다.
1. 비정형 데이터
기존에 우리가 사용하던 RDBMS는 통신을 할 때
json을 자바 오브젝트로 파싱하고, INSERT문을 작성하여 DB에 save
DB에서 row를 반환하면 ResultSet에 담아 자바 오브젝트로 파싱 하고 json으로 변환했다.
몽고 디비를 사용하면 json을 파싱 하지 않고 바로 DB에 넣을 수 있다.
파이썬에 dict이라는 dictionary 타입이 json 모양과 동일하게 생겼기 때문에 또한 파싱이 필요없다.
통신할 때 치환할 필요가 없는 것이다.
2. SELECT에 강력한 데이터베이스
RDB는 테이블끼리 관계를 가진다.
user의 name이 update 될 때
user 테이블의 데이터만 수정해주면 된다.
몽고 디비는 관계하지 않기 때문에 하나의 document에 다 포함되어있다.
RDB는 테이블끼리 관계하고 있기 때문에 post를 SELECT 하면 user를 JOIN 하여 데이터를 반환한다.
MongoDB는 이런 과정이 필요 없이 한 번의 SELECT로 끝난다.
SELECT에 강력하다!!
하지만 이런 구조를 가진 데이터베이스는 강력한 장점만큼 단점도 많다.
데이터가 중복되어 저장되기 때문에 데이터의 일관성 유지가 어렵다.
user의 name이 변경되었을 때 하나씩 다 수정해야 하기 때문에
무결성 유지가 힘들다.
수정하다가 실수해도 DB에서 확인해줄 수 없기 때문에 신뢰도가 없는 데이터베이스이다.
때문에 비정형 데이터인 것이다.
이런 데이터베이스는 인스타그램과 같이 SELECT가 중요한 프로그램에 사용된다.
유명인이 인스타그램에 글을 한 번 INSERT 하면
SELECT가 폭발적이기 때문에 이때는 비정형 DB를 사용한다.
[출처]
https://cafe.naver.com/metacoding
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9