회원이 많은 OLTP성 카페의 요구사항을 구현하고 모델링을 진행 해보자.
1. 카페 컬렉션에 유저 정보를 Embedding
카페라는 컬렉션에 members라는 배열 필드를 만들어 유저가 카페에 가입할 때마다 배열에 유저를 추가한다.
db.cafe.insertMany([
{
_id: 1,
name: "IT Community",
desc: "A Cafe where developer's share information.",
created_at: ISODate("2018-08-09"),
last_article: ISODate("2022-06-01T10:56:32.000Z"),
level: 5,
members: [
{
id: "tom93",
first_name: "Tom",
last_name: "Park",
phone: "000-0000-1234",
joined_at: ISODate("2018-09-12"),
job: "DBA",
},
{
id: "asddwd12",
first_name: "Jenny",
last_name: "Kim",
phone: "000-0000-1111",
joined_at: ISODate("2018-10-02"),
job: "Frontend Dev",
},
],
},
{
_id: 2,
name: "Game Community",
desc: "Share information about games.",
created_at: ISODate("2020-01-23"),
last_article: ISODate("2022-06-02T10:56:32.000Z"),
level: 4,
members: [
{
id: "tom93",
first_name: "Tom",
last_name: "Park",
phone: "000-0000-1234",
joined_at: ISODate("2020-09-12"),
job: "DBA",
},
],
},
]);
id가 2번인 카페에 유저를 10만명을 추가한 후, 카페 컬렉션의 데이터 크기를 확인
// 바이트이기 때문에 값을 나누어 출력, 약 13.361040115356445MB
db.cafe.stats().size / 1024 / 1024;
분석
만약 현재 모델링에서 유저가 계속 증가하면 어떻게 될까? 실제로 유저 데이터를 더 생성해서 넣으려고 시도했을 때 insert 속도가 현저히 줄어들거나 실행되지 않을 것이다. 하나의 도큐먼트의 최대 크기는 16MB이기 때문이다.
결과