За последние 24 часа нас посетили 36313 программистов и 1537 роботов. Сейчас ищут 1327 программистов ...

Загрузка большого файла. Импорт в SQL

Тема в разделе "Прочие вопросы по PHP", создана пользователем EvelRus, 1 сен 2011.

  1. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Всем привет! когда-то я уже задавал этот вопрос, но не смог его найти ((

    В общем есть файл со строками, которые надо загнать в БД, в файле несколько сотен тысяч строк. т.е. каждая строка это запись в БД.
    Но при добавлении возникают проблемы, т.к. после ~ 20 000 записей база начинает висеть и очень плохо думать, проц под 100%

    кто может помочь скриптом который был делал добавление в БД не перегружая комп?
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Если БД локальная, то через консоль, а не скриптом.
    Код (Text):
    1. mysql -u root -p dbname < file.sql
    Если на сервере, то скриптом Sypex Dumper.

    Спокойно импортирует БД свыше 3 Гб.
     
  3. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    так проблема в том, что это не дамп, просто набор текста
    Код (Text):
    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. ...
    8. 1000000000000
    и т.д..
    И надо каждую строку через insert into добавить в БД

    плюс, как на денвере запустить такую консоль? сразу грузить сервер не хочется )
     
  4. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Буквально недавно я проводил тесты и мне понадобилось 3 000 000 (три миллиона) записей.
    Было 3 таблицы со связью many-to-many и в каждую нужно было вставить строку (в таблицу со связями - несколько).

    Я написал простейший скрипт на РНР, который это делал.
    Да, на заполнение ушла не минута, а целый рабочий день + ночь, но я в это время мог спокойно сидеть и работать.
    Ничего не грузило. Машинка так себе: Intel Core 2 Duo T8100 (2.1GHz), 2GB - 2 DIMM (DDR2-667).

    Я не знаю, в чем конкретно у тебя проблема.
    Показывай скрипт, что ли.
     
  5. alexfer

    alexfer Активный пользователь

    С нами с:
    2 авг 2010
    Сообщения:
    239
    Симпатии:
    0
  6. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Я всё же не понял, что за формат... если типа CSV (только с разделителем не запятая), то можно попробовать DbForge - я 200 000 из CSV импортировал, пару минут заняло.
     
  7. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    PHP:
    1. <?
    2. $handle = fopen("./word/".$_GET['file'], "r");
    3.     while (!feof($handle))
    4.     {
    5.         $buffer     = fgets($handle);
    6.         $sql_res    = mysql_fetch_row(mysql_query('SELECT count(*) FROM `data` WHERE `data_string` = "'.$buffer.'" LIMIT 1'));
    7.         if ($sql_res[0] == 0)
    8.         {
    9. mysql_query("INSERT INTO `data` VALUES ('', '".$date."','."$buffer".')") or die (mysql_error());
    10. }
    11. }
    Что-то типа такого