Я проверил dm-chunked_query
, как предложил @MichaelKohl, но я не мог заставить его работать так, как ожидал, он получает всю коллекцию (я ожидал, что он будет использовать OFFSET + LIMIT). Поэтому я написал свое собственное расширение, оно довольно простое, надеюсь, оно поможет:
class DataMapper::Collection
def batch(n)
Enumerator.new do |y|
offset = 0
loop do
records = slice(offset, n)
break if records.empty?
records.each { |record| y.yield(record) }
offset += records.size
end
end
end
end
# Example
Model.all(:order => :id.asc).batch(1000).each { |obj| p obj }