ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 두 테이블 데이터 조합시 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초 (캐시 확인)

     

    댓글

Designed by Tistory.