2010-05-13 2 views
1

Нам нужно импортировать большое количество данных (около 5 миллионов записей) в postgresql db под приложением rails. Данные будут предоставлены в формате xml с изображениями внутри него, закодированными в Base64.Импорт 5 миллионов записей в приложение для рельсов

Ориентировочный размер xml-файла - 40 ГБ. Какой XML-анализатор может обрабатывать такое количество данных в рубине?

Спасибо.

ответ

3

Вы хотите использовать какой-то SAX parser. Анализаторы SAX не загружают все в память сразу.

Я не знаю про рубины, но быстро googling дал this blog post. Вы можете начать рыть оттуда.

Вы также можете попробовать split XML-файл на более мелкие куски, чтобы сделать его более управляемым.

+0

+1 для анализатора SAX. REXML работает как парсер SAX, однако вы можете использовать более эффективную библиотеку, такую ​​как парсер Nokogiri SAX http://nokogiri.rubyforge.org/nokogiri/Nokogiri/XML/SAX/Parser.html –

1

Вы должны использовать синтаксический анализатор XML SAX, как сказал Юха. Думаю, Libxml - это самый быстрый xml lib для ruby.

1

Вы можете преобразовать данные в CSV, а затем загрузить их в свою базу данных, используя возможности загрузки СУБД CSV. Для MySQL it's this и для PostgreSQL it's this. Я бы не использовал ничего встроенного в Ruby для загрузки 40-гигабайтного файла, это не слишком хорошо с памятью. Лучше всего оставить «профессионалов».

+0

Вам по-прежнему нужен синтаксический анализатор XML для преобразования XML-> CSV. –

+0

К сожалению, для этого я должен использовать ruby, потому что каждая запись должна проходить через логику приложения: например, проверка, обновление счетчиков, индекс solr, другие обратные вызовы, относящиеся к конкретным приложениям. –