Существуют ли какие-либо ORM Ruby, которые используют курсоры или интеллектуальную выборку?

Я ищу Ruby ORM для замены ActiveRecord. Я смотрел Sequel и DataMapper. Они выглядят неплохо, однако ни один из них, похоже, не выполняет базовых функций: не загружает все в память, когда она вам не нужна.

Я имею в виду, что я пробовал следующее (или эквивалент) в ActiveRecord и Sequel на таблице с большим количеством строк:

 posts.each { |p| puts p }

Оба они сходят с ума по памяти. Кажется, что они загружают все в память, а не загружают данные, когда это необходимо. Я использовал find_in_batches в ActiveRecord, но это неприемлемое решение:

  1. ActiveRecord не является приемлемым решением, потому что у нас было слишком много проблем с ним.
  2. Почему мой код должен знать механизм подкачки? Я счастлив где-то настроить размер страницы, но это все. С помощью find_in_batches вам нужно сделать что-то вроде:

    post.find_in_batches {| batch | batch.each {| p | put p}}

Но это должно быть прозрачно.

Так есть ли где-нибудь надежный Ruby ORM, который правильно выполняет выборку?


Обновление:

Как упоминал Серджио, в Rails 3 вы можете использовать find_each , что именно то, что я хочу.Однако, поскольку ActiveRecord не вариант, кроме тех случаев, когда кто-то действительно может убедить меня использовать его, возникают следующие вопросы:

  1. Какие ORM поддерживают эквивалент find_each?
  2. Как это сделать?
  3. Зачем нам нужен find_each , а find должен это делать, не так ли?
19
задан Arnaud Meuret 6 March 2013 в 21:17
поделиться