powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Update or Insert
25 сообщений из 28, страница 1 из 2
Update or Insert
    #40095910
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня,

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

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

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

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

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

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


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

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

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

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

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

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


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

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

Если это заботит - выкинь таблицу и перестань делать закат солнца вручную.
Блокировка частых обращений с одного IP - штатная функция файерволла.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Update or Insert
    #40095927
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Update or Insert
    #40095928
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

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

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

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

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

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


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

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

hlopotunот DDoS атаки.

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


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

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

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

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

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

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

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

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


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


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

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

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


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