Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Update or Insert / 25 сообщений из 28, страница 1 из 2
08.09.2021, 11:49
    #40095910
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
Всем доброго дня,

FB2.5.9
есть таблица с 2мя проиндексированными полями (IP и Time).
В таблице регистрируются IP обращения к сервису и время этих обращений.
Если в единицу времени происходит слишком много обращений с определённого IP доступ с этого IP блокируется.
Возник вопрос:
Чтобы таблица не разрасталась разумно старые зарегестририванные IP/Записи использовать снова и перезаписывать их новыми данными (дабы не удалять итп). Как должен выглядеть такой запрос с точки зрения скорости выполнения. Т.е. найти устаревшую запись и если нашел перезаписать её а если не нашел то добавить новую запись. Можно ли это красиво реализовать одной коммандой?
UPDATE OR INSERT ... MATCHING .... тут вроде не прикрутить? или?

Если использовать поле типа Time 23:59:59.9999 и CURRENT_TIME дабы сохранение происходило с миллисекундами надо что то делать? Не будут ли миллисекунды отбрасываться при сохранении?

Спасибо.
...
Рейтинг: 0 / 0
08.09.2021, 11:54
    #40095912
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
пиши как умеешь.
...
Рейтинг: 0 / 0
08.09.2021, 11:55
    #40095913
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
Скорее всего, что "только вставлять" и "отдельно удалять устаревшее" будет эффективнее, чем "вставлять или обновлять".
...
Рейтинг: 0 / 0
08.09.2021, 11:58
    #40095914
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
Basil A. Sidorov
Скорее всего, что "только вставлять" и "отдельно удалять устаревшее" будет эффективнее, чем "вставлять или обновлять".

тогда наверное не удалять а записывать null а потом обновлять первый найденный null или добавлять.
...
Рейтинг: 0 / 0
08.09.2021, 12:04
    #40095915
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
hlopotun,

во первых время без даты очень относительное понятие. Ну например подумайте как вы это будете отслеживать когда наступает полночь.
...
Рейтинг: 0 / 0
08.09.2021, 12:06
    #40095916
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
hlopotun
Basil A. Sidorov
Скорее всего, что "только вставлять" и "отдельно удалять устаревшее" будет эффективнее, чем "вставлять или обновлять".

тогда наверное не удалять а записывать null а потом обновлять первый найденный null или добавлять.


не надо так делать. Конфликтов не оберешься.

Лучше как уже сказали отдельно удалять устаревшее, причём делать это должен отдельный процесс например по крону, чтобы не наступать на конфликты
...
Рейтинг: 0 / 0
08.09.2021, 12:08
    #40095917
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
Basil A. Sidorov
Скорее всего, что "только вставлять" и "отдельно удалять устаревшее" будет эффективнее, чем "вставлять или обновлять".
Если апдейт только поля со временем, то будет экономия на удалении\вставки в индекс по IP.
Но при этом не обрывается цепочка версий, что при кривом управлении тр-циями уже не хорошо и приводит к другим проблемам.
Кроме того, в таблице могут накапливаться записи о давно не используемых IP. Т.е. придётся их удалять отдельно.

Если же апдейтить оба поля, то я вообще не вижу в этом смысла.

hlopotun
тогда наверное не удалять а записывать null а потом обновлять первый найденный null или добавлять.
Откуда вообще эта идея - не удалять, а обновлять ? Любим растить длинные цепочки версий ?
...
Рейтинг: 0 / 0
08.09.2021, 12:10
    #40095919
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
hlopotun
тогда наверное не удалять а записывать null а потом обновлять первый найденный null или добавлять.
Не надо экономить место на диске такой ценой.
Если за сутки вы его не исчерпаете, то удалить ненужное и собрать мусор будет гораздо дешевле. Во всех смыслах.
...
Рейтинг: 0 / 0
08.09.2021, 12:18
    #40095925
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
hvlad
Basil A. Sidorov
Скорее всего, что "только вставлять" и "отдельно удалять устаревшее" будет эффективнее, чем "вставлять или обновлять".
Если апдейт только поля со временем, то будет экономия на удалении\вставки в индекс по IP.
Но при этом не обрывается цепочка версий, что при кривом управлении тр-циями уже не хорошо и приводит к другим проблемам.
Кроме того, в таблице могут накапливаться записи о давно не используемых IP. Т.е. придётся их удалять отдельно.

Если же апдейтить оба поля, то я вообще не вижу в этом смысла.

hlopotun
тогда наверное не удалять а записывать null а потом обновлять первый найденный null или добавлять.
Откуда вообще эта идея - не удалять, а обновлять ? Любим растить длинные цепочки версий ?


тут не столько место заботит сколько дырки в индексах и мусор.

Всем спасибо, в принципе понятно.
...
Рейтинг: 0 / 0
08.09.2021, 12:23
    #40095926
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
hlopotunтут не столько место заботит сколько дырки в индексах и мусор.

Если это заботит - выкинь таблицу и перестань делать закат солнца вручную.
Блокировка частых обращений с одного IP - штатная функция файерволла.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.09.2021, 12:26
    #40095927
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
hlopotun,

какие ещё дырки в индексах???
Кто тебе мешает чистить мусор за собой?
И писать надо не время а полную дату с временем

Всего то надо раз в сутки сделать

Код: sql
1.
2.
3.
4.
delete from service_log where bydate < localtimestamp - 1;
commit;
select count(*) from service_log where bydate < localtimestamp - 1;
commit;



Был бы SS с фоновой сборкой мусора select count(*) можно было бы не делать
...
Рейтинг: 0 / 0
08.09.2021, 12:28
    #40095928
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
Dimitry Sibiryakov

hlopotunтут не столько место заботит сколько дырки в индексах и мусор.

Если это заботит - выкинь таблицу и перестань делать закат солнца вручную.
Блокировка частых обращений с одного IP - штатная функция файерволла.

да, это первое что я сказал заказчику. Но он хочет дополнительную защиту.....
...
Рейтинг: 0 / 0
08.09.2021, 12:31
    #40095929
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
От чего именно он хочет защиту? То есть какую конкретно угрозу он хочет предотвратить?

Защита от брутфорса уже встроена в Firebird, тебе лучше не сделать.
...
Рейтинг: 0 / 0
08.09.2021, 12:45
    #40095943
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
Dimitry Sibiryakov
От чего именно он хочет защиту? То есть какую конкретно угрозу он хочет предотвратить?

Защита от брутфорса уже встроена в Firebird, тебе лучше не сделать.


от DDoS атаки. Сервис используется не у всех кто имеет админа способного настроить файрвол.
От инъекций, переполнения и прочей фигни уже защитили. Осталась только DDoS атака.
Хотя, конечно, учитывая что для отпинывания надо всё равно сделать селект защита получается тоже частичная. Но селект быстрый потому можно закрыть на это глаза.
...
Рейтинг: 0 / 0
08.09.2021, 12:49
    #40095948
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
hlopotun
Но селект быстрый потому можно закрыть на это глаза.
смешно.
и грустно.
...
Рейтинг: 0 / 0
08.09.2021, 12:49
    #40095949
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
hlopotunот DDoS атаки.

Обломись, эта таблица не поможет. DDoS атака вообще до базы обычно не доходит, а
работает на сетевом уровне. Даже если дойдёт, встроенная защита Firebird
сработает раньше, надёжнее и эффективнее, чем твоя.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.09.2021, 12:56
    #40095955
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
Dimitry Sibiryakov

hlopotunот DDoS атаки.

Обломись, эта таблица не поможет. DDoS атака вообще до базы обычно не доходит, а
работает на сетевом уровне. Даже если дойдёт, встроенная защита Firebird
сработает раньше, надёжнее и эффективнее, чем твоя.


а в чём выразится это срабатывание?
...
Рейтинг: 0 / 0
08.09.2021, 12:58
    #40095963
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
Dimitry Sibiryakov,

с чего ты взял, что в таблице регистрируются попытки коннекта к FB ?
...
Рейтинг: 0 / 0
08.09.2021, 13:00
    #40095964
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
hlopotunа в чём выразится это срабатывание?

Подключения данного пользователя будут заблокированы на некоторое время.

Но вообще просто забей. Ты даже не знаешь что такое DDoS и как делается. Твоя
таблица не поможет когда пойдёт атака в миллион обращений в секунду с миллиона
разных IP, только навредит, вызвав тот самый отказ в обслуживании от которого
заказчик хочет защититься.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.09.2021, 13:06
    #40095968
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
hvladс чего ты взял, что в таблице регистрируются попытки коннекта к FB ?

Аффтар как раз настолько наивен чтобы свою "защиту" делать в виде ON CONNECT
триггера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.09.2021, 13:10
    #40095969
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
афтар, что понимается под обращением к сервису? http-запрос? что-то еще?
...
Рейтинг: 0 / 0
08.09.2021, 13:15
    #40095973
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
Dimitry Sibiryakov

hlopotunа в чём выразится это срабатывание?

Подключения данного пользователя будут заблокированы на некоторое время.

Но вообще просто забей. Ты даже не знаешь что такое DDoS и как делается. Твоя
таблица не поможет когда пойдёт атака в миллион обращений в секунду с миллиона
разных IP, только навредит, вызвав тот самый отказ в обслуживании от которого
заказчик хочет защититься.


вот тут согласен. Оn DDos такая таблица не поможет защитится никак.
Именно потому что DDos расшифровывается как Distributed Denial of Service
...
Рейтинг: 0 / 0
08.09.2021, 13:51
    #40095988
hlopotun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
Дегтярев Евгений
афтар, что понимается под обращением к сервису? http-запрос? что-то еще?


сервис имеет различные URL по которым возвращает данные в виде xml через https. Доступ осушествляется на основе токенов итп.
Защита будет реализована не в виде триггера а в виде прослойки стоящей между базой и поступающим запросом.
Функция проверки сначала проверяет не заблокирован ли этот IP и если да до какого времени и отпинывает назад код ошибки. Если не заблокирован тогда проверяет количество обращений в единицу времени с этого IP и если предел превышен производит блокировку. Далее, если IP не заблокирован сохраняет его в базе и время когда это произошло.
Понятно что это от настоящей DDoS не защитит но от бота конкурентов работающего с 3-10 IP вполне спасёт. Опять же, можно анализировать общий траффик (со всех IP) и в случае перегрузки временно отказывать в обслуживании (т.к. в нормальной обстановке количество запросов не превышает 100 в минуту. Основная задача защиты не столько предотвратить отказ в обслуживании сколько не допустить повыщенную нагрузку на SQL сервер.
Лучше уж так чем никак.
п.с. Только что имел разговор с их админом, говорит в Firewall у них никакой зашиты от DDoS нет, и скорее всего не будет.
...
Рейтинг: 0 / 0
08.09.2021, 14:10
    #40095995
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
hlopotun,

если есть возможность держать эти счетчики в памяти сервиса я бы так и сделал, для персистентности можно периодически сохранять данные в БД, но не каждый запрос

зы
в nginx, например, есть готовый модуль ngx_http_limit_req_module
...
Рейтинг: 0 / 0
09.09.2021, 10:27
    #40096240
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Update or Insert
+1 за хранение в памяти сервиса, раз уж база не торчит наружу, а таблица тривиальнее некуда. Лазить на каждый чих в базу не очень мудро. Просто скидывай состояние периодически. Кстати, можно попробовать хранить ИП как числа, операции должны быть куда быстрее, чем со строками
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Update or Insert / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]