Есть ли способ посмотреть базу данных MySQL для изменений, использующих Perl?

StackOverflow https://stackoverflow.com/questions/4418598

  •  08-10-2019
  •  | 
  •  

Вопрос

Я ищу решение, аналогичное методу INOTIFY для просмотра файлов для изменений. Я осознаю, что я мог бы посмотреть файл binlog базы данных mysql и запустить запросы, чтобы выбрать новые результаты, но это кажется очень неэффективным и нерешенным; Как просто делает массы запросов в петле в ожидании новых результатов.

Это было полезно?

Решение

Если вы добавите ВЫЗЫВАТЬ К таблицам, которым вы заинтересованы, вы можете использовать это, чтобы предупредить приложение для просмотра. Вы могли бы сделать это несколькими способами:

  1. Создайте аудиторскую таблицу в базе данных и попросите триггер написать соответствующую информацию там; И у вас просмотр приложений опрос аудита таблицы для новых записей. Вы все еще опросаете, но в контролируемом способе, который не поразит сервер слишком сильно.
  2. Иметь триггер Позвоните внешнее приложение через UDF.

Другие советы

Что касается таблиц MyIsam, вы можете посмотреть information_schema.TABLES.UPDATE_TIME. Отказ Это спасет вас от опроса всех интересующих вас столов. Для InnoDB, просмотр Binlog - лучшее, о чем я могу думать.

Другой подход - сделать точку / сигнал вместо опроса БД. У вас есть какие-либо процессы обновления базы данных, уведомить код вашего Perl, что обновление было сделано через любой IPC, вы выбрали (HEC, файл журнала, прилагаемый к изменению имени таблицы, может сделать достаточно хорошо).

Это особенно эффективен, если обновления довольно редкий / низкий том, но время реакции для них должно быть быстрым.

Дополнительное преимущество - это портативность - работает для любого бэкэнда MySQL или для любого другого двигателя БД.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top