MongoDB 관계 데이터 방식
Document - Embedded
•
2가지 종류의 Document가 있을 때, 1개의 Document 데이터를 Document Key의 value에 통째로 저장하는 방법
// Person
{
_id: "joe",
name: "Joe Bookreader"
}
// Address
{
pataron_id: "joe",
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: "12345"
}
->
// Person
{
_id: "joe",
name: "Joe Bookreader",
address: { // Address
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: "12345"
}
}
JSON
복사
Document - Reference
•
pointer개념과 유사, RDBMS의 외래키와 같은 개념
•
Embedded 방식의 Document를 통째로 저장하는 것이 아니라 참조 할 수 있도록 ID를 저장하는 방식
// Publisher
{
_id: "oreilly", // <- Publisher._id
name: "O'Reilly Media",
founded: 1980,
location: "CA"
}
// Book
{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher_id: "oreilly" // <- Publisher._id
}
JSON
복사
MongoDB 관계 유형
One-to-One
•
단순한 1:1 관계
// 두개의 테이블로 나누어 1:1 관계를 맺는게 아니라, 몽고디비는 그냥 도큐먼트에 키값을 저장해버리면 된다.
{
"emp_id" : 1001,
"emp_name" : "홍길동",
"reg_number" : "111111-1111111"
}
JSON
복사
One-to-Many
•
1:N 관계
Embedded 방식
•
단순한 기법
•
중복 데이터가 발생해 쓸데없이 Document 크기가 커진다.
/* *** Book 컬렉션 *** */
// Book 1 다큐먼트
{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher: { // 통째로 그대로 저장되어있다. 중복 발생
name: "O'Reilly Media",
founded: 1980,
location: "CA"
}
}
// Book 2 다큐먼트
{
_id: 234567890,
title: "50 Tips and Tricks for MongoDB Developer",
author: "Kristina Chodorow",
published_date: ISODate("2011-05-06"),
pages: 68,
language: "English",
publisher: { // 통째로 그대로 저장되어있다. 중복 발생
name: "O'Reilly Media",
founded: 1980,
location: "CA"
}
}
JSON
복사
Reference 방식
/* *** Book 컬렉션 *** */
// Book 1 다큐먼트
{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher_id: "oreilly" // <- Publisher._id
}
// Book 2 다큐먼트
{
_id: 234567890,
title: "50 Tips and Tricks for MongoDB Developer",
author: "Kristina Chodorow",
published_date: ISODate("2011-05-06"),
pages: 68,
language: "English",
publisher_id: "oreilly" // <- Publisher._id
}
JSON
복사
Many-to-Many
•
One-to-Many 관계에서 확장된 m:n 관계 유형
/* *** Publisher 컬렉션 *** */
// Publisher 1 다큐먼트
{
_id: "oreilly",
name: "O'Reilly Media",
founded: 1980,
location: "CA"
}
// Publisher 2 다큐먼트
{
_id: "devhak",
name: "devhak'Reilly Media",
founded: 1980,
location: "CA"
}
JSON
복사
/* *** Book 컬렉션 *** */
// Book 1 다큐먼트
{
_id: 123456789,
title: "MongoDB: The Definitive Guide",
author: [ "Kristina Chodorow", "Mike Dirolf" ],
published_date: ISODate("2010-09-24"),
pages: 216,
language: "English",
publisher_id: ["oreilly", "devhak"] // <- Publisher._id 여러개 참조
}
// Book 2 다큐먼트
{
_id: 234567890,
title: "50 Tips and Tricks for MongoDB Developer",
author: "Kristina Chodorow",
published_date: ISODate("2011-05-06"),
pages: 68,
language: "English",
publisher_id: ["oreilly", "devhak"] // <- Publisher._id 여러개 참조
}
JSON
복사
Embedded vs Reference
상황 별 방식 비교
Embedded
•
16MB 제한
•
빈번한 업데이트, 크기가 증가하는 업데이트일 때는 권장x → 단편화
•
단순함
•
읽기 속도향상 : 한번의 쿼리로 조회
Refference
•
복잡함
•
유연한 데이터 구조
•
데이터 크기 제한X
•
상대적으로 강한 일관성 제공 가능