![]() |
|
![]() ![]() ![]() |
|
ihb0 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 29.4.2008 Репутация: нет Всего: нет |
Добрый день.
Вопрос такого плана. Пользователи обмениваются личными сообщениями(ЛС). ЛС хранятся в БД, в таблице ЛС имеем, помимо прочего, поля owner_id и created_at. Как лучше реализовать лимиты на кол-во сообщений от пользователя в единицу времени? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
ihb0, а зачем лимиты? Для предотвращения спама? Спамеров должен банить модератор по заявке других пользователей (кнопка "пожаловаться на спам")
Для предотвращения совсем уж идиотского спама - можно смотреть на время последнего отправленного сообщения (хранить в данных пользователя) и если отсылка идет очень часто - говорить что-то неприличное и пусть ждет. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Я бы, конечно, сделал так, как посоветовал ksnk, но если ставить задачей именно лимит сообщений в единицу времени, то только хранить время каждого сообщения и каждый раз проверять.
Если в таблице хранится время для всех сообщений, то (сколь помню синтаксис SQL):
1000 здесь - время за которое проверяется количество сообщений. Если почему-либо нельзя хранить время для каждого сообщения, то для хранения времени сообщений составляется отдельная таблица из которой периодически (а то и при каждом обращении) убираются устаревшие записи. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Проверять, что за требуемый диапазон времени количество сообщений менее установленного лимита. Иначе отказывать. В любом случае это отдельный запрос к БД - никуда не деваться. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
ihb0 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 29.4.2008 Репутация: нет Всего: нет |
В целом у меня аналогичные мысли, но назвать это изящным и правильным решением я не могу. Слишком высокая нагрузка на БД предполагает быть для такого минорного функционала.
А лимиты - для предотвращения спама в его проявлениях(как часть функционала). Будем подумать. Спасибо. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
ihb0, думаю, если хранить время в отдельной таблице и убирать "устаревшие" записи, нагрузка может быть и поменьше.
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Ну так вынеси эту логику на сервер, какие проблемы-то? а статистику там вообще можно кэшировать. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Если послать личное сообщение может только зарегистрированный пользователь, то можно просто хранить информацию о времени последнего отправленного сообщения в сессии. Да и количество, вероятно, тоже. Тогда обычной задержки между сообщениями может хватить. В базу можно не лазить.
А вот авторизация-реавторизация со сбросом сессии (очисткой кук) - должна быть как-то отдельно отработана. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |