Обработка больших наборов записей в Rails - PullRequest
1 голос
/ 09 апреля 2010

Я пытаюсь выполнить ежедневную операцию с набором данных большего размера, чем обычно (более 2 млн. Записей). Однако Rails, похоже, очень долго выполняет операции с таким набором данных. Операции типа

Dataset.all.each do |data|
  ...
end

это займет очень много времени (я полагаю, это потому, что он не может вместить все элементы в память одновременно, верно?).

У кого-нибудь есть какие-нибудь стратегии, как я мог бы справиться с этой ситуацией? Я знаю, что SQL, вероятно, ускорит процесс, но я стремлюсь использовать среду Rails, поскольку я могу делать с данными гораздо более сложные вещи, чем просто с помощью операторов SQL.

Ответы [ 2 ]

4 голосов
/ 09 апреля 2010

Вы хотите использовать ActiveRecord find_each для этого.

Dataset.find_each do |data|
  ...
end
1 голос
/ 09 апреля 2010

При обработке большого набора строк база данных очень быстрая и эффективная, для чего они были предназначены. Я бы порекомендовал попытаться выполнить всю эту обработку в SQL, если вы хотите максимальной производительности. Если вы предпочитаете использовать Rails, или невозможно выполнить все, что вы хотите в SQL, вы можете попытаться выполнить некоторую предварительную обработку в SQL, а остальную часть - в Rails. Если не считать этого, 2m + строки - это много, что нужно зациклить, даже если каждая из них занимает доли секунды, они складываются в течение длительного времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...