172 похожих чатов

💖 Ребят, дайте совет пожалуйста. Юзер телеграм-бота инсёртит в базу какую-то

инфу. Если он уже наинсёртил в эту таблицу 5 штук, слать его куда подальше, лимит мол на посты.

В коде само собой вся эта логика прописана. В начале селектится count его инсёртов, и если он уже 5 или больше, то досвидос, а если нет, то инсёртим. Но если он будет спамить командой добавления, например 10 сообщений отправит в миллисекунду, то логика эта идёт нафиг, и будет добавлено больше 5.

Всё что мне приходит в голову, так это обернуть это дело в транзакцию и залочить таблицу полностью. Но нормальное ли это решение? Люди то часто инсёртят, и не знаю норм ли что вся таблица в эти моменты будет заблокирована.

8 ответов

33 просмотра

вы хотите сделать rate limit Запросов к телеграмму через базу и количество вставок? чего?

триггер на вставку можно сделать, как вариант, для проверки внутри базы хотя сам я против триггеров.. возможно можно что-то придумать с ограничением уникальности, но тут я не уверен

джессик- Автор вопроса
central hardware
вы хотите сделать rate limit Запросов к телеграмму...

Нет, представь что это рынок. Чувак выставляет товар, и одновременно может всего 5 его товаров на рынке торчать. Больше 5 он выставить не может. Но если он хорошенько поспамит, то выставит.

джессик- Автор вопроса
Сергей Кравчук
триггер на вставку можно сделать, как вариант, для...

А почему против триггеров? Они expensive, или шо там с ними?

джессик
А почему против триггеров? Они expensive, или шо т...

просто личное мнение, не нравится логика на уровне базы, имхо, лучше в коде, но это вечный холивар) по факту, что вы сделаете запрос на количество из кода, что в триггере, разницы большой быть не должно

Есть как минимум два "стандартных" решения: 1. Использовать serializable, проверять COUNT(*) в транзакции, откатывать, если больше 5 (всё это можно поместить в триггер). 2. Использовать какой-то из обычных трюков работы на Read Committed (добавить поле-счётчик "штук" в таблицу пользователей и обновлять его; или блокировать запись этого пользователя (в таблице пользователей, опять-таки) перед выборкой (тут не уверен, я таким не увлекаюсь); и т.п.).

джессик- Автор вопроса
Yaroslav Schekin
Есть как минимум два "стандартных" решения: 1. Исп...

Пасибки за инфу, сейчас за serializable почитаю

джессик
Пасибки за инфу, сейчас за serializable почитаю

Я сразу предупрежу: 1. Чтобы это решение нормально работало в PostgreSQL, все транзакции (по крайней мере, относящиеся к тем же данным), должны использовать этот уровень. 2. Про то, как им правильно пользоваться, советую читать только документацию PostgreSQL ("в интернете" именно по этому поводу мне почему-то часто попадается просто феерическая чушь... хотя, может, это мне так "везёт").

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта