Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

batch size 전역 설정 #587

Closed
J-I-H-O opened this issue Sep 25, 2024 · 1 comment · Fixed by #622
Closed

batch size 전역 설정 #587

J-I-H-O opened this issue Sep 25, 2024 · 1 comment · Fixed by #622
Assignees
Labels
Milestone

Comments

@J-I-H-O
Copy link
Contributor

J-I-H-O commented Sep 25, 2024

요구 사항

  • batch fetch size 전역 설정 추가
@J-I-H-O
Copy link
Contributor Author

J-I-H-O commented Oct 7, 2024

as-is

  • 모임에 연관된 일대다 연관관계는 총 4개, 즉 모임은 4개의 컬렉션 필드를 가짐
  • 기존 모임 필터링 조회시에는 이 컬렉션들을 모두 fetch join
  • 이때 두 가지 문제가 발생함
    1. 카테시안 곱으로 인한 중복 row가 과도하게 많아져 조회 성능 하락
    2. fetch join으로 인해 페이징을 도입할 수 없음

to-be

  • batch size 설정을 통해 기존의 fetch join으로 컬렉션을 조회하던 방식에서, IN 쿼리를 통해 연관된 컬렉션을 조회해오도록 변경

이야기 나눠봐야할 부분

  • 현재 연관된 컬렉션 필드를 모두 Set 에서 List로 전환함.
    • Set
      • 장점: club 단건 조회(findById) 와 같이 페이징이 적용되지 않는 API에서는 fetch join을 사용할 수 있음 (Set은 MultipleBackFetchException 발생하지 않음)
      • 단점: 순서 보장(야바위 현상 해결)을 위해 order by 절을 추가해야 함. 이때 인덱스 적용 시 해당 column을 함께 신경써줘야 함
    • List
      • 장점: order by 절을 추가하지 않고도 야바위 현상을 수정할 수 있음
      • 단점: club 단건 조회(findById) 와 같이 페이징이 적용되지 않는 API에서도 한 번에 하나의 컬렉션에만 fetch join을 사용할 수 있음 (List는 MultipleBackFetchException 발생)
  • 위브와 이야기 나눠본 끝에 List 자료형으로 전환했습니다. 어떤 자료형을 사용하는게 좋을지 여러분과 의견 나눠보고 싶습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: Done
Development

Successfully merging a pull request may close this issue.

2 participants