Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Крон или что-то в этом духе  (Прочитано 16188 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Сергей Добросклонов
Постоялец

ru
Offline Offline
Пол: Мужской

« : 29-11-2010 21:51 » 

На странице есть код, который ставит всем пользователям статус "не в сети", если пользователь не проявлял активности определённое время. Но это очень сильно будет нагружать сервер. Я знаю, что по этой причине умные люди делают скрипт, который запускается через заданное количество времени. Что-то слышал про какой-то крон... Но что-то точно понять что это вообще не смог. Где-то вычитал, мол крон только на Линуксе, а на Виндовсе что-то другое используется... Помогите разобраться с этим вопросом.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 29-11-2010 22:11 » 

Интересно, а сколько у тебя пользователей в онлайне одновременно могут находится. Что простой запрос к одной таблице базы данных на удаление слишком накладно?
Уточни точно, какая ОС тебя все таки интересует?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 29-11-2010 22:43 » 

Барин, я бы еще попросил не глотать фразы. Определенно есть ощущение, что больше половины сказанного не попало в текст.

Как всегда предлагаю плясать от печки. Т.е. он требуемого результата. И перечислить входные условия.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #3 : 30-11-2010 07:54 » 

Барин, почему ты думаешь, что это будет нагружать сервер? В простейшем случае это делается одним SQL-запросом и вполне может быть включено в код странички, на мой взгляд.
Вместо cron на Windows используется чаще всего штатный Task Scheduler, но если можно сделать без него - лучше сделать без него Улыбаюсь
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Сергей Добросклонов
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 30-11-2010 10:37 » 

RXL, я перечитал текст и не нашёл, ни одной обрубленной фразы... А вот твоя фраза меня вынесла:
больше половины сказанного не попало в текст.
Как сказанное не попало в текст, если оно уже сказанное?
Или вот это:
Т.е. он требуемого результата.
Кто он?
RXL, не думай, что мне захотелось устроить барагоз, я человек мирный, но просто  я заметил, что большинство пользователей по существу отвечают, а ты всегда начинаешь с каких-то колкостей. Но в этот раз я реально не понял сути первой фразы... Надеюсь, к этому возвращаться больше не будем.
Попытаюсь подробнее объяснить ситуацию. Сервер к меня на Виндовсе, пока, что просто локальный. Допустим, у меня миллион пользователей. На каждой странице моего сайта есть блок вот с таким кодом:
Код:
$new_timestamp=time();
$set_offline=mysql_query("UPDATE users SET status='offline', timestamp='0', online_time='0' WHERE status='online' AND (timestamp + $timeoutseconds)<$new_timestamp",$db);
Я не знаю как будет поживать база, если при каждом переходе на другую страницу каждого пользователя будет выполняться этот запрос. Думаю, это накладно. Поэтому я хочу убрать этот код со страницы и "повесить" обязанность пересчёта пользователя на сервер, который будет только через заданные промежутки времени выполнять эти операции. Если же это для базы пустяки, я буду только рад и оставлю всё как есть. Надеюсь, сейчас всё понятно изложил.
Записан
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #5 : 30-11-2010 10:41 » 

Барин, о понятии, сессия, что нибудь слышал?
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 30-11-2010 11:02 » 

На странице есть код, который ставит всем пользователям статус "не в сети", если пользователь не проявлял активности определённое время. Но это очень сильно будет нагружать сервер. Я знаю, что по этой причине умные люди делают скрипт, который запускается через заданное количество времени. Что-то слышал про какой-то крон... Но что-то точно понять что это вообще не смог. Где-то вычитал, мол крон только на Линуксе, а на Виндовсе что-то другое используется... Помогите разобраться с этим вопросом.
На странице есть код, который ставит всем пользователям статус "не в сети", если пользователь не проявлял активности определённое время.

На странице нет такого кода, такой код - в серверном скрипте.
Но это очень сильно будет нагружать сервер. 
Откуда дровишки?
Я знаю, что по этой причине умные люди делают скрипт, который запускается через заданное количество времени.
Если можно, то ссылку  на умных людей. Вроде мы и сами не дураки Жаль

Что-то слышал про какой-то крон... Но что-то точно понять что это вообще не смог. Где-то вычитал, мол крон только на Линуксе, а на Виндовсе что-то другое используется...
Про крон написано так много, что это не просто ГДЕ-ТО. И вообще про Планировщики очень много написано

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Сергей Добросклонов
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 30-11-2010 11:34 » 

Барин, о понятии, сессия, что нибудь слышал?
Слышал, использую.
Цитата
На странице нет такого кода, такой код - в серверном скрипте.
index.php - это разве не страница?
Цитата
Если можно, то ссылку  на умных людей. Вроде мы и сами не дураки Жаль
Ссылки нет, просто при поиске ответов натыкался на такую информацию
Цитата
Откуда дровишки?
Если я ошибаюсь, просто исправьте меня. Если это не так, то я только рад буду и не стану ничего переделывать
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 30-11-2010 11:43 » 

index.php - это разве не страница?

Не страница, а серверный скрипт, который "отдает" страницу.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #9 : 30-11-2010 12:00 » 

Слышал, использую.

Ну так и зачем тогда тебе при каждом переходе на соседние страницы "лазить" в базу? Проверяй сессию, после того как она "умерла" (отключился пользователь или тайм-аут или еще что то), обновляй базу, выставляй значение не в сети.
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 30-11-2010 12:38 » 

Барин, колкости? Тебе показалось. А предложение писать внятно было.
Давай я тебе процитирую твой пост с разбором по смысловым частями, как это видно со стороны, и увидишь, почему я считаю, что тут много проглоченных фраз.

Цитата
На странице есть код, который ставит всем пользователям статус "не в сети", если пользователь не проявлял активности определённое время.

"Код на странице" - что ты под этим имел в виду? Код на клиентской стороне или на серверной?
"ставит всем пользователям статус" - это, наверно, какая-то индикация статусов пользователей на странице?
Как видишь, приходится домысливать, что ты имел в виду.

Цитата
Но это очень сильно будет нагружать сервер.

Что - "это"? Опять домысливаю: вероятно, таки у тебя программа на серверной стороне. А вот почему оно должно нагружать сервер? Ты же ничего о методике определения статуса не написал.

Цитата
Я знаю, что по этой причине умные люди делают скрипт, который запускается через заданное количество времени.

Без объяснений, зачем это надо и как это считаешь, переходишь к планировщику по времени.

Цитата
Что-то слышал про какой-то крон... Но что-то точно понять что это вообще не смог. Где-то вычитал, мол крон только на Линуксе, а на Виндовсе что-то другое используется... Помогите разобраться с этим вопросом.

Ну, это уже можно связать с предыдущим предложением.

Т.ч. никаких колкостей, а чистая телепатия. Вот если бы ты объяснял не обрывки мыслей, а саму задачу (как я написал выше - плясать надо от печки), то было бы проще понять и интереснее объяснять.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 30-11-2010 12:49 » 

"миллион пользователей" - это оптимистично. Хорошо бы хоть тысячу для начала. И из них за минуту запросят какую-нибудь страницу лишь несколько процентов.

Статусы рекомендую хранить в отдельной странице, а не с профилями пользователей. И не хранить по записи на каджого, а в ней должны быть только "онлайн". Задача сводится к работе с небольшой табличкой: удалению не обращавшихся на сервер некоторое время и в добавлении новых.

Код: (MySQL)
CREATE TABLE online_users
(
  user_id INT NOT NULL,
  last_activity DATETIME,
  PRIMARY KEY (user_id)
);

Для очень неплохой посещаемости в сотню за последнюю минуту можно даже не делать индекса по last_activity.

Код: (MySQL)
INSERT INTO online_users (user_id, last_activity)
VALUES ($user_id, NOW())
ON DUPLICATE KEY UPDATE SET last_activity = NOW();

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

Код: (MySQL)
DELETE FROM online_users
WHERE last_activity < NOW() - INTERVAL 15 MINUTE;

Удаляем устаревшие записи.
« Последнее редактирование: 30-11-2010 12:55 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Сергей Добросклонов
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 30-11-2010 13:09 » 

RXL, вот написал же нормальный ответ и как-то всё понял. Просто мой вывод по жизни, чем больше человек программист, тем больше он целяется к словам. Конечно, мне было бы не плохо знать какие-то вещи, но то что index.php - это не страница, а серверный скрипт, который "отдает" страницу это существенно никогда бы не подумал. Итак ясно, что php выплняет сервер... А теперь к теме. Я понял твой совет, интересная тема, но мне надо будет ещё поразбираться, чтобы понять как это будет работать. Миллион это я так, для примера.
Мне вот просто интересно, всё таки с этим миллионом и с тем что статус у меня хранится у каждого пользователя отдельно и у меня на серверном скрипте каждой страницы (на каждой php странице) есть код:
Код:
$new_timestamp=time();
$set_offline=mysql_query("UPDATE users SET status='offline', timestamp='0', online_time='0' WHERE status='online' AND (timestamp +
Это существенная нагрузка на сервер или нет?
« Последнее редактирование: 30-11-2010 13:11 от Барин » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 30-11-2010 14:16 » 

Барин, понимаешь, чтобы догадаться (не понять!) нужно время, которого мало. Т.к. проблема твоя, то задача по объяснению сути и должна быть на тебе.

Цепляться к словам - есть такое. Потому, что важны все детали: ты думаешь одно, говоришь другое, я понимаю третье, а в итоге - ничего хорошего, т.к., чаще всего, знающий ответ пройдет мимо.

Существенная. Но все относительно. Если там будет десяток-другой юзеров, то пофиг.
Представь себе базу в тысячу юзеров. Активны за период были 10. При каждом запросе страницы (не только от юзеров, но и от гостей - иначе информация будет врать) у тебя сканируются 1000 строк. А могли бы сканироваться 10, что в 100 раз быстрее.
Индексы с UPDATE на таких объемах строк малополезны, т.к. больше времени тратится на обновление индексов, чем на поиск полным сканированием. Миниатюрные таблички, типа той, что я привел выше, занимают так мало места, что при частом пользовании все время находятся в памяти. Профиля же обычно тяжеловесны и операции по чтению и обновлению будут более накладными. Кроме того, в MySQL (на хостинге все же обычно используют это СУБД) имеется возможности кешировать результаты запросов, а частые обновления рубят эту фишку на корню.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines