Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Хитрости и секреты создания сайтов


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Интернет / Хитрости и секреты создания сайтов

Выпуск № 171
от 05.12.2007, 15:35

Администратор:Ерёмин А.А.
В рассылке:Подписчиков: 457, Экспертов: 40
В номере:Вопросов: 1, Ответов: 1


Вопрос № 111637: Здравствуйте, уважаемые эксперты! У меня такой вопрос: должен быть сайт с авторизацией на основе форм + БД. Как определить кто в данный момент находится на сайте - нужен список он-лайн. С тем кто входит - понятно. Сложности начинаются с тем, ...

Вопрос № 111.637
Здравствуйте, уважаемые эксперты!
У меня такой вопрос: должен быть сайт с авторизацией на основе форм + БД. Как определить кто в данный момент находится на сайте - нужен список он-лайн.
С тем кто входит - понятно. Сложности начинаются с тем, кто когда выходит с сайта (т.к. конце-концов можно закрыть браузер, перейти на другую страницу...).
Идея следующая: отслеживать время последнего обращения пользователей, ставить таймер на странице с определнным интервалом, и если нет обращения в течение, скажем, двух интервалов - считать ушедшим.
Это реализуемо? Если да то каким образом?
Либо возможно предложить свои варианты.
Желательно ответы с примерами, хорошо бы на .Нет, великолепно, если к тому же на Си#
Отправлен: 29.11.2007, 21:32
Вопрос задал: turis (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: NiGHT
Здравствуйте, turis!

I)
Я бы хотел обратить внимание вот на какое решение, оно используется во многих форумных движках. Там есть таблица кэширования, в которую заносятся все ip, имена и время обращения. Запросы к БД делается сразу парой: удаление и добавление.
1. DELETE FROM tbl WHERE tbl.time < time()-10минут.
2. INSERT ... страница, ip, юзер, время...

на основе этой таблицы строется 2ое решение:
1. SELECT ..DISTINCT.. WHERE 1 есть последние пользователи. Так делается например на IPB. При этом 10мин задается в АдминПанеле. Кроме того можно использовать WHERE user=юзер, что бы уменьшить время выборки.
Я понимаю что это кажется безумием! мне тоже так казалось и когда я увидел это в крутом движке я долго был в шоке. Но потом дошло объяснение очень простое: дело всё в размерах таблицы. Дело в том, что на уроках по БД говорят надо экономить время, но время выполнения напрямую зависит от размеров таблицы. Поэтому делать лишний select для талицы в 5кб и для таблицы в 1мб вещи разные, при том очень сильно. Такой мелкий запрос почти не грузит систему, т.к. нужно мало памяти и времени CPU. Поэтому можно сделать 5-7 простых запросов, чем 1 гиганский. Кроме того хорошие СУБД могут оптимизировать этот процесс, уменьшив количество прогонов таблицы (индексы тоже добавят скорости). Кроме того сама таблица будет небольшой по размерам т.к. старые записи будут чиститься. Так же можно уменьшить время на select дописав LIMIT1, что заставит не перебирать всю таблицу, а ограничится первым вхождением (так же нельзя использовать операторы требующие полной выборки, например агрегатне запросы).

2. на базе этого реализуется антиDDoS. Что бы не убить БД делают проверку на количество запросов с определенного ip, если это число больше лимита. Или предидущее обращение было менее 0,5сек назад, то выдаем ошибку или надпись типа закрыто.

================================================
II) доп. запросы создадут избыточную нагрузку на сервер. Допусим пользователь ищет информацию на вашем сайте. Сам допустим ему надо совершить 5 переходов что бы найти нужное. По вашему методу к 5 запросам добавятся ещё таймерные. Что хоть как больше чем есть. Соответственно ваш трафик будет больше.
---------
Нам много не надо, лишь власти над миром, и вкусненького что-нибудь (Slayers)
Ответ отправил: NiGHT (статус: Практикант)
Ответ отправлен: 01.12.2007, 22:27


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.65 от 04.12.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное