Как сделать проверку базы данных, на наличие новых записей?
У меня есть база данных mariaDB, она взаимодействует с ботом на телеботе. Мне нужно раз в минуту, проверять, есть ли в базе данных, новые записи. Как это сделать?
Обычно такие системы строят не на основе БД а на основе системы сообщений (messageMQ). Это - более современный и рациональный подход. Не бот долбит БД а MQ уведомляет бота о каком-то событии.
Нужно устанавливать доп. софт, есть конечно специальная система оповещения, но ее долго и трудно настраивать. А стоит задача, сделать с минимальными изменениями на стороне бд.
Например:
1. Первый столбец с именем, например, NUM, сделать типа integer, unique с автоинкрементом. Здесь будут храниться уникальные номера записей.
2. Периодически делать запрос типа SELECT max(NUM) и сравнивать с сохраненным предыдущим значением. Если не совпало, значит, есть новые записи.
Еще вариант для Oracle. Если таблица привязана к sequence объекту то мы можем просто проверять менялось ли значение там.
SELECT my_seq.CURRVAL FROM dual;
Мне кажется что это - легкий вариант. Хотя теоретически мы можем получать ложно-позитивные срабатывания если кто-то делал транзакции и потом их откатил.
Варианты с SELECT max(...) тоже жизнеспособны но требуют uniqie_index_scan. Это - порядка 2-4 чтения блока из буферного кеша если повезет. Вообще не забываем что любой SELECT в современных базах
по умолчанию видит "ЭТУ ВЕРСИЮ ВСЕЛЕННОЙ" (read commited) и БД на самом деле делает больше
действий чем думают некоторые разработчики.
Для других dbms надо проверить как работает API sequences. Я не знаю есть такой функционал или нет.