@skyfly2010

Как оптимизировать скрипт?

Добрый день, господа. Есть вопрос. В общем, есть магазин комплектующих для компьютеров. Был написан не известно кем и не известно когда.
Задача, следующая: "оптимизировать скрипт подгрузки товаров с сайтов партнеров".
Имеем: специальный скрипт, который парсит данные с сайта-партнера и забрасывает их в csv-файл.
Затем данные из этого файла подгружаются в БД.
Если данный пункт списка уже имеется, то делается апдейт.
Если такого пункта нет, то делается инсерт.

Все бы ничего, вот только подгружать приходится до 15000 товарных позиций. На данный момент часто выполнение скрипта занимает до получаса. Насколько я понимаю, на 1 товарную позицию приходится по 2 запроса. 1 select (проверка наличия в таблице товара) 1 insert (или update).

Может кто-то сталкивался с подобными ситуациями, подскажите как разрулить ситуацию.

Ниже привожу имеющийся на данный момент код:
if (trim($filename) === 'file.csv') {
			$requestHeaders = array(
				'Content-type: application/x-www-form-urlencoded'
			);
			$tmpfname = 'price/cookie.txt';
			$file = 'путь к файлу';
			$f = fopen($file, 'w');
			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, 'тут урл сайта');
			curl_setopt($ch, CURLOPT_USERPWD, $user . ":" . $pass);
			curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders);
			curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3');
			curl_setopt($ch, CURLOPT_COOKIEJAR, 'price/cookie.txt');
			curl_setopt($ch, CURLOPT_COOKIEFILE, 'price/cookie.txt');
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
			curl_setopt ($ch, CURLOPT_POST, true);
			curl_setopt ($ch, CURLOPT_POSTFIELDS, '-----');
		    curl_setopt($ch, CURLOPT_HEADER, false);
		    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
			curl_exec($ch);
			curl_setopt($ch, CURLOPT_URL, 'тут у нас адрес');
			curl_setopt ($ch, CURLOPT_POST, true);
			curl_setopt ($ch, CURLOPT_POSTFIELDS, 'priceRezerv=on&priceTranzit=on&pricePriemka=on&formula=x');
			curl_setopt($ch, CURLOPT_FILE, $f);
			curl_exec($ch);
			mysql_connect("localhost", "user", "000000");
			mysql_select_db("pokupki");
			$sql9999 = "update `catalog_3` set `available`=0, `price_basic`=0";
			mysql_query($sql9999) or die('Errors : ' . mysql_error());
			$handle = fopen ("тут url файла","r");
			$ch = 0;
			$ch1 = 0;
			while ($data = fgetcsv ($handle, 1000, ";"))
			{
					$n = 0;
					$sql2 = mysql_query("select id from `catalog_3` where id = ".$data[0]."");
					while ($row = mysql_fetch_assoc($sql2)) {
						$n =1;
					}
					if ($n == 0) {					
						$sql = "INSERT INTO `catalog_3` (`category`, `category_name`, `subcategory`, `id`, `name`, `price_basic`, `available`, `id_1z`, `pars_onliner`, `garanty`) VALUES ('','".addslashes($data[3])."','','".$data[0]."','".addslashes($data[1])."','".str_replace(',', '.',$data[2])."','1','','','".$data[4]."')";
						mysql_query($sql) or die('Errors : ' . mysql_error().$sql);
						$ch++;
					} else {
						$sql = "update `catalog_3` set `available`=1, `price_basic`=".str_replace(',', '.',$data[2])." where id=".$data[0];
						mysql_query($sql) or die('Errors : ' . mysql_error().$sql);
						$ch1++;
					}
			}
			fclose ($handle);
			echo $ch."-".$ch1.'<br>';
		}
  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
DmitryVoronkov
@DmitryVoronkov
Python Developer
INSERT INTO `table` (`category`, `category_name`, `subcategory`) VALUES('category', "category", ) ON DUPLICATE KEY UPDATE    
name="category", age='example'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы