4

是否有任何 Wheel /POCO /Option 可以在 Perl 中使用 POE 模块执行此操作:我想监视数据库表中的更改记录(删除 /insert/update)并对这些更改做出相应的反应。

如果是的话,可以提供一些代码或显示这一点的链接吗?

4

2 回答 2

7

我不知道,但如果你真的很勤奋,你可以写一个。我可以想到两种方法来做到这一点。

第一个更好:访问事务日志/复制提要,例如 MySQL binlog。为其格式编写一个POE::Filter ,然后使用POE::Wheel::FollowTail获取事件流,每个事件流对应影响数据库的每个语句。然后您可以过滤数据以找到您感兴趣的内容。

不太好的主意:使用EasyDBI对表运行定期选择,看看发生了什么变化。如果您的数据很小,它可以工作(但它仍然容易出现时间问题);如果您的数据很大,这将是一个悲惨的失败。

于 2009-12-17T21:41:06.740 回答
5

如果您使用的是 PostgreSQL,您可以在表的更改上创建一个称为 NOTIFY 的触发器,并在您的客户端应用程序中打开一个连接并为相同的通知执行 LISTEN。然后,您可以让 POE 侦听 DBD::Pg pg_socket 文件描述符上的文件事件。

或者,您可以创建一个 SQL 触发器来触发另一个文件或网络事件(写入文件、命名管道或套接字)并让 POE 监听它。

于 2009-12-18T02:16:53.760 回答