원문
Relational vs. MongoDB Schema Design
Relational
- 중복 데이터를 허용하지 않음
- 정규화
- 쿼리에서 자유로운 모델 디자인
MongoDB
- No rule, No process, No algorithm
- 데이터를 어떻게 저장할 것 인가
- 쿼리 성능 고려
샘플 데이터
Embedding vs. Referencing
Embedding
장점
- 전체 데이터를 쿼리 한번에 가져옴
- 무거운 join이나 lookup을 사용하지 않아도 된다
- 데이터를 atomic하게 한번에 update 할수있다
단점
- document가 커지고 오버헤드가 생김
- 16MB document 사이즈 제한
Referencing
장점
- 작은 document 사이즈
- 16MB 사이즈 제한을 넘기지 않을 확률이 높다
- 중복 데이터가 없다
- 자주 액세스되지 않는 데이터는 쿼리하지 않을수 있다
단점
- 전체 데이터를 가져오려면 상대적으로 오래 걸림
- two queries or lookup 하려면 모든 데이터를 가져와야 한다
Types of Relationships
One to One
One to Few
One to Many
One to Squillions
Many to Many
MongoDB Schema Design Rules
- embedding을 우선적으로 고려
- 데이터를 독립적으로 접근해야 한다면 referencing을 사용
- 일반적으로 join과 lookup를 피해야 하지만 사용함으로써 더 나은 스키마 디자인을 만들수 있다면 사용
- 배열형태의 데이터가 사이즈 제한없이 늘어나면 안됨
- 데이터를 어떻게 모델링할지는 전적으로 데이터를 접근하는 패턴에 달려있음
기타
Polymorphic Pattern
모든 document가 같은 필드를 가져야 하는 것은 아님
Outlier Pattern
특정 필드 데이터가 많을 경우
기타 Pattern