• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

한가지 궁금한 점이 있습니다~~

22.02.23 14:38 작성 조회수 119

0

안녕하세요

강의 잘 보고 있습니다!

 

질문1)

5분 54초에 후기의 블로그엔 인덱스가 안걸려있다는 말씀이

 

지금 구조에 comments 아래

_id: ObjectId('~~') <- 인덱스처리되어있음

blog: ObjectId('~~') <- 인덱스 처리 안되어있음..그래서 메모리적음

 

이 말씀이실까요 ?

 

 

질문2)

관계라는게 코드상에서 어떤 관계인지 잘 이해가 안가네요 ㅠㅠ

 

가상필드 만들고

blog: type: Types.ObjectId, ref: 'blog' 연결하고

api 에서 populate로 한게 관계설정한거라고 보면 될까요 ?

 

 

답변 1

답변을 작성해보세요.

1

ObjectId 자체는 index와 아무 상관이 없어요. ObjectId의 같은 형식을 일반 string을 저장할 때보다 용량이 적은게 특징입니다. 각 문서 _id에 기본설정으로 인덱스 처리가 되어 있고 그 외 다른 field에 index를 걸고 싶으시면 직접 걸어주셔야되요. 다만 _id를 포함해서 일반적으로 인덱스를 거는 필드들이 ObjectId이면 좋은 점은 용량이 적기 때문이에요. 인덱스는 해당 필드의 값을 상대적으로 비싼 메모리 저장해야되기 때문에 ObjectId이면 비용 절감면이 있어요

 

관계라는걸 너무 어렵게 생각하실 필요 없어요. 크게 다음과 같이 3가지가 있죠: 1대1, 1대 다(1:N), 다 대 대(M:N). 이 관계 자체는 데이터베이스와 상관 없이 있는 개념이에요. 유저와 블로그의 관계가 어떻게 되나요? 한 유저가 여러개의 블로그를 작성할 수 있지만 보통 여러 유저가 한 블로그를 작성할 수는 없죠. 이 경우 유저:블로그 = 1:N이 됩니다. 이런 관계 개념이 있고 이걸 디비에 어떻게 적용하느냐는 디비에 따라 다릅니다. 관계형에서는 코드상으로 업격하게 해주는데 몽고에서는 엄격하게 해주지 않습니다. mongoose(서버)상에서 ref 정도로 해줍니다. populate도 서버에서 이루어지는거고요

jjongrrr님의 프로필

jjongrrr

질문자

2022.03.11

답변 감사합니다! 

이해가 됐어요~~~!