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