У меня есть база данных SQLite, заполненная приложением C ++. Я также работаю над веб-интерфейсом, позволяющим использовать различные режимы воспроизведения с использованием Javascript и PHP. В любой момент времени будет открыт только один экземпляр интерфейса, но он будет находиться на другом компьютере в сети из файла SQLite и приложения C ++.
Есть пара полей, которые я бы хотел обновлять через интерфейс. Я могу создать триггер, чтобы приложение C ++ узнало, когда изменяются данные, но если PHP делает это изменение, триггер нацелен на это соединение и выдает ошибку (поскольку функция обратного вызова определена в коде C ++). Я попытался включить соединения с общим кэшем для всего, что связано, но триггер SQLite все еще не может пересечь приложения.
Есть ли способ автоматически уведомлять приложение C ++ об изменениях или мне придется регулярно опрашивать базу данных, если мы продолжим использовать SQLite?
Документация, которую я смог найти, предлагает последнее, но большинство из них нечеткие или старые, поэтому я надеюсь, что есть обходной путь, который я не смог найти.
Я думаю, что просто невозможно выполнить собственную функцию C ++, когда PHP обновляет базу данных SQLite, поскольку PHP использует свою внутреннюю библиотеку SQLite для обновления базы данных.
Поэтому, если вы не хотите связываться с PHP и перекомпилировать с пользовательской реализацией SQLite (что я действительно рекомендую против), вам не повезло.
Альтернативы:
Вы можете посмотреть сам файл SQLite на диске, и вы можете запустить вашу программу, если она будет обновлена. Однако демоны, наблюдающие за файловой системой, не очень хорошо работают с сетевыми дисками.
Опрос базы данных является самым безопасным вариантом — он всегда работает, но может быть медленным, особенно потому, что вы можете открыть один и тот же файл SQLite из двух программ одновременно.
В любом случае, если вам нужен доступ к базе данных из более чем одного места (программа PHP и программа C ++), возможно, пришло время использовать другой механизм базы данных.
Других решений пока нет …