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 :: Ограничение публикуемых комментариев
Покинул форум
Сообщений всего: 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. Далее считаем количество найденых комментов. Если ноль-значит можно публиковать. Это конечно того не стоит- большая нагрузка, да и комменты на сайте оставляют только зарегистрированные так что наверно не буду так делать Но если вдруг действительно будет важно ограничить?
OrmaJever
Отправлено: 18 Августа, 2014 - 20:59:23
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
я бы считал количество комментариев за час и если их уже 20 то выводил бы ошибку
SELECT count(id)FROM comments WHERE id_author=25 ANDDATA> now()- INTERVAL 1 HOUR
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Мелкий
Отправлено: 18 Августа, 2014 - 21:04:15
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Еугений пишет:
большая нагрузка
Где? По составному ключу id_author & data проверка стоить ничего не будет.
А с учётом сущности - пишут значительно, на порядок-другой, меньше, чем читают - это нормальное, не избыточное решение.
----- PostgreSQL DBA
Еугений
Отправлено: 18 Августа, 2014 - 21:33:17
Частый гость
Покинул форум
Сообщений всего: 176
Дата рег-ции: Апр. 2011
Помог: 1 раз(а)
Спасибо за ответы. Я тут подумал, если не ставить ограничения, то любой хакер или бот может выложить по несколько тыщ постов, нагрузив бд. Понимаю,вероятность этого крайне мала, но так жалко делать все время проверку, есть ли еще способы, похитрее? (Добавление)
Мелкий пишет:
Еугений пишет:
большая нагрузка
Где? По составному ключу id_author & data проверка стоить ничего не будет.
А с учётом сущности - пишут значительно, на порядок-другой, меньше, чем читают - это нормальное, не избыточное решение.
На каждую таблицу вешать составной ключ - а они много места занимают? И еще вопросик. Если уже стоит индекс на id_author, надо ли его удалить, если я хочу сделать составной data&id_author?
OrmaJever
Отправлено: 19 Августа, 2014 - 00:00:55
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Еугений пишет:
Я тут подумал, если не ставить ограничения, то любой хакер или бот может выложить по несколько тыщ постов, нагрузив бд. Понимаю,вероятность этого крайне мала, но так жалко делать все время проверку, есть ли еще способы, похитрее?
чисто теоретически возможно слать по несколько десятков запросов в секунду для отправки комментария, но поверьте мне никто так делать не будет когда поймёт что ограничение в 20 постов в час. Если захотят сделать вам нагрузку то найдут более подходящую страницу типа поиска
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Мелкий
Отправлено: 19 Августа, 2014 - 10:04:46
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Еугений пишет:
способы, похитрее?
https://ru.wikipedia.org/wiki/KISS_(принцип)
Еугений пишет:
а они много места занимают?
Зависит от типа и количества данных. int - 4 байта, datetime - 8, значит будет 12 байт на строку.
Покинул форум
Сообщений всего: 176
Дата рег-ции: Апр. 2011
Помог: 1 раз(а)
Еугений пишет:
хочу сделать составной data&id_author?
Зачем?[/quote]
но ведь ты сам написал, выборка по составному data & id_author ничего не будет стоить
Мелкий
Отправлено: 19 Августа, 2014 - 16:36:03
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Нет, я написал, что выборка по ключу id_author & data ничего не будет стоить.
Порядок значений имеет определяющую важность.
----- PostgreSQL DBA
Еугений
Отправлено: 19 Августа, 2014 - 17:20:01
Частый гость
Покинул форум
Сообщений всего: 176
Дата рег-ции: Апр. 2011
Помог: 1 раз(а)
Ааа... Я тут нагуглил, если делать составной (a,b) то b не индексируется, то есть Where b = '123' будет не по индексу, а выборка будет быстрой только по a и по a^b. И еще 'a' должен быть такой столбец, где меньше вариантов значений - так будет быстрее. Значения столбца id_author иногда будут повторятся , а data всегда уникальна. Ты это имел ввиду?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.