2

関係データベースの更新を聞くことはできますか? たとえば、私の Web アプリは、Comet テクノロジを介してクライアントにデータ更新を送信したいと考えています。データベースを定期的にポーリングするプログラムを作成することはできますが、パフォーマンスとスケーラビリティに欠けます。

アプリがデータベースの「イベント ハンドラー」にフードできる場合、アプリは特定のデータベース テーブル データが更新されるたびに通知を受け取ることができます。これはより有望に思えますが、具体的な例は見つかりませんでした。これがリスナーパターンです。

一般的なリレーショナル データベースはそのような機能をサポートしていますか?

4

3 に答える 3

1

MS SQL Server には、2005 年からクエリ変更通知がありました。この機能の使用方法の詳細については、http: //msdn.microsoft.com/en-us/library/ms175110.aspxを参照してください。

Oracle にはバージョン 10g からこれがあったと思います。詳細はこちら: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_dcn.htm

これをサポートする他の一般的な RDBMS については知りません。

于 2010-03-14T06:59:25.433 に答える
1

それは間違いなく非標準であるため、一般的に答えは NO です。一部のデータベース (Oracle、SQL Server) は、独自のソリューションを考え出しました (他の多くの場合と同様に、シナリオによっては SQL 標準が大幅に制限されます)。

ただし、最後に、まだポーリングしています。ごめん。データベースがイベントをアプリケーションに転送する方法はありません。

SQL Server の場合、変更通知は (SQL Server メッセージ ブローカーを使用して) SQL SERVER のメッセージ キュー内のエントリになり、引き続きキューをポーリングする必要があります。

そうは言っても、「長いポーリング」を使用できます-データベースに次の変更を要求する別のスレッドを開始します....それが発生するまでブロック(待機)します。

を使用して

WAITFOR (RECEIVE * FROM MyQueue);

構文のスタイル。基本的に何かが受信されるまで、リクエストはブロックされます。

ここで、MySQL のような「一般的な」データベースを使用する場合は、これで完了だと思います。のように:サポートなし。これは間違いなくハイエンドのエンタープライズ機能です。

于 2010-03-14T07:41:22.043 に答える
0

Firebirdイベントを見ることができます

于 2010-03-14T08:41:53.693 に答える