我正在将SQLite数据库表中的数据读入data.frame
R的DBI
。通常(通常每5秒),新记录会从外部添加到数据库表中,或者更新/删除现有记录,此时我需要将这些更改传播到data.frame
。
所以问题是如何在R中挂钩并响应这些数据库事件?我不想每隔5秒就一直查询数据库,以确保没有任何改变。我可以使用一些回调机制吗?
答案 0 :(得分:1)
如果您有权访问编写您的SQL数据的C代码,那么您可以实现回调:
http://www.sqlite.org/c3ref/update_hook.html
然后在你的回调函数中,如果正在修改的表是你的R代码关心的表,你可以更新文件的时间戳。然后你的R代码检查该文件的时间戳,如果它被更改,那么它只需要查询SQLite数据库。
现在我不知道你是否可以在R持有的SQLite连接中添加一个回调,如果另一个SQLite连接/进程更改了数据库表,则希望得到一个回调。我怀疑它,我怀疑回调仅在他们注册的连接进行更新时被触发,因为否则会发生各种异步事件,并且没有事件处理程序。
另一个想法是使用触发器来更新修改时间的数据库表。在您关心的所有表上定义触发器,以便它们更新“上次修改”表中的行。然后使用文件修改时间来检查对数据库的任何更改,然后您的R只需查询“上次修改”表以查看自上次检查后特定表已更改的内容。