Есть ли способ посмотреть базу данных MySQL для изменений, использующих Perl?
Вопрос
Я ищу решение, аналогичное методу INOTIFY для просмотра файлов для изменений. Я осознаю, что я мог бы посмотреть файл binlog базы данных mysql и запустить запросы, чтобы выбрать новые результаты, но это кажется очень неэффективным и нерешенным; Как просто делает массы запросов в петле в ожидании новых результатов.
Решение
Если вы добавите ВЫЗЫВАТЬ К таблицам, которым вы заинтересованы, вы можете использовать это, чтобы предупредить приложение для просмотра. Вы могли бы сделать это несколькими способами:
- Создайте аудиторскую таблицу в базе данных и попросите триггер написать соответствующую информацию там; И у вас просмотр приложений опрос аудита таблицы для новых записей. Вы все еще опросаете, но в контролируемом способе, который не поразит сервер слишком сильно.
- Иметь триггер Позвоните внешнее приложение через UDF.
Другие советы
Что касается таблиц MyIsam, вы можете посмотреть information_schema.TABLES.UPDATE_TIME
. Отказ Это спасет вас от опроса всех интересующих вас столов. Для InnoDB, просмотр Binlog - лучшее, о чем я могу думать.
Другой подход - сделать точку / сигнал вместо опроса БД. У вас есть какие-либо процессы обновления базы данных, уведомить код вашего Perl, что обновление было сделано через любой IPC, вы выбрали (HEC, файл журнала, прилагаемый к изменению имени таблицы, может сделать достаточно хорошо).
Это особенно эффективен, если обновления довольно редкий / низкий том, но время реакции для них должно быть быстрым.
Дополнительное преимущество - это портативность - работает для любого бэкэнда MySQL или для любого другого двигателя БД.