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 |