БД на виртуальном выделеной сервере. Задача организовать постояное добавление информации. Что если в БД (именно в одну таблицу) будет постояно добавлятся около 1000 записей в минуту? Чем грозит для БД? Как избежать "#1194 - Table 'data' is marked as crashed and should be repaired " ?
каждый день таблица будет очищатся и наполнятся по новой (новыми, актуальными данными) всего за день в таблицу будет добавлено 1 000 000 записей
Вот поставил счас в крон на каждую минуту добавление по 60 записей (по 1 записи в секунду). За минут 7-8 сервер повис. Сможет ли помочь увеличение частоты процесора и памяти ? Сейчас виртуальный выделеный:процессор 300 МГц , памяти 64 метра.
А как вообще можно добавить в таблицу большое количество данных без напряга для сервера? Надо записывать около 5000 записей (размером 236 Bytes * 5000) в минуту. Как правильно организовать все это?
Вроде не сложный скрипт, а "ложит" сервер Запускаю его в кроне раз в каждую минуту PHP: <?php print date("H:m:i")."<br>"; include ("connect"); set_time_limit(3600); $code_firma=63; $sql_page=mysql_query("select * from url where code_firma=$code_firma and code_new=1 limit 60 "); $kilk_page=mysql_num_rows($sql_page); //$kilk_page=1; $sql_firma=mysql_query("select * from firma where code_firma=$code_firma"); $firma=mysql_fetch_array($sql_firma); $url_firma=$firma[3]; $main_url=str_replace('http://www.','',$url_firma); $main_url_regular=str_replace('.','\.',$main_url); for ($k=0;$k<$kilk_page;$k++) { $page_data=mysql_fetch_array($sql_page); $page=file_get_contents("$url_firma/$page_data[1]"); //$page=file_get_contents("4.htm"); //begin url $kilk_url=preg_match_all("/href=\"(http:\/\/(www\.)?$main_url_regular\/)?(.*)\"/isU",$page,$url)."<br>"; for ($i=0;$i<$kilk_url;$i++) { $url_page=preg_replace("/http:\/\/(www\.)?$main_url\//","",htmlentities($url[3][$i])); if ((substr_count($url_page,'http')>0) or (strlen($url_page)==0) or (substr_count($url_page,'javascript')>0) or (substr_count($url_page,'#')>0)) {} else { $arr_page[]=$url_page; } } //mysql_query("update url set code_new=0 where name_url like '$page_data[1]' "); //end url //begin data print $page_data[1]."<br><br><br>"; print $kilk_data=preg_match_all("$firma[9]",$page,$data)."<br>"; $regular_next=$firma[10]; for ($m=0;$m<$kilk_data;$m++) { for ($k=0;$k<strlen($regular_next);$k++) { print $data[$regular_next[$k]][$m]."<br>"; } $name_data=$data[$regular_next[0]][$m]; $url_data=$data[$regular_next[1]][$m]; $url_img=$data[$regular_next[2]][$m]; $coment=$data[$regular_next[3]][$m]; $cina=$data[$regular_next[4]][$m]; mysql_query("insert into `data_index` values ('0','$name_data', '$url_data', '$url_img', '$coment', '$cina', '$code_firma')"); //name_data, url_data, url_img, coment, cina } if ($kilk_data>0) { mysql_query("update url set code_page_data=1 where name_url like '$page_data[1]' "); } //end data } print count($uniq_page=array_unique($arr_page))."<br>"; foreach($uniq_page as $value) { //print $value."<br>"; if (mysql_num_rows(mysql_query("select code_url from url where name_url like '$value' "))==0) { mysql_query("insert into url values ('','$value','$code_firma','0','1')"); } } print date("H:m:i")."<br>"; //print_r ($url); ?> На том же сервере работают скрипты закачки xml весом в несколько мегабайт и по 20 000 записей и без проблем за минут 7-8 такой xml заливается
joost попробуй сначала формировать данные в xml, а потом уже заливать в базу. имхо, сервер кладется именно запросами к внешним сайтам и обработкой данных.
DarkElf ты прав. увеличил частоту процесора до 600 - загрузка всеравно 100% память тоже увеличил - теперь ее жрет 30 % (раньше было тоже 100%) что же делать?
joost У Яндекса спроси Вообще, за такое издевательство над сервером могут и с хостинга попросить. Что делаешь-то? Свой поисковик?
Dagdamor чтото типа тематического поисковика (но это громко сказано) скрипт собирает цены интернет-магазинов. простой грабер - не более.
joost Может, тогда не стоит так торопиться со сбором данных? Обработал 50 адресов - сделал паузу, скушал твикс потом продолжил. Паузы лучше делать через JS, на стороне клиента (админки).
Dagdamor а если адресов 400 000 ? и каждые сутки надо обновлять. немного поексперементировал - вроде как PHP: array_unique все тормозит. может такое быть?
Разве никто не делает граберов? Как решаете проблему с нагрузкой при большом количестве внешних вызовов file_get_contents?