gr1nader

gr1nader
Рейтинг
20
Регистрация
26.10.2012

ivan-lev, спасибо както не подумал об этом сразу об CURLOPT_TIMEOUT, качает все наживую и выдает, кешированием сейчас занимаюсь

Взял у ребят деда по приватному предложению, неделя полет супер, после установки деда, которая заняла минут 20-30, выяснилось что скорость канала ниже средней, без споров и вопросов поменяли на другого деда с другого узла, вобщем доволем на 5+.

Заказал хостинг в УА, все отлично, всем доволен, будем работать и дальше.

sg552:
господа, а только меня смутило название функции? че вы уперлись в базу. Откуда берутся данные о пользователях? Где лежит инфа? Смею предположить, что инфа дергается курлом, а раз так - то нечего удивляться в плане 2х и более минут. Открыть коннект, получить данные, закрыть коннект. А если донор ещё и подтупливает, то вот вам и результат

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

siv1987:


100K строк и автоинкремент на 40K, это как?
Почему UNIQUE а не PRIMARY?

старый дамп кидал, поправил на новый для ясности.

---------- Добавлено 12.06.2013 в 00:51 ----------

siv1987:
Без индекса на username... 100K записей... Зачем так жить?!
Индекс запилите, вы же видите что поиск происходит по этому поле, и несколькими тысяч запросов сразу. Не удивительно тогда что скрипт отрабатывает по несколько минут.

всмысле колонку id убрать? не понял..

siv1987, вот структура если это вы имели ввиду:

CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`active` varchar(10) DEFAULT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=100568;
e-art:
не обязательно обнулять всех. обнулить надо только тех, у кого был activ=1. может быть это будет быстрее чем пробегать по всем строкам и сравнивать id с активным.

тормоз не на

" UPDATE users SET `activ` = 0;"
это происходит мгновенно, а именно потом на "
foreach ($good as $id){
$query = "UPDATE users SET `activ` = '1' WHERE `username` = '$id'";
mysql_query($query) or die ("Error in query: $query");
}

т.е пока пробежит по всей базе и проставит "1" у всех кто из масива $good

siv1987, обычно около 1-2% активных но разных, всетаки склоняюсь к решению моему второму :

foreach ($good as $id){
$query = "UPDATE users SET `activ` = '1' WHERE `username` = '$id'";
mysql_query($query) or die ("Error in query: $query");
}
foreach ($good as $id){
$query = "UPDATE users SET `activ` = '0' WHERE `username` <> '$id'";
mysql_query($query) or die ("Error in query: $query");
}

но почемуто проставляются "0" в актив, не страшно если какоето время в базе будут активные с прошлой и с текущей проверки вместе, а в течении 1-2 минут проставятся нули у неактивных по последней проверки, страшнее когда в базе у всех "0" в активе а потом по возрастающей.

siv1987, сложно объяснять происодит ряд подключений к сторонним серверам, но может не пару но минуту точно и это после переезда на дедик, на впс реально занимало минуты 2-3

вот код проверки:

функция multicurlcheck своя производит саму проверку:

$good = array();
$cnt = count( $all_users) / 500;
for( $i = 0; $i < $cnt; $i++ )
$good = array_merge( $good, multicurlcheck( $location, array_slice( $all_users, $i * 500, 500 ), 10 ) );

globalmoney, какой ЦОД?

Всего: 186