Firebirdには、EVENT
という機能があり、クライアントにデータベースの変更を通知する機能があります。この考え方は、テーブル内のデータが変更されると、トリガーがイベントをポストすることです。 Firebirdは、イベントに興味を持ったすべてのクライアントに名前で通知します。通知されると、各クライアントは、データベースに照会することによって、自身のデータを更新する責任があります。
クライアントは、新しい値または古い値に関するイベントから情報を取得できません。これは、トランザクション分離を使用してこれを解決する方法がないため、設計によるものです。ワイルドカードを使ってイベントを登録することもできません。したがって、サーバーツークライアントの通知をかなり広く設計し、クライアントが更新して正確に何が変更されたのかを確認する必要があります。
参照http://www.firebirdsql.org/doc/whitepapers/events_paper.pdf
あなたが使っているものをクライアントプラットフォームや言語に言及していないので、私はあなたが使用する特定のAPIについて助言することはできません。私は、あなたが使用している言語に基づいて、インスタンス "firebird event java"または "firebird event php"または同様のものをGoogleに提案します。
あなたがWPFを使用しているコメントで言っているので、ここではイベントの通知のために登録するいくつかの.NETアプリケーションコードのコードサンプルへのリンクです:
http://www.firebirdsql.org/index.php?op=devel&sub=netprovider&id=examples#3
コメント:はい、Firebirdのイベントメカニズムは、情報を運ぶ機能が限られています。これが必要なのは、持ち運ぶ情報が取り消されたりロールバックされたりする可能性があるからです。たとえば、トリガがイベントをポストしたが、そのトリガを発生させた操作が制約に違反して、その操作はキャンセルされますが、イベントはキャンセルされません。だからイベントは興味のあるものが起こったかもしれない一種の「ヒント」にすぎない。他のクライアントはその時点でデータをリフレッシュする必要がありますが、検索対象はわかりません。これは少なくともポーリングより優れています。
基本的には、公開/購読メカニズム - メッセージキューを説明しています。私は、メッセージキューを実装するためにRDBMSを使用するかどうかはわかりません。それはできますが、あなたは基本的に車輪を再発明しています。
これは、あるクライアントが他の人が知る必要のあるようにデータを変更すると、そのクライアントもがメッセージをメッセージキューに投稿する必要があることを意味します。興味のあるメッセージを消費者クライアントが見ると、彼らはデータのコピーをリフレッシュすることを知っています。
クライアントが、何らかの形で「プッシュ」されている(より多くの場合は通知)、むしろ(より簡単には...)、期待されていますか?リフレッシュを行って結果セットを移動し、データベースを最新のものにすることができますか? – mjv
私のフロントエンドはWPFなので、データバインディングのシナリオではもっと考えています。 – luvieere