|
Update or Insert
|
|||
---|---|---|---|
#18+
Всем доброго дня, FB2.5.9 есть таблица с 2мя проиндексированными полями (IP и Time). В таблице регистрируются IP обращения к сервису и время этих обращений. Если в единицу времени происходит слишком много обращений с определённого IP доступ с этого IP блокируется. Возник вопрос: Чтобы таблица не разрасталась разумно старые зарегестририванные IP/Записи использовать снова и перезаписывать их новыми данными (дабы не удалять итп). Как должен выглядеть такой запрос с точки зрения скорости выполнения. Т.е. найти устаревшую запись и если нашел перезаписать её а если не нашел то добавить новую запись. Можно ли это красиво реализовать одной коммандой? UPDATE OR INSERT ... MATCHING .... тут вроде не прикрутить? или? Если использовать поле типа Time 23:59:59.9999 и CURRENT_TIME дабы сохранение происходило с миллисекундами надо что то делать? Не будут ли миллисекунды отбрасываться при сохранении? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 11:49 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
Скорее всего, что "только вставлять" и "отдельно удалять устаревшее" будет эффективнее, чем "вставлять или обновлять". ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 11:55 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Скорее всего, что "только вставлять" и "отдельно удалять устаревшее" будет эффективнее, чем "вставлять или обновлять". тогда наверное не удалять а записывать null а потом обновлять первый найденный null или добавлять. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 11:58 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
hlopotun, во первых время без даты очень относительное понятие. Ну например подумайте как вы это будете отслеживать когда наступает полночь. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:04 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
hlopotun Basil A. Sidorov Скорее всего, что "только вставлять" и "отдельно удалять устаревшее" будет эффективнее, чем "вставлять или обновлять". тогда наверное не удалять а записывать null а потом обновлять первый найденный null или добавлять. не надо так делать. Конфликтов не оберешься. Лучше как уже сказали отдельно удалять устаревшее, причём делать это должен отдельный процесс например по крону, чтобы не наступать на конфликты ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:06 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Скорее всего, что "только вставлять" и "отдельно удалять устаревшее" будет эффективнее, чем "вставлять или обновлять". Но при этом не обрывается цепочка версий, что при кривом управлении тр-циями уже не хорошо и приводит к другим проблемам. Кроме того, в таблице могут накапливаться записи о давно не используемых IP. Т.е. придётся их удалять отдельно. Если же апдейтить оба поля, то я вообще не вижу в этом смысла. hlopotun тогда наверное не удалять а записывать null а потом обновлять первый найденный null или добавлять. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:08 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
hlopotun тогда наверное не удалять а записывать null а потом обновлять первый найденный null или добавлять. Если за сутки вы его не исчерпаете, то удалить ненужное и собрать мусор будет гораздо дешевле. Во всех смыслах. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:10 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
hvlad Basil A. Sidorov Скорее всего, что "только вставлять" и "отдельно удалять устаревшее" будет эффективнее, чем "вставлять или обновлять". Но при этом не обрывается цепочка версий, что при кривом управлении тр-циями уже не хорошо и приводит к другим проблемам. Кроме того, в таблице могут накапливаться записи о давно не используемых IP. Т.е. придётся их удалять отдельно. Если же апдейтить оба поля, то я вообще не вижу в этом смысла. hlopotun тогда наверное не удалять а записывать null а потом обновлять первый найденный null или добавлять. тут не столько место заботит сколько дырки в индексах и мусор. Всем спасибо, в принципе понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:18 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
hlopotunтут не столько место заботит сколько дырки в индексах и мусор. Если это заботит - выкинь таблицу и перестань делать закат солнца вручную. Блокировка частых обращений с одного IP - штатная функция файерволла. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:23 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
hlopotun, какие ещё дырки в индексах??? Кто тебе мешает чистить мусор за собой? И писать надо не время а полную дату с временем Всего то надо раз в сутки сделать Код: sql 1. 2. 3. 4.
Был бы SS с фоновой сборкой мусора select count(*) можно было бы не делать ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:26 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hlopotunтут не столько место заботит сколько дырки в индексах и мусор. Если это заботит - выкинь таблицу и перестань делать закат солнца вручную. Блокировка частых обращений с одного IP - штатная функция файерволла. да, это первое что я сказал заказчику. Но он хочет дополнительную защиту..... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:28 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
От чего именно он хочет защиту? То есть какую конкретно угрозу он хочет предотвратить? Защита от брутфорса уже встроена в Firebird, тебе лучше не сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:31 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov От чего именно он хочет защиту? То есть какую конкретно угрозу он хочет предотвратить? Защита от брутфорса уже встроена в Firebird, тебе лучше не сделать. от DDoS атаки. Сервис используется не у всех кто имеет админа способного настроить файрвол. От инъекций, переполнения и прочей фигни уже защитили. Осталась только DDoS атака. Хотя, конечно, учитывая что для отпинывания надо всё равно сделать селект защита получается тоже частичная. Но селект быстрый потому можно закрыть на это глаза. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:45 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
hlopotun Но селект быстрый потому можно закрыть на это глаза. и грустно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:49 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
hlopotunот DDoS атаки. Обломись, эта таблица не поможет. DDoS атака вообще до базы обычно не доходит, а работает на сетевом уровне. Даже если дойдёт, встроенная защита Firebird сработает раньше, надёжнее и эффективнее, чем твоя. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:49 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hlopotunот DDoS атаки. Обломись, эта таблица не поможет. DDoS атака вообще до базы обычно не доходит, а работает на сетевом уровне. Даже если дойдёт, встроенная защита Firebird сработает раньше, надёжнее и эффективнее, чем твоя. а в чём выразится это срабатывание? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:56 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, с чего ты взял, что в таблице регистрируются попытки коннекта к FB ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 12:58 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
hlopotunа в чём выразится это срабатывание? Подключения данного пользователя будут заблокированы на некоторое время. Но вообще просто забей. Ты даже не знаешь что такое DDoS и как делается. Твоя таблица не поможет когда пойдёт атака в миллион обращений в секунду с миллиона разных IP, только навредит, вызвав тот самый отказ в обслуживании от которого заказчик хочет защититься. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 13:00 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
hvladс чего ты взял, что в таблице регистрируются попытки коннекта к FB ? Аффтар как раз настолько наивен чтобы свою "защиту" делать в виде ON CONNECT триггера. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 13:06 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
афтар, что понимается под обращением к сервису? http-запрос? что-то еще? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 13:10 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hlopotunа в чём выразится это срабатывание? Подключения данного пользователя будут заблокированы на некоторое время. Но вообще просто забей. Ты даже не знаешь что такое DDoS и как делается. Твоя таблица не поможет когда пойдёт атака в миллион обращений в секунду с миллиона разных IP, только навредит, вызвав тот самый отказ в обслуживании от которого заказчик хочет защититься. вот тут согласен. Оn DDos такая таблица не поможет защитится никак. Именно потому что DDos расшифровывается как Distributed Denial of Service ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 13:15 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
Дегтярев Евгений афтар, что понимается под обращением к сервису? http-запрос? что-то еще? сервис имеет различные URL по которым возвращает данные в виде xml через https. Доступ осушествляется на основе токенов итп. Защита будет реализована не в виде триггера а в виде прослойки стоящей между базой и поступающим запросом. Функция проверки сначала проверяет не заблокирован ли этот IP и если да до какого времени и отпинывает назад код ошибки. Если не заблокирован тогда проверяет количество обращений в единицу времени с этого IP и если предел превышен производит блокировку. Далее, если IP не заблокирован сохраняет его в базе и время когда это произошло. Понятно что это от настоящей DDoS не защитит но от бота конкурентов работающего с 3-10 IP вполне спасёт. Опять же, можно анализировать общий траффик (со всех IP) и в случае перегрузки временно отказывать в обслуживании (т.к. в нормальной обстановке количество запросов не превышает 100 в минуту. Основная задача защиты не столько предотвратить отказ в обслуживании сколько не допустить повыщенную нагрузку на SQL сервер. Лучше уж так чем никак. п.с. Только что имел разговор с их админом, говорит в Firewall у них никакой зашиты от DDoS нет, и скорее всего не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 13:51 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
hlopotun, если есть возможность держать эти счетчики в памяти сервиса я бы так и сделал, для персистентности можно периодически сохранять данные в БД, но не каждый запрос зы в nginx, например, есть готовый модуль ngx_http_limit_req_module ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2021, 14:10 |
|
Update or Insert
|
|||
---|---|---|---|
#18+
+1 за хранение в памяти сервиса, раз уж база не торчит наружу, а таблица тривиальнее некуда. Лазить на каждый чих в базу не очень мудро. Просто скидывай состояние периодически. Кстати, можно попробовать хранить ИП как числа, операции должны быть куда быстрее, чем со строками ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 10:27 |
|
|
start [/forum/topic.php?fid=40&fpage=4&tid=1559943]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 246ms |
total: | 401ms |
0 / 0 |