해결된 질문
24.09.27 20:53 작성
·
27
·
수정됨
1
안녕하세요
좋은 강의 감사합니다. 개념을 확립하는데 정말 도움이 많이 됐습니다. DB구조를 계속 고민하게 되어 질문 남겨봅니다.
상점table-도큐먼트가 10만개(필드20개) 정도 있고, 상품table-도큐먼트가 30만개(필드15개)정도 있는 DB입니다. 이걸 몽고디비 콜렉션에서 어떻게 구성하는 것이 좋을 지 아무리 고민해도 답이 안나와 선배님의 조언을 듣고 싶습니다. Main 검색은 상품명 이고 프론트에는 지역기반 필터가 있습니다. (지역은 상점과 상품 모두 필드로 포함)
강의를 듣고 내린 결론은 1도큐먼트로 통합인데 아래 3가지로 고민을 했었습니다.
상점과 상품을 one 도큐먼트로 통합 후 1 Collection 구성 ->30만 도큐먼트 (상품기준, 상점중복저장,필드25개)
상점 콜렉션에 상품을 어레이필드로 저장 -> 10만도큐먼트 (상점기준, 중복저장없음, 필드 21개)
각각의 콜렉션 후 lookup
상품 콜렉션에 상점을 어레이필드로 저장
저는 1번이 가장 빠를 것 같은데 조언 부탁드립니다.
감사합니다.
답변 2
0
2024. 09. 27. 21:27
일단 어디까지나 저의 개인적인 의견이지만 의견을 전달해드릴게요.
일단 DB선정을 RDB로 하시는것을 추천드립니다.
어디까지나 저의 의견이지만 상점에 여러가지의 상품이 무제한적으로 추가될수있다는 가정이 들어가 있습니다.
이런 경우에는 하나의 컬렉션에 Array형태로 저장하는것은 매우 잘못되었습니다. Array형태로 저장하는것은 어느정도 정해지거나 감당가능한 데이터를 저장할 때 사용해야합니다.
그래서 이 기준에 따라서 무조건적인 분할이 필요합니다. 그래서 lookup이 필수적으로 들어가게 될 거 같습니다.
그리고 lookup이 들어가도 큰 문제는 없어 보여요 쿼리를 두번 전송하거나 기본적으로 상품들에 대해서 상점이라는 강력한 match조건이 있기 때문이죠.
근본적으로는 이런 구조는 RDB가 가장 좋기는합니다. 제가 잠시 외부에서 모바일로 답변을 드린거라 잘못이해거나 설명이 잘못된 부분이 있을 수 있는데 혹시 추가적인 질문있다면 댓글 남겨주시면 감사하겠습니다.
0
안녕하세요, 인프런 AI 인턴입니다. Josh B님.
MongoDB 컬렉션 구성에 대해 고민하고 계시군요! 이와 관련된 기존 질문과 유사한 답변을 아래에 공유드립니다.
강사님께서 비슷한 주제에 대해 답변하신 게시물을 참고하시면 도움이 될 것입니다:
다음은 일반적인 답변 요약입니다:
단일 도큐먼트로 통합:
상점 콜렉션에 상품을 어레이 필드로 저장:
별도의 컬렉션을 사용하고 lookup:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
2024. 09. 27. 21:59
답변감사드립니다!
몽고로 결정한 이유는 atlas search때문입니다. 엘라스틱을 직접 적용하는 것 보다 더 빠르게 배우고 적용이 가능할 것 같아서요. 샤딩, 클러스터링 이런 부분까지 감당할 수 없어서 매니지형으로 알아보다 보니 몽고디비까지 왔습니다. RDB를 사용하며 atlas만큼의 서비스를 제공하는 곳이 또 있을까요?