본문 바로가기

Ruby On Rails/Model(ORM)

batches를 사용하는 이유

1. 큰 크기의 ids

큰 크기의 ids(성능에 따라 다르겠지만 대략 100만개 이상)를 넘기면 쿼리를 처리하는 과정에서 오류가 발생할 수 있다. 

ActiveRecord::StatementInvalid: Mysql2::Error::ConnectionError: MySQL server has gone away
from /Users/xxx/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query'
Caused by Mysql2::Error::ConnectionError: MySQL server has gone away
from /Users/xxx/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query'

이렇게 mysql server가 그 데이터를 못 받아주는 경우가 발생한다. 

혹은 쿼리문 날린 상태로 멈춰 있는 경우도 있다.

아마 다른 형태의 에러도 존재할 수도 있다.

중요한 건 큰 크기의 ids를 한 번에 넘겨주는 것은 안전하지 못하다는 것이다.

 

2. 속도

약 50만개의 ids를 넘기면 하나의 쿼리를 처리하는데 몇 십분이 걸린다. 

 

3. batches

배치를 사용하는 이유는 저 큰 덩어리를 작은 덩어리로 나누어서 작업을 빠르고 안전하게 처리하기 위함이다.

 

'Ruby On Rails > Model(ORM)' 카테고리의 다른 글

find_in_batches vs each_slice  (0) 2021.12.25
preload vs includes vs eager_load vs joins  (0) 2021.12.24
Model 정리  (0) 2021.12.24