Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ограничение публикуемых комментариев

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Еугений
Отправлено: 18 Августа, 2014 - 20:43:57
Post Id


Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Апр. 2011  


Помог: 1 раз(а)




Всем привет. Хочу поставить ограничение на количество публикуемых материалов Например, нельзя публиковать более 20 комментов в час, более 10 постов в час и тд. Как такое можно реализовать получше? У меня есть идея перед публикацией проверять запросом, например, комментарии: select id from comments where id_author=25 and data > subway(now(), interval 1 hour) order by id desc limit 20,1. Далее считаем количество найденых комментов. Если ноль-значит можно публиковать. Это конечно того не стоит- большая нагрузка, да и комменты на сайте оставляют только зарегистрированные так что наверно не буду так делать Но если вдруг действительно будет важно ограничить?
 
 Top
OrmaJever Модератор
Отправлено: 18 Августа, 2014 - 20:59:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




я бы считал количество комментариев за час и если их уже 20 то выводил бы ошибку
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT count(id) FROM comments WHERE id_author=25 AND DATA > now() - INTERVAL 1 HOUR


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Мелкий Супермодератор
Отправлено: 18 Августа, 2014 - 21:04:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Еугений пишет:
большая нагрузка

Где? По составному ключу id_author & data проверка стоить ничего не будет.
А с учётом сущности - пишут значительно, на порядок-другой, меньше, чем читают - это нормальное, не избыточное решение.


-----
PostgreSQL DBA
 
 Top
Еугений
Отправлено: 18 Августа, 2014 - 21:33:17
Post Id


Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Апр. 2011  


Помог: 1 раз(а)




Спасибо за ответы. Я тут подумал, если не ставить ограничения, то любой хакер или бот может выложить по несколько тыщ постов, нагрузив бд. Понимаю,вероятность этого крайне мала, но так жалко делать все время проверку, есть ли еще способы, похитрее?
(Добавление)
Мелкий пишет:
Еугений пишет:
большая нагрузка

Где? По составному ключу id_author & data проверка стоить ничего не будет.
А с учётом сущности - пишут значительно, на порядок-другой, меньше, чем читают - это нормальное, не избыточное решение.

На каждую таблицу вешать составной ключ - а они много места занимают? И еще вопросик. Если уже стоит индекс на id_author, надо ли его удалить, если я хочу сделать составной data&id_author?
 
 Top
OrmaJever Модератор
Отправлено: 19 Августа, 2014 - 00:00:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




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

чисто теоретически возможно слать по несколько десятков запросов в секунду для отправки комментария, но поверьте мне никто так делать не будет когда поймёт что ограничение в 20 постов в час. Если захотят сделать вам нагрузку то найдут более подходящую страницу типа поиска


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Мелкий Супермодератор
Отправлено: 19 Августа, 2014 - 10:04:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Еугений пишет:
способы, похитрее?

https://ru.wikipedia.org/wiki/KISS_(принцип)

Еугений пишет:
а они много места занимают?

Зависит от типа и количества данных. int - 4 байта, datetime - 8, значит будет 12 байт на строку.

Еугений пишет:
стоит индекс на id_author, надо ли его удалить

Правильнее будет ответить так: http://www[dot]ozon[dot]ru/context/detail/id/6573935/

Еугений пишет:
хочу сделать составной data&id_author?

Зачем?


-----
PostgreSQL DBA
 
 Top
Еугений
Отправлено: 19 Августа, 2014 - 16:02:00
Post Id


Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Апр. 2011  


Помог: 1 раз(а)




Еугений пишет:
хочу сделать составной data&id_author?

Зачем?[/quote]
но ведь ты сам написал, выборка по составному data & id_author ничего не будет стоить
 
 Top
Мелкий Супермодератор
Отправлено: 19 Августа, 2014 - 16:36:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Нет, я написал, что выборка по ключу id_author & data ничего не будет стоить.
Порядок значений имеет определяющую важность.


-----
PostgreSQL DBA
 
 Top
Еугений
Отправлено: 19 Августа, 2014 - 17:20:01
Post Id


Частый гость


Покинул форум
Сообщений всего: 176
Дата рег-ции: Апр. 2011  


Помог: 1 раз(а)




Ааа... Я тут нагуглил, если делать составной (a,b) то b не индексируется, то есть Where b = '123' будет не по индексу, а выборка будет быстрой только по a и по a^b. И еще 'a' должен быть такой столбец, где меньше вариантов значений - так будет быстрее. Значения столбца id_author иногда будут повторятся , а data всегда уникальна. Ты это имел ввиду?

(Отредактировано автором: 19 Августа, 2014 - 17:30:05)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB