Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Лимит личных сообщений |
Автор: ihb0 28.5.2014, 21:18 |
Добрый день. Вопрос такого плана. Пользователи обмениваются личными сообщениями(ЛС). ЛС хранятся в БД, в таблице ЛС имеем, помимо прочего, поля owner_id и created_at. Как лучше реализовать лимиты на кол-во сообщений от пользователя в единицу времени? |
Автор: ksnk 28.5.2014, 21:30 |
ihb0, а зачем лимиты? Для предотвращения спама? Спамеров должен банить модератор по заявке других пользователей (кнопка "пожаловаться на спам") Для предотвращения совсем уж идиотского спама - можно смотреть на время последнего отправленного сообщения (хранить в данных пользователя) и если отсылка идет очень часто - говорить что-то неприличное и пусть ждет. |
Автор: _Y_ 29.5.2014, 07:54 | ||
Я бы, конечно, сделал так, как посоветовал ksnk, но если ставить задачей именно лимит сообщений в единицу времени, то только хранить время каждого сообщения и каждый раз проверять. Если в таблице хранится время для всех сообщений, то (сколь помню синтаксис SQL):
1000 здесь - время за которое проверяется количество сообщений. Если почему-либо нельзя хранить время для каждого сообщения, то для хранения времени сообщений составляется отдельная таблица из которой периодически (а то и при каждом обращении) убираются устаревшие записи. |
Автор: Akina 29.5.2014, 09:39 |
Проверять, что за требуемый диапазон времени количество сообщений менее установленного лимита. Иначе отказывать. В любом случае это отдельный запрос к БД - никуда не деваться. |
Автор: ihb0 29.5.2014, 18:06 |
В целом у меня аналогичные мысли, но назвать это изящным и правильным решением я не могу. Слишком высокая нагрузка на БД предполагает быть для такого минорного функционала. А лимиты - для предотвращения спама в его проявлениях(как часть функционала). Будем подумать. Спасибо. |
Автор: _Y_ 29.5.2014, 18:40 |
ihb0, думаю, если хранить время в отдельной таблице и убирать "устаревшие" записи, нагрузка может быть и поменьше. |
Автор: ksnk 29.5.2014, 20:40 |
Если послать личное сообщение может только зарегистрированный пользователь, то можно просто хранить информацию о времени последнего отправленного сообщения в сессии. Да и количество, вероятно, тоже. Тогда обычной задержки между сообщениями может хватить. В базу можно не лазить. А вот авторизация-реавторизация со сбросом сессии (очисткой кук) - должна быть как-то отдельно отработана. |