Zzepish
29.10.2013 - 19:09
Пилю антиддос. Такая дилема: запилить один SELECT запрос, потом проверку на php, потом еще один запрос (update), или все запилить одним большим sql запросом (включая вычисления)
sergeiss
29.10.2013 - 19:13
Хранимые процедуры/триггеры никак, что ли, не подходят? Это в любом случае должно быть быстрее, чем 2 запроса с промежуточной обработкой в ПХП.
Давай побольше инфы.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Zzepish
29.10.2013 - 19:27
sergeiss
ВОт таблица.
Механика такая:
идет запрос- если возвращает NULL, то пихаем данные:
ip (ip)
query_count (количество запросов за эту секунду)
ban_to(бан до)
action (когда было последнее действие- time());
Если есть уже, то проверяем! отнимаем ban_to-time(). Если больше нуля- то die, если нет, то проверяем: если action==time() то {если
query_count+1>число_запросов_в_секунду(настраивается админом) то даем бан на определенное время, записываем данные в базу и пишем die}
В противном случае просто сбрасываем счетчик query_count
Игорь_Vasinsky
29.10.2013 - 19:40
у тебя хостинг или сервер?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Zzepish
29.10.2013 - 19:47
Игорь_Vasinsky
у меня cms =)
А куда я ее ставить буду- еще не знаю
Zzepish
29.10.2013 - 20:47
redreem
просто я опасаюсь- а база не рухнет?
redreem
29.10.2013 - 20:53
Zzepishнуу... без конкретики сложно сказать

но при "прочих равных" я бы выбрал большой запрос, чем их 2
Zzepish
29.10.2013 - 20:56
redreemспасибо) теперь нкужно его попробовать написать
Цитата (Zzepish @ 29.10.2013 - 19:09) |
Пилю антиддос |
Цитата (Zzepish @ 29.10.2013 - 19:09) |
php |
Взаимоисключающие параграфы. На php можно только от школьника с LOIC отбиться.
Настраивай веб сервер+система и\или сетевое оборудование.
Zzepish
29.10.2013 - 21:20
Guest
ну, как снизить нагрузку- тоже вариант
andrey888
29.10.2013 - 22:02
Как составишь большой запрос .... покажи публике ..
Не факт что он будет лучше чем 2 простых запроса к БД (ИМХО)
_____________
Прогноз на следующие 5 лет : Россия, Китай - две величайшие державы.
США в Ж*пе. Справедливость восторжествует. )
Zzepish
29.10.2013 - 22:24
Ребят, пишу так:
IF((SELECT *
FROM
`antiddos`
WHERE
`ip`="'.$_SERVER['REMOTE_ADDR'].'",
) IS NULL,SET var:=1, SET var:=2)
Но беда в том. что выдает ошибку. Куда покопать, чтоб решить такую задачу?
UPDATE my_table a
SET IF((SELECT (b.query_count+1) as query_count FROM my_table b WHERE b.ban_to - NOW() > 0) > число_запросов_в_секунду), ban_to = NOW()+5дней, query_count=0) WHERE a.id=b.id;
UPDATE
antiddos as a,
(
SELECT
(b.query_count+1) as query_count
FROM antiddos WHERE ban_to - NOW() > 0
) AS b
SET
IF(b.query_count > число запросов в секунду, a.ban_to = NOW()+5дней, a.query_count=0)
WHERE a.ip=b.ip
Наверное более точно будет.