-
두 테이블 데이터 조합시 findAllById vs findById 여러번카테고리 없음 2021. 3. 8. 17:35
연관관계는 없지만 두 개체의 값을 조합해야 할 때가 있다.
그리고 리스트에 여러개의 데이터라고 한다면
상식적으로 전체를 불러온 후 처리하는게 빠르다는 걸 알 수 있다.
하지만 더 빠를거리고 생각만 하고 있지, 얼마나 더 빠른지에 대해서는 감을 잡지 못하고 있었다.
그래서 이번에 비슷한 작업을 할 기회가 생겨 비교해 보았다.
A의 값을 조회한 후 함께 조합할 값을 B에서 찾아 조합하여 리턴해야하는 경우
방법 1.
A를 조회한 후 B에서 검색을 위해 매핑 값 리스트를 만들어 findAllById로 검색,
B 결과를 HashMap<매핑값,B> 와같이 하여
A기준으로 조합할 때, 해시맵에서 B값을 빼와 조합한다.
결과.
100여개의 데이터 : 0.1~0.2
50000여개의 데이터 : 평균 4초
방법 2.
A를 조회한 후 B에서 검색을 위해 매핑 값 리스트를 만들어 findAllById로 검색,
A기준으로 조합할 때 B 결과에서 findAny로 찾아 조합
결과.
100여개의 데이터 : 0.1~0.2
50000여개의 데이터 : 평균 160초
방법 3.
A를 조회한 후
A기준으로 조합할 때 id로 B를 검색하여 조회
결과.
100여개의 데이터 : 0.5~0.8초
50000여개의 데이터 : 4분이상 걸려 측정 중단
결론 :
1. 예상한대로 한번에 조회한 후 해시맵에 저장하여 키 값으로 매핑하여 조합하는게 가장 좋았다.
2. 100개 이하의 데이터에서는 맵에 넣지않고 조회결과 B에서 매번 findAny로 찾아 조합하는게 빠를때도 있었다.
3. DB에서 조회시 일정기간동안 소켓처럼 연결이 유지되어 같은 프로젝트 내 메모리에서 찾는 정도는 아니더라도 어느정도 속도가 나올 것이라 생각되었으나, 대량의 데이터에서는 아주 오랜시간이 걸린다.
추가:
만약 같은 검색을 여러번 한다면?(캐시 여부)
50000여개의 데이터 : 평균 2초 (캐시 확인)
댓글