dataloader

그린그레이프·2020년 6월 24일
0

what?

  • per request batch, cache query
  • 하나의 요청 범위 내에서 쿼리를 모아서 데이터 베이스로 전송하거나, 쿼리의 결과를 caching 해서 돌려주는 역할을 하는 것.

why need?

  • N + 1 problem 의 해결을 위해

N + 1 problem?

what?

  • 예를 들어, 두개의 테이블(A,B) 이 1:N 관계일때, A 의 결과를 조회하면 B 테이블에 대한 조회가 N 번 발생해서 총 N + 1 번의 조회가 되는 경우.

why is this a problem?

  • db connection 은 비싸다 -> db 마다 소수의 커넥션을 유지하고 있다. (connection pool)
  • 여러 요청이 발생하는 경우 connection 을 돌려 줄때까지 대기해야 하므로 성능상의 문제가 발생한다.

how solve?

  • 실제로 요청되는 쿼리의 갯수를 줄이는 것이 핵심이다.
  • batch 의 아이디어를 활용한다. -> 모을 수 있는 쿼리는 모아서 하나의 쿼리로 전송한다.

how work?

  • resolver 와 data fetching 사이에 dataloader layer 를 추가한다.
  • dataloader layer 에서는 쿼리를 모아주는 역할을 한다.
profile
제대로 걷는 한걸음이 곧 백걸음이다

0개의 댓글