За последние 24 часа нас посетили 54008 программистов и 1714 роботов. Сейчас ищут 802 программиста ...

Не обновляет большую базу.

Тема в разделе "PHP и базы данных", создана пользователем 715kg, 15 сен 2013.

  1. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Здравствуйте. Такая проблема, есть Cron файл) Такого вдида

    Код (Text):
    1. $servers = dbquery("SELECT * FROM amx_servers");
    2. while($r=dbarray_fetch($servers)) {
    3. list( $aipi_adr_obrez, $port_adr ) = explode(':', $r[server_ip]);
    4. $ipv4 = gethostbyname($aipi_adr_obrez);
    5. $serv=serverInfo("$ipv4:$port_adr");
    6.  
    7.  
    8. //Определение когда снивать VIP у серверов
    9. $vip_proverka = dbquery("SELECT * FROM amx_servers WHERE `server_id`='".$r['server_id']."'");
    10. $vip_check=dbarray_fetch($vip_proverka);
    11. $vip_times = date('Y-m-d G:i:s');
    12. if($vip_times >= $vip_check['vip_time']){
    13. $vip_zapis_robokassa = dbquery("UPDATE `amx_servers` SET
    14.                 `server_vip`='0',
    15.                 `vip_time`='0'
    16.                 WHERE `server_id`='".$r['server_id']."'");
    17. }else{
    18. }
    19.  
    20.  
    21. if($serv['status']==''){
    22. }else{
    23. $proverka_map = dbquery("SELECT * FROM amx_mapsdownload WHERE `map_name`='".$serv['map']."' AND `version`='".$serv['version']."_".$serv['game']."' "); //Вывод
    24.     if (mysql_num_rows( $proverka_map) == 0)
    25.     {
    26. $result_map = mysql_query("INSERT INTO amx_mapsdownload (`map_name`, `version`) VALUES ('".$serv['map']."', '".$serv['version']."_".$serv['game']."')");
    27. }
    28. }
    29.  
    30.  
    31.  
    32. //Сбор информации
    33. if($serv['status']==''){
    34. $result = dbquery("UPDATE amx_servers
    35.     SET
    36.         `server_name`='Server Is OFF Line',
    37.         `server_status`='0',
    38.                 `server_map`='',               
    39.         `server_players`='0',
    40.         `server_maxplayers`='0'
    41.     WHERE server_id='".$r['server_id']."'");
    42. continue;}
    43. $name_filtered_server = name_filtered($serv['name']); //Фильтр данныйх
    44. $name = addslashes($name_filtered_server); //Хэш данных фильтрация.
    45. $result = dbquery("
    46. UPDATE amx_servers
    47.   SET
    48. server_name = '".$name."',
    49.     server_map = '".$serv['map']."',
    50.     server_windows = '".$serv['os']."',
    51.     server_ping = '".$serv['ping']."',
    52.     server_players = '".$serv['players']."',
    53.     server_game='".$serv['version']."_".$serv['game']."',
    54.     server_maxplayers = '".$serv['max_players']."',
    55.     server_vac = '".$serv['vac']."',
    56.     server_status = '1'
    57.    WHERE server_id='".$r['server_id']."'
    58. ");
    59. if($result) {echo "<font color='green'>Даные сервера с порядковым ".$r['server_id']." внесены в базу данных</font>";} else {echo "<font color='red'><b>Ошибка</b>, данные сервера с порядковым ".$r['server_id']." не были внесены в БД</font>";}
    60. echo "<br>";
    61. }
    62. $date_proverka = date("d-m-Y: G:i:s",time()); // запоминаем дату
    63. $result = dbquery("UPDATE amx_servers SET server_date_cron = '".$date_proverka."'");

    Раньше он обновлял информацию в базе данных.

    Сейчас же в базе околок 19 000 записей. И он просто не хочет онбновлять их. Идет обновления, потом система пишет что ответ не получен и не чего не обновляется. Подскажите, как решить для такой большой базы:?
     
  2. Ke1eth

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

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    19000 записей это не много и не повод спотыкаться, если это вызывает проблему, то повод задуматься: а правильно ли я поступаю?
    Сильно не всматривался, но то, что дважды выбирается из одной и той же таблицы, сначала все, а потом "цучуть" - это странно.
     
  3. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    На этой строке, наверное
    Код (PHP):
    1. $result = dbquery("UPDATE amx_servers SET server_date_cron = '".$date_proverka."'"); 
    ? Это действительно необходимо обновлять дату проверки во всех записях? Недавно замечал, что UPDATE работает очень медленно даже для 2-3 записей, а тут 19K.
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    +
    в SQLite тоже заметил с запуском бд sqlite_open()
    c SQLiteDatabase() скорость обновление заметно увеличилась

    Добавлено спустя 22 секунды:
    PDO не пробывали?
     
  5. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Убрал этот запрос, все равно базу не обновляет.

    PDO не пробовал. Да и не пойму как. Чет мудрено там все.

    Добавлено спустя 14 минут 37 секунд:
    Хотя, убрав запрос

    Код (Text):
    1. $result = dbquery("UPDATE amx_servers SET server_date_cron = '".$date_proverka."'");  
    И сделав его таким


    UPDATE amx_servers
    SET
    server_name = '".$name."',
    server_map = '".$serv['map']."',
    server_windows = '".$serv['os']."',
    server_ping = '".$serv['ping']."',
    server_players = '".$serv['players']."',
    server_game='".$serv['version']."_".$serv['game']."',
    server_maxplayers = '".$serv['max_players']."',
    server_vac = '".$serv['vac']."',
    server_date_cron = '".$date_proverka."',
    server_status = '1'
    WHERE server_id='".$r['server_id']."'
    ");

    ---------------------------------------------------
    Все пошло обновляться. Спасибо большое. Но все же думаю переделать файл крона. Ведь значений в базе все больше и больше