1

私は、実行するPostgreSQLを使用して、MFCベースのWindowsベースのアプリケーションを開発中です

  1. UI から情報を取得します
  2. いくつかのロジックを実行し、関連情報をデータベースに保存します
  3. 保存された情報は、ネットワーク経由で即時またはスケジュール間隔で (例: xyz 日付の 5:00) に送信する必要があります。

現在、データベースに挿入された新しい情報についてデータベースを常にポーリングするディスパッチャ メカニズム (スレッド) を開発しました。スレッドは情報を取得し、ネットワーク モジュールに送信します。

しかし、これは正しいアプローチではないと感じています

  1. 毎回のポーリングはオーバーヘッドです。実行するものが何もない場合があります
  2. 5秒ごとにポーリングするため、リアルタイムではありません

そう

  1. データベースで情報が更新されるとすぐにネットワーク モジュールにトリガーを送信する方法はありますか?

  2. または、このタスクを達成するためのより良い方法はありますか?

前もって感謝します。

4

2 に答える 2

1

これには、PostgreSQL の listen/notify 機能を使用できます。

メッセージに関心のあるクライアントはlistenステートメントを実行し、トリガーはnotifyそれらを実行します。

私はC#を使用していませんが、マニュアルによると、非同期でメッセージを取得できます。これには、通知メッセージがサーバーの応答の一部としてのみ送信されるため、「軽量」ポーリングが含まれます。マニュアルでは、「空の」ステートメント ( など;) を実行するだけで十分であると主張しています。Java/JDBC を使用しselect 42て、テーブルに触れないため、サーバーに大きな負荷をかけない単純なものを使用しました。

このポーリングは、実際にテーブルのデータを取得するよりもはるかに高速でスケーラブルです。

于 2013-01-04T10:12:23.090 に答える
0

はい、あなたは正しい@RDXです。毎回ポーリングするのではなく、Postgresでトリガーを記述し、そのトリガーから、以下のスレッドで確認できるJavaプログラムを呼び出してみてください。

Postgres トリガーから Java pgm を呼び出す

于 2013-01-04T09:41:01.180 に答える