inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

mongoDB 기초부터 실무까지(feat. Node.js)

섹션 소개

궁금한 사항이 있습니다.

165

우동이

작성한 질문수 23

1

항상 좋은강의 해주셔셔 감사합니다.

다름이 아니라 관계를 하게 될 경우 index를 따로 생성해주셔야 한다고 말씀해주셨는데

부모 - 자식의 관계를 key로 생성한다면 결국 부모랑 자식이 가지고 있는 id는 모두 index로 생성이 되어있고 부모는 자식의 key를 자식은 부모의 key를 가지고 있는 상태인데 왜 따로 index를 부여해야 하는지 궁금합니다..

데이터 엔지니어링 mongodb aws DBMS/RDBMS javascript nodejs rest-api

답변 1

0

김시훈 (도도소프트)

우동이님 안녕하세요 :)

네 맞아요 각 문서(부모, 자식)의 _id는 모두 기본 설정으로 인덱스처리가 되어 있습니다. 따라서 각 문서의 _id로 탐색을 해야하는 경우 별도의 인덱스가 필요 없는게 맞아요.

1. 자식 문서가 부모에 내장되어 있으면 애초에 탐색할 필요가 없어서 신경 쓸 필요가 없죠.

2. 자식 문서의 _id가 부모에 내장되어 있으면 이 경우에도 이미 인덱스 처리가 되어 있는 자식의 _id들을 부모 문서가 알고 있기 때문에 별도의 인덱스가 없어도 자식 문서를 빠르게 탐색해서 populate를 할 수 있습니다.

3. 근데 2.의 반대인 3번째의 경우에는 자식 문서에 부모 문서의 _id가 있을 때는 상황이 다르죠. 부모의 _id는 인덱스 처리가 되어 있지만 자식 문서에 foreign key처럼 저장된 부모의 _id는 인덱스처리가 되어 있지 않아요. 그래서 이 경우 virtual populate를 인덱스 없이 하게 되면 매우 느려질 수 있어요. index scan이 아니라 collection scan이 실행될테니깐요.

지금 부모에서 자식 방향으로 탐색, populate하는걸로 가정했는데요. 역방향으로 하더라도 마찬가지겠죠. 만약 2.의 경우에서 자식 문서를 먼저 탐색하고 해당 부모들을 탐색하는 경우가 있다고 하면 부모 문서에 배열로 저장되어 있는 자식 문서의 _id들도 인덱스를 걸어줘야 해요. 하지만 이건 배열의 크기에 따라 상당히 비싸질 수 있겠죠? 이 경우 2. 해결책과 비슷하게 자식에도 부모의 _id들을 저장해주는 방법이 있겠죠. 그러면 자식_id가 포함되어 있는 부모를 찾는게 아니라 부모의 _id로 탐색할 수 있으니깐요.

option usecreateindex is not supported 오류 나면은

0

162

1

Schemaless 특성을 재생시 검은화면이 나와요

0

258

1

user 내장 시 ref 필드 필요성

0

257

1

await 관련해서 질문드릴게 있습니다!!

0

306

2

섹션6의 3번째 강의 faker파일이 어디있나요?

0

320

1

$elemMatch 질문이 있습니다.

0

251

1

DB 업데이트에 실패했을 상황에서 대처는 어떻게 할 수 있나요.

2

777

2

블로그에 user 데이터를 추가하는 방법에 대해서

0

243

1

blog 데이터 생성시 user 관련 오류

0

363

1

age 예외 처리를 별도로 하신 이유가 궁금합니다.

2

312

2

delete 메소드가 많은 이유가 궁금합니다.

0

185

1

unique validation 처리

0

302

1

updateMany에서 user._id를 못찾는 상황

1

403

1

find() 가 리턴하는 instance member

1

438

3

몽고 db를 백업방법을 부탁합니다.

0

610

1

인덱스 생성시점

0

721

1

$pull 문법에 대한 질문

0

367

1

comment의 id가 생성되는 시점

1

310

1

리팩토링 강의에서 라우터 리팩토링 전개연산자(...)

1

322

1

session.abortTransaction()에 대한 실제 예시 문의

0

296

1

섹션9 Computed Fields 강의에서, 다음 강의 가기 전 빠진부분

-1

413

1

faker 패키지 취약성 이슈

1

496

1

라우터 리팩토링

0

348

1

섹션4 진행중, mongoose 질문

0

316

1