R-如何对数据库插入/更新/删除做出反应?
我正在用的将数据从SQLite数据库表读入R-如何对数据库插入/更新/删除做出反应?,r,sqlite,r-dbi,R,Sqlite,R Dbi,我正在用的将数据从SQLite数据库表读入data.frame。通常(每5秒一次),新记录会从外部添加到数据库表中,或更新/删除现有记录,此时我需要将这些更改传播到我的data.frame 所以问题是如何在R中连接并响应这些数据库事件?我不想为了确保没有任何变化而每隔5秒查询一次数据库。我可以使用一些回调机制吗?如果您可以访问编写SQL数据的C代码,那么您可以实现回调: http://www.sqlite.org/c3ref/update_hook.html 然后在回调函数中,如果要修改的表是
data.frame
。通常(每5秒一次),新记录会从外部添加到数据库表中,或更新/删除现有记录,此时我需要将这些更改传播到我的data.frame
所以问题是如何在R中连接并响应这些数据库事件?我不想为了确保没有任何变化而每隔5秒查询一次数据库。我可以使用一些回调机制吗?如果您可以访问编写SQL数据的C代码,那么您可以实现回调:
http://www.sqlite.org/c3ref/update_hook.html
然后在回调函数中,如果要修改的表是R代码关心的表,则可以更新文件的时间戳。然后,您的R代码检查该文件的时间戳,如果其发生更改,则只需要查询SQLite数据库
现在我不知道您是否可以向R持有的SQLite连接添加一个回调,并期望在另一个SQLite连接/进程更改数据库表时得到一个回调。我对此表示怀疑,我怀疑回调只有在它们注册的连接进行更新时才会触发,因为否则会发生各种异步事件,并且没有事件处理程序
另一个想法是使用触发器更新修改时间的数据库表。在您关心的所有表上定义触发器,以便它们更新“上次修改”表中的一行。然后使用文件修改时间检查对数据库的任何更改,然后您的R只需查询“上次修改”表,查看自上次检查以来哪些特定表发生了更改。您可以使用
file.info(“myDB.sqlite”)保存上次修改的时间$mtime
并定期与当前修改时间进行比较。如果出现差异,就会触发一个新的查询,再次保存最近的修改日期以供进一步比较。@vaettchen,谢谢-我也这么认为,但这种方法对我的需要来说太粗糙了:我的数据库中有许多表,更新/插入/删除可以在所有表中随机进行。因此,任何一个表中的一个小更改都会触发数据库文件的“时间修改”标记的更改,并导致所有我的表都标记为需要重新读取—这太低效了。