José Galisteo Ruiz

¯\_(ツ)_/¯

ActiveRecord, find_each y uncached

| Comments

Si tenemos que recorrer coleciones muy grandes de ActiveRecord deberíamos usar find_each o find_in_batches, hasta aquí ninguna novedad, pero el otro día me di cuenta de que mis workers de sidekiq consumían muchísima memoria, el problema es que AR cache los objetos que devuelve el find_each.

La solución para evitar esto pasa por usar el método uncached.

Ejemplo:

1
2
3
4
5
ActiveRecord::Base.uncached do
  scope.find_each(batch_size: 1000) do |tweet|
    gz.write tweet.to_csv
  end
end

Comments