2013-09-26 2 views
0

Полезно ли использовать LOAD XML для импорта данных XML в таблицы MySQL? Известны ли проблемы или значительные улучшения производительности в более поздних версиях MySQL (я использую 5.5.34)?MySQL LOAD Производительность импорта XML

Мой текущий пробный запуск с использованием около 50 МБ XML и простых, пустых таблиц InnoDB с одним индексом показывает, что производительность очень плохая - от 3 до 8 записей или 8 КБ в секунду на ноутбуке Core i7 с SSD. Учитывая эту производительность, потребуется около 80 дней для импорта всех моих данных (20 млн. Рядов), тогда как цель составляет около 4-8 часов.

SQL-код выглядит следующим образом:

LOAD XML LOCAL INFILE 'import.xml' 
    REPLACE INTO TABLE assets ROWS IDENTIFIED BY '<asset>'; 

Сервер MySQL работает на CentOS 6.3 в VMware Fusion. Все файлы находятся в пределах этой виртуальной машины, поэтому во время импорта во время импорта не используется хост FS.

+0

Ну, я бы предположил, что «более простой» формат, такой как CSV, будет легче анализировать и, следовательно, скорее всего импортировать быстрее. Что касается ваших индексов на таблицах, можете ли вы их удалить и добавить только после импорта? Это также должно ускорить процесс, если вам не нужны индексы во время импорта, чтобы избежать дублирования или проверки внешнего ключа. – CBroe

+0

Какую настройку вы сделали в своей конфигурации MySQL? Конфигурация по умолчанию действительно ужасна. Кроме того, вы сравнили относительную скорость CSV с XML, чтобы узнать, является ли формат проблемой? – tadman

+0

Я не мог получить его быстрее, чем 3 записи, даже с более поздними версиями MySQL и без виртуальной машины. Однако регулярный импорт CSV был очень быстрым: до 2500 записей без какой-либо настройки и с теми же таблицами. Мне нужен индекс, так как мы делаем замену на основе первичного ключа (можете ли вы действительно использовать InnoDB без ПК?). – lastzero

ответ

0

Решение должно было использовать LOAD DATA INFILE, а не LOAD XML INFILE, который, похоже, испытывает серьезные проблемы с производительностью во всех версиях MySQL. См. Комментарий.

Это изменение не было большой проблемой для меня, так как я использую XSLT для создания входных файлов. XML был бы проще и гибче, но XSLT также позволяет создавать простой текстовый вывод (CSV/TSV).

Смежные вопросы