[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Возможно ли оптимизировать запрос?
Strannik
Добрый день. Подскажите возможно ли оптимизировать дамп csv вбазу данных(строк в csv более 200 000)? Или как увеличить скорость выполнения скрипта на стороне сервера?

код:
conn();
$filename="csv.csv";
$handle = fopen("$filename", "r");
while (($data = fgetcsv($handle, 1000000, ";")) !== FALSE)
{
if($data[2]!='')
{
$sql0="SELECT * FROM `balans` WHERE `finish_saldo` = '$data[9]'";
$res0=mysql_query($sql0);
if(!$res0||mysql_num_rows($res0)<1)
{
$import_balans="INSERT INTO `balans`(`idn`, `period`, `start_saldo`, `earn_m`, `earn_r`, `pay`, `finish_saldo`) VALUES
('
$data[2]', '$data[1]', '$data[5]', '$data[7]', '$data[6]', '$data[8]', '$data[9]')";
}
else{
$import_user_info="UPDATE `balans` SET `period` = '$data[1]', `start_saldo` = '$data[5]',
`earn_m` = '
$data[7]', `earn_r` = '$data[6]', `pay` = '$data[8]', `finish_saldo` = '$data[9]' WHERE `idn` ='$data[2]'";
}
$import_equipment="INSERT INTO `equipment`(`idn`, `type`, `model`, `date_create`, `serial_number`, `date_of_sealing`, `seal_number`, `state`) VALUES ('$data[2]', '', '$data[11]', '$data[15]', '$data[12]', '', '', '')";
$import_meter_reading="INSERT INTO `meter_reading`(`idn`, `period`, `value`, `pay_type`) VALUES ('$data[2]', '$data[13]', '$data[14]', '$data[10]')";
$sql="SELECT * FROM `user_info` WHERE `account` = '$data[2]'";
$res=mysql_query($sql);
if(!$res||mysql_num_rows($res)<1)
{
$import_user_info="INSERT INTO `user_info`(`fio`, `account`, `living_space`, `occupancy`, `adress`, `telefone`, `mobile`, `email`, `icq`, `password`, `password_temp`, `status`)
VALUES ('"
.mysql_real_escape_string($data[3])."', '$data[2]', '', '', '$data[4]', '', '', '', '', '', '', 'user')";
}
else{
$import_user_info="UPDATE `user_info` SET `fio` = '$data[3]', `adress` = '$data[4]' WHERE `account` ='$data[2]'";
}
$res1=mysql_query($import_balans);
$res2=mysql_query($import_equipment);
$res3=mysql_query($import_meter_reading);
$res4=mysql_query($import_user_info);
if(!$res1){$r1='<div class="false">$import_balans - ошибка добавления </div>';}
if(!$res2){$r2='<div class="false">$import_equipment - ошибка добавления </div>';}
if(!$res3){$r3='<div class="false">$import_meter_reading - ошибка добавления </div>';}
if(!$res4){$r4='<div class="false">$import_user_info - ошибка добавления </div>';}
}
}


echo '<br>'.$r1.'<br>'.$r2.'<br>'.$r3.'<br>'.$r4.'<br>Импорт завершен...';




Спустя 3 минуты, 2 секунды (31.07.2012 - 15:08) DarkLynx написал(а):
никакого форматирования, Вы сами то разбираетесь в этой стене текста?
Именно стене!!!

Спустя 35 минут, 21 секунда (31.07.2012 - 15:43) Strannik написал(а):
Цитата (DarkLynx @ 31.07.2012 - 16:08)
никакого форматирования, Вы сами то разбираетесь в этой стене текста?
Именно стене!!!

разложил код по строкам для лучшего понимания.

Спустя 1 час, 12 минут, 37 секунд (31.07.2012 - 16:56) DarkLynx написал(а):
$import_equipment
$import_meter_reading

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

Это что первое в глаза бросилось.

Спустя 32 минуты, 24 секунды (31.07.2012 - 17:28) inpost написал(а):
DarkLynx
Про форматирование я лично давал ссылку и говорил, чтобы человек использовал один из стилей программирования адекватных...

Strannik
Ну сколько можно одно спрашивать?

Спустя 2 часа, 15 минут, 12 секунд (31.07.2012 - 19:43) Strannik написал(а):
inpost
не одно) предудущая тема по данному запросу была здесь, но там здесь дамп больше, и там не было тебя=)

если не сложно брось ссылку еще раз пожалуйста.

Спустя 1 минута, 33 секунды (31.07.2012 - 19:45) Strannik написал(а):
Цитата (DarkLynx @ 31.07.2012 - 17:56)
$import_equipment
$import_meter_reading

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

Это что первое в глаза бросилось.

к сожалению там тоже нужна проверка data2



Я почему спросил то - полный дамп занимает почти 20 часов, а это очень нехорошо...

Спустя 30 минут, 52 секунды (31.07.2012 - 20:16) inpost написал(а):
Я говорю о стиле кодирования.

Спустя 37 минут, 32 секунды (31.07.2012 - 20:53) Strannik написал(а):
Цитата (inpost @ 31.07.2012 - 21:16)
Я говорю о стиле кодирования.

если это как то ускорит мой скрипт, сбрось ссылку пожалуйста.

Спустя 40 минут, 5 секунд (31.07.2012 - 21:33) DarkLynx написал(а):
Цитата (Strannik @ 31.07.2012 - 17:45)
Цитата (DarkLynx @ 31.07.2012 - 17:56)
$import_equipment
$import_meter_reading

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

Это что первое в глаза бросилось.

к сожалению там тоже нужна проверка data2



Я почему спросил то - полный дамп занимает почти 20 часов, а это очень нехорошо...

У тебя нету ограничения времени на выполнение скрипта? Или я что то не догоняю...

Спустя 2 часа, 8 минут, 33 секунды (31.07.2012 - 23:42) inpost написал(а):
Strannik
Это ускорит его понимание. В каше никто не захочет разбираться, кроме уж тех, кому тем более делать нечего...

Спустя 1 день, 10 часов, 18 минут, 14 секунд (2.08.2012 - 10:00) Strannik написал(а):
DarkLynx
ограничение есть, просто время поставили большое. речь не об этом-просто хочу понять можно ли увеличить скорость работы скрипта, оптимизировав скрипт или может возможно увеличить скорость работы сервера.

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

Спустя 11 минут, 45 секунд (2.08.2012 - 10:12) kamanch написал(а):
Не копался в коде, расскажу, что я делал с такими монстрами в 200к строк, при условии, что это не на один раз.

1. Писал десктопную софтину, которая переворачивала мне этот csv в дамп sql.
2. По ftp льем полученный dump.sql на сервер.
3. Через ssh разворачиваем его в базе mysql.
4. Работаем уже чисто с базой.

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

Спустя 4 минуты, 21 секунда (2.08.2012 - 10:16) Strannik написал(а):
kamanch
допустим перевернуть csv в дамп sql можно и средствами php(можно распарсить и сделать sql файл), ровно как и его заливку. а что ты имеешь ввиду под пунктом 3(Через ssh разворачиваем его в базе mysql)?

допустим такая ситуация, я все сделал залил(создал) sql файл на серваке, а как быть дальше?

Спустя 5 минут, 36 секунд (2.08.2012 - 10:22) kamanch написал(а):
Качаем Putty, конектимся к серверу.
В терминале пишем:
mysql --user=USER_NAME --pass=PASSWORD --host=HOST_NAME --default-character-set=utf8  DB_NAME < dump.sql

Спустя 1 день, 14 часов, 20 минут, 17 секунд (4.08.2012 - 00:42) Strannik написал(а):
kamanch
спасибо. буду пробовать.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.