Я испытываю большие трудности с вычислительной мощностью при переносе больших данных (несколько 100 000 строк).Я разрабатываю сервис, который обрабатывает много данных в рельсах.Наши модели постоянно меняются по мере того, как мы все больше и больше понимаем наш дизайн.Это приводит к большому количеству миграций в нашей базе данных, которая является базой данных Postgres 9.0.Часто эти миграции также включают в себя некоторую миграцию самих данных.Вчера мы выяснили, что нам нужно переместить атрибут «текст» модели в отдельную модель, чтобы этот атрибут больше не был просто атрибутом модели, а вместо этого связывал один со многими.
Моя миграцияВыглядело примерно так:
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 занимает все больше и больше памяти.
Итак, мой вопрос - есть ли лучший способ выполнить миграцию больших данных, как этот?