Быстрый массовый импорт большого набора данных в MySQL

У меня есть довольно большой набор данных, который мне нужно импортировать в MySQL. Я хотел бы сделать это настолько эффективно, насколько это возможно, поскольку мне придется делать это неоднократно. Есть ли уловки для этого? Есть ли способ, который более эффективен, чем расширенные операторы INSERT?

Чтобы ответить на вопросы в комментарии, оригинальный формат находится в XML, хотя у меня уже есть преобразователь, чтобы поместить его в формат CSV. Я работаю с MySQL 5.1.x и целевой базой данных является InnoDB. Между данными существуют отношения, но у меня нет никаких ограничений, и в большинстве случаев данные недостаточно чисты, чтобы их навязать.

5 ответов

Решение

Попробуйте mysqlimport, который вы можете импортировать напрямую из файлов CSV.

Я читал руководство по mysql, я думал о INSERT AFTER, но LOAD DATA INFILE выглядит интересно "в 20 раз быстрее"....

Существует инструмент ETL с открытым исходным кодом под названием Pentaho Data Integration, в котором есть опция массовой загрузки mysql (в папке эксперимента в представлении "Дизайн"). Вы также можете быстро загружать данные независимо от платформы, используя их шаги CSV Input и Table Output. Если вам необходимо выполнить какую-либо обработку данных перед загрузкой, вы можете закодировать эту логику в этой программе.

Использование /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; а также /*!40000 ALTER TABLE tbl_name ENABLE KEYS */; вокруг операторов INSERT для каждой таблицы.

Это будет гарантировать, что неуникальные индексы будут созданы после того, как будут представлены все строки, вместо того, чтобы пытаться строить их по частям.

Даже большая "вставка..." не должна занимать слишком много времени. Я взял новый экспорт базы данных JIRA размером 200 МБ и загрузил в целую базу данных примерно за 30 секунд.

Вы хотите использовать оператор LOAD DATA. Если у вас нет sudo privs, вы также хотите использовать параметр LOCAL, чтобы вы могли загружать данные из любого места. НАГРУЗКА ДАННЫХ в мой Dell T5600 засасывает данные с огромной скоростью, примерно гигабайт каждые 2-3 минуты. Я только что закончил загрузку 8 ГБ примерно 37 миллионов записей за 1 час 13 минут.

Другие вопросы по тегам