2010-03-12 2 views
1

У меня есть несколько массивных (много гигабайтных) наборов данных, которые мне нужно импортировать в приложение Rails. Наборы данных в настоящее время находятся в собственной базе данных на моей машине разработки, и мне нужно прочитать их и создать строки в таблицах в моей базе данных Rails на основе информации, которую они содержат. Таблицы в моей базе данных Rails не будут точно такими же, как таблицы в исходных базах данных.Самый удобный способ импорта массивных наборов данных в приложение Rails?

Каков самый умный способ сделать это?

Я думал о миграции, но я не совсем уверен, как подключить миграцию к базам данных, и даже если это возможно, это будет смехотворно медленным?

+0

Какие СУБД вы используете? –

+1

Как будет отличаться старая база данных и новая база данных? Если изменения являются поверхностными (имена столбцов и т. Д.), Я бы просто вручную экспортировал их из старой базы данных и в новую, а затем выполнил миграцию для изменения столбцов. –

+0

Я на Postgres. На данный момент я недостаточно изучил наборы данных, чтобы определить, сколько потребуется изменений, но, как минимум, будут переименованы столбцы и удалены столбцы. Я не уверен, что это имеет большое значение, но среди скопированных таблиц также будут объединены таблицы, а также другие таблицы, связанные с foreign_keys. –

ответ

1

, не видя схемы или не зная логики, которую вы хотите применить к каждой строке, я бы сказал, что самый быстрый способ импорта этих данных - создать представление таблицы, которую вы хотите экспортировать, в нужный вам порядок столбцов (и обработайте его с помощью sql) и сделайте выбор в outfile на этом представлении. Затем вы можете взять полученный файл и импортировать его в целевой бит.

Это не позволит вам использовать любые проверки модели рельсов на импортированных данных.

В противном случае вам нужно пройти медленный путь и создать модель для каждой исходной таблицы db/table для извлечения данных (http://programmerassist.com/article/302 расскажет вам, как подключиться к другому db для данной модели) и импортировать его таким образом. Это будет довольно медленно, но вы можете настроить экземпляр монстра EC2 и запустить его как можно быстрее.

Миграции будут работать для этого, но я бы не рекомендовал его для чего-то подобного.

+0

Я довольно слабый в базе данных-fu, в таком подходе я смогу сохранить отношения между моделями в исходном наборе данных? Кажется, что если я импортирую foreign_keys, мне придется также импортировать первичные ключи, чтобы сохранить отношения, и чтобы сохранить первичные ключи, мне нужно будет импортировать данные в пустую таблицу. Я мог бы, предположительно, выгрузить мои существующие таблицы в файл и повторно импортировать их, вручную сопоставляя их отношения foreign_key, но это, очевидно, звучит как огромная боль. Или есть что-то большое, что мне не хватает? –

+0

Вам, вероятно, потребуется импортировать их в пустую таблицу, если вы используете метод дампа/реимпорта. Если вы создали модель для данных и импортировали с помощью моделей рельсов, вы бы этого не сделали (потому что вы могли использовать ассоциации для создания и управления связанными элементами). –

0

Поскольку грузинские предложил, я выложу свой комментарий в качестве ответа:

Если изменения являются поверхностными (имена столбцов изменились, столбцы удалены, и т.д.), то я бы просто вручную экспортировать их из старой базы данных и в новое, а затем выполните миграцию для изменения столбцов.