Импортирование дампа базы данных википедии - убивает navicat - у кого-нибудь есть идеи? - PullRequest
1 голос
/ 14 мая 2009

Хорошо, ребята, я скачал дамп википедии xml и огромные 12 ГБ данных: \ для одной таблицы, и я хотел импортировать его в базу данных mysql на моем локальном хосте - однако это огромные файлы 12 ГБ и, очевидно, навигационные файлы принимают самое приятное время импортировать его или, скорее, его повесить: (.

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


Позвольте мне исправить, что его 21 ГБ данных - не то, чтобы это помогло: \ - есть ли у кого-нибудь идея импортировать такие огромные файлы, как этот, в базу данных MySQL.

Ответы [ 3 ]

2 голосов
/ 14 мая 2009

Используйте вместо этого командную строку, navicat ужасен для импорта больших файлов и, вероятно, займет в 20 раз больше времени, чем при использовании CLI.

1 голос
/ 14 мая 2009

Взгляните на Sax parser , он позволяет вам читать корпус по кусочкам, а не считывать целые 12 ГБ в память. Хотя я не совсем уверен, как бы вы связали его с MySQL.

0 голосов
/ 28 августа 2014

это довольно старый вопрос, FWIW .. обновляется новым ответом. Я сталкивался с теми же проблемами, и часы работы одного массивного файла sql могут быть рискованными, и столкновение с любыми проблемами в основном означает, что вы начинаете все сначала. что я сделал, чтобы уменьшить риск и получить некоторую производительность через CLI.

  1. разбить массивный файл SQL на более мелкие, более управляемые куски, например, 'enwiki-20140811-page.sql', разделенный на файлы размером около 75 МБ.

    split -l 75 enwiki-20140811-page.sql split_
    

    выдаст достаточное количество файлов с префиксом 'split_' в имени файла.

  2. перебирать этот список файлов и импортировать по одному ... простой скрипт оболочки как таковой.

    for f in $FILES
    do
      echo "Processing $f file..."
      mysql -h $HOST -u $USER -p$PSWD $DB < $f
    done
    

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

Разделение файла SQL по количеству строк предотвращает нарушение любых больших операторов INSERT. Однако, если вы уроните слишком малое количество строк, вы можете разделить операторы DROP и CREATE в начале SQL. Это легко исправить, открыв первые несколько разделенных файлов и решив.

...