Как можно узнать что в таблицу базы SQLite была добавлена запись, не обращаясь SELECT'ом к таблице. С/С++ Linux
В БД есть таблица, в которую другим приложением добавляются строки. Как узнать что в таблицу была добавлена новая строка не обращаясь к таблице SELECT'ом. Дело в том, что данная информация должна получаться практически мгновенно. Дергать БД запросами каждые 200мс не хочется. Есть ли возможность использовать флаги дескриптора файла БД или еще как-то? Программа на С++ под Linux.
Попробовал вариант со stat(), он позволяет отследить время последнего изменения файла БД, тем самым количество ненужных запросов можно сократить, но это как-то криво...
По совету @KoVadim попробовал sqlite3_update_hook(), но этот хук ловит изменения в таблице при использовании соединения объекта БД, который производит изменения. В моем случае изменения вносит другая прога, у которой открыто свое соединение.
Ответы (1 шт):
В sqlite нет ни publish/subsribe, ни notify, ни очередей. Для взаимодействия с другим процессом нужно создавать внешний механизм, а sqlite использовать только для хранения таблиц.
Единственное что можно сделать внутри базы - это создать таблицу log в которую триггером заносятся нужные изменения, а второй процесс будет эту таблицу перечитывать и учтенные изменения удалять. Перечитка остается, но объем данных будет меньше.