IT 프로그래밍/빅데이터

[Bigdata 저장] MongoDB NoSQL 한번에정리/ Rich Document구조 : 임베디드,extent방식

잉휴 2021. 3. 9. 10:29

잠깐! 알고 넘어가기

MongoDB 설계의 주요 특징

 

1. 관계형 DB는 정규화를 통해 데이터 중복을 제거하여 무결성을 보장하는 설계기법을 지향한다.

하지만 이러한 중복제거는 join을 필요로 하게 만들고 join의 사용은 성능저하를 만들어낼 수 있다.

따라서 NOSQL은 중복을 허용한다

 

2. 관계형 DB는 1:n관계가 대부분인 반면 NoSQL은 n:m(多:多)관계구조를 설계할 수 있다

 

3. 스키마(Schema) 없음: 테이블에 대한 메타데이터 (DB설계)

->유연한 설계가 가능

 

4. 서버가 꽉 차서 새로은 서버를 설치할 때 Sharding을 이용하면 서버구조가 유연하기 때문에 연결이 쉽다.


emp테이블(사원정보)
eno	ename	sal	position	deptno
1	aaa	1000	부장	10
2	bbb	800	과장	10
3	ccc	800	과장	20
4	ddd	750	과장	30
5	eee	500	대리	20
6	fff	400	대리	10

dept테이블(부서정보)
deptno	dname	loc
10	영업	1층
20	기획	2층
30	홍보	3층

collection:dept_emp
부서정보안에 사원정보 넣기

다음 내용을 입력해 볼건데요

deptno10을 잘못입력했었는데 update(수정)하는 방법도 함께 들어있습니다 (2번째 그림)

Insert가 잘 되었는지 nInserted :1으로 확인하기

deptno20 첫 줄 =>db.dept_emp.insert입니다(아래 코드와 같이 수정필요)

MongoDB Enterprise > db.dept_emp.insert({
... deptno:20,
... dname:"기획",
... loc:"2층",
... emps:[
... {eno:3,ename:"ccc",sal:800,position:"과장"},
... {eno:5,ename:"eee",sal:500,position:"대리"}
... ]
... })
WriteResult({ "nInserted" : 1 })
MongoDB Enterprise > db.dept_emp.insert({
... deptno:30,
... dname:"홍보",
... loc:"3층",
... emps:[
... {eno:4,ename:"ddd",sal:750,position:"대리"}
... ]
... })
WriteResult({ "nInserted" : 1 })

 

값을 잘못 입력했을 때 수정하기

이 방식을 insert로 하면 위에 했던 방식과 같은 rich document 방식인데 

deptno20,30은 Embedded Document방식,

deptno10은 Extent Document 방식입니다


 

결과값 .find().pretty()로 출력하기

밑에 deptno20값도 있어요(생략함)

 


Rich Document구조 장점

쿼리가 단순해지고 Join문 실행이 필요없어 데이터 저장에 효과적

빠른성능

도큐먼트 크기는 최대 16MB (끼워지는 데이터)

데이터 보안에 효과적