7

SQLite データベース テーブルからRdata.frameを使用してデータを読み込んでいます。多くの場合 (5 秒ごとに)、新しいレコードが外部からデータベース テーブルに追加されるか、既存のレコードが更新/削除されます。その時点で、これらの変更を に伝達する必要があります。DBIdata.frame

問題は、R でこれらのデータベース イベントに接続して応答するにはどうすればよいかということです。何も変更されていないことを確認するためだけに、5 秒ごとにデータベースにクエリを実行し続ける必要はありません。自由に使えるコールバック メカニズムはありますか?

4

1 に答える 1

1

SQL データを書き込んでいる C コードにアクセスできる場合は、コールバックを実装できます。

http://www.sqlite.org/c3ref/update_hook.html

次に、コールバック関数で、変更されているテーブルが R コードで重要な場合、ファイルのタイムスタンプを更新できます。次に、R コードはそのファイルのタイムスタンプをチェックし、変更された場合にのみ、SQLite データベースにクエリを実行する必要があります。

Rが保持するSQLite接続にコールバックを追加して、別のSQLite接続/プロセスがデータベーステーブルを変更した場合にコールバックを取得できるかどうかはわかりません。コールバックは、登録されている接続が更新された場合にのみトリガーされると思います。そうしないと、あらゆる種類の非同期のことが発生し、イベントハンドラーがないためです。

もう 1 つのアイデアは、トリガーを使用して変更時間のデータベース テーブルを更新することです。関心のあるすべてのテーブルでトリガーを定義して、「最後に変更された」テーブルの行を更新します。次に、ファイルの変更時刻を使用してデータベースへの変更を確認すると、R は「最後に変更された」テーブルをクエリして、最後のチェック以降に変更された特定のテーブルを確認するだけで済みます。

于 2014-01-26T09:37:59.640 に答える