我正在寻找类似于观察文件更改的inotify方法的解决方案。我知道我可以看到mysql数据库的binlog文件并运行查询来挑选出新的结果,但这看起来非常低效且不优雅;就像在循环中大量查询等待新结果一样。
答案 0 :(得分:6)
如果您将TRIGGER添加到您感兴趣的表格中,则可以使用它来提醒观看的应用程序。你可以通过多种方式实现这一目标:
答案 1 :(得分:1)
就MyISAM表而言,您可以观看information_schema.TABLES.UPDATE_TIME
。这样可以避免轮询你感兴趣的所有表。对于InnoDB,看binlog是我能想到的最好的。
答案 2 :(得分:0)
另一种方法是执行推/信号而不是数据库轮询。让任何进程更新数据库,通过您选择的任何IPC通知您的Perl代码更新(哎呀,附加到正在更改的表名称的日志文件可能做得很好)。
如果更新相当稀少/低音量但对它们的反应时间必须很快,这尤其有效。
另一个好处是可移植性 - 适用于任何MySQL后端或任何其他数据库引擎。