有没有更好的方法来观察表中的新条目,除了每隔n个时间点或类似的选择?
我有一个外部程序经常更新的表,客户端可以在到达时监视这些新数据,如何在不设置固定周期的可重复选择语句的情况下进行此操作?
这就是我所做的:我为表设置了一些触发器(插入,删除,更新),这些触发器在另一个表中增加一个计数器.我的数据库访问代码保留一个本地计数器并将其与返回值进行比较,最终将一个bool发送回调用者,回答问题IsDataCurrent().
我们使用此数据库访问代码的程序可以根据请求进行轮询或检查,然后进行适当的调用以使自己保持最新状态.
我确信还有其他方法可以解决这个问题.不过,它对我很有用.
在MySQL中,没有比轮询更好的方法(您创建一个特定的表来简化轮询),在其他数据库中,您可以拥有在数据库之外产生影响的触发器.在MySQL中,触发器只能在数据库本身内部执行操作(例如,填充辅助表).
另一种类似的方法是添加
add column Last_Modified TIMESTAMP ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP
对每个表和前面的选择查询进行比较,以将最后一个请求日期/时间与最大值(Last_Modified)进行比较.
数据库通常是拉动源而不是推送,因此无论如何,您仍然需要以编程方式探测更改.
如果您拥有对主机的控制权,则可以触发数据库外部的行为.
A) 这个问题的答案建议使用'select into outfile'写入文件,某些系统进程会监视该文件的变化(例如基于inotify的方法,例如node-inotify甚至Grunt-watch可能就足够了)
B)对于勇敢者: 这个问题的答案指出,如果你可以在数据库服务器上安装C/C++附加组件,你可以使用用户定义函数(UDF)来调用sys_exec(),从而触发外部进程,或者可能直接在UDF中编写实际过程.
http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html#qandaitem-B-5-1-11
(我正在研究这个,对于AWS RDS托管的应用程序,所以很遗憾,这些选项都不适合我.)