Загрузка данных в базу данных MySQL параллельно - PullRequest
0 голосов
/ 05 июня 2010

У меня есть база данных mysql и таблица размером 74 ГБ. В настоящее время я использую команду mysql для загрузки этих данных в базу данных mysql. Прошло более 10 часов и все еще работает. Есть ли способ загрузить данные в базу данных MySQL параллельно. Один из способов - разделить данные таблицы на несколько файлов, а затем вызвать load для каждого из этих файлов. Но это скорее взлом. Есть ли что-то, что следует за stackoverflowers?

Спасибо.

Ответы [ 2 ]

1 голос
/ 05 июня 2010

Убедитесь, что ваш исходный файл и ваша БД хранятся на быстрых дисках и не фрагментированы. Я видел, что стоит изменить движки баз данных для таблиц, чтобы ускорить импорт, а затем изменить их обратно после импорта. Я бы попробовал с движками INNODB и MyISAM проверить, быстрее ли это.

Удалите все индексы и добавьте их обратно, когда вы закончите. Вам все равно придется повторно оптимизировать их, и гораздо быстрее выполнить это только один раз. Когда вы добавите их обратно, объедините их в один оператор alter (это быстрее).

Экспорт данных в удобный формат массовой загрузки. Вы можете довольно легко получить 10000 или более строк базы данных в одной строке вашего файла.

PHPMyAdmin и MySQL Docs имеют настройки, которые вы должны использовать для максимально возможной задержки для ускорения чтения. Убедитесь, что больше ничего не использует эту базу данных и / или таблицу. Это может только замедлить ход событий.

Убедитесь, что указанная вами кодировка совпадает с кодировкой в ​​БД.

Перенесите файл на сервер БД и импортируйте его оттуда (не импортируйте с другого компьютера по проводам).

Отключите репликацию, если можете и используете ее. Отключите ведение журнала, если можете, и вы его используете. Двоичные журналы удваивают объем данных, которые вы должны записать.

0 голосов
/ 05 июня 2010

Параллельные вставки в одну таблицу (для скоростных целей) - нонсенс.
И разбивать таблицы тоже не слишком разумно.
Вы должны убедиться, что в таблице нет индексов.
И было бы неплохо иметь исходный файл на отдельном диске / контроллере.

...