Я испытываю большие трудности с временем и вычислительной мощностью при переносе больших данных (несколько 100 000 строк). Я разрабатываю сервис, который обрабатывает много данных в рельсах. Наши модели постоянно меняются, поскольку мы все больше и больше разбираемся в дизайне. Это приводит к множеству миграций в нашей базе данных, которая является базой данных Postgres 9.0. Часто эти миграции также включают в себя некоторую миграцию самих данных. Вчера мы узнали, что нам нужно переместить атрибут «текст» в модели в отдельную модель, чтобы атрибут больше не был просто атрибутом в модели, а вместо этого являлся отношением «один ко многим».
Моя миграция выглядела несколько как this:
def self.up
create_table :car_descriptions do |t|
t.integer :car_id
t.text :description
t.timestamps
end
Car.find_each do |car|
if car.description.present?
car.descriptions.build :description => car.description
end
car.save
end
remove_column :cars, :description
end
Теперь проблема в том, что это происходит довольно медленно, и что еще хуже, если я установлю счетчик и распечатаю прогресс, я могу увидеть, что миграция выполняется все медленнее и медленнее с течением времени. В моем мониторе активности я вижу, что процесс ruby занимает все больше и больше памяти.
Итак, мой вопрос - есть ли лучший способ выполнить такую миграцию больших данных?