データベースからアプリのデータを更新する唯一の方法はポーリングですか?


17

アプリケーションは、できるだけデータベースから最新のデータを更新する必要があります。そのような場合、タイマーベースのデータベースの要求(ポーリング)の他に、データを取得する他の方法はありますか?

私はMS SQL Server 2008(および.NETアプリケーション+ Entity Framework)を使用していますが、他の種類のデータベースについても知りたいです。


Microsoft StreamInsightは、「データイベント」ベースの処理を可能にするように特別に設計されています。私はそれについてあまり知りませんが、SQL Serverの個々の機能というよりは完全で独立したプラットフォームのように見えます。ここだStreamInsightのアーキテクチャ図は
ニックチャマス

回答:


5

SQL Server 2005+のService Brokerはこれを実行できます。

申し訳ありませんが、他のRDBMSについてはわかりません


2
Service Brokerがこれを行う方法について詳しく説明していただけますか?@remは、データベースからイベントトリガー(タイムトリガーではなく)の更新を取得することを求めています。SBは、キューイングおよびasyc処理用です。
ニックチャマス

1
-1 Service Brokerには、メッセージを受信したことをアプリに知らせるための何かが組み込まれていないようです。(私は現在この問題で立ち往生しています。)
ヴァッカノ

10

Oracleでは、組み込みのDBMS_ALERTパッケージを使用してこれを容易にできます。

DBMS_ALERTは、データベースイベント(アラート)の非同期通知をサポートします。このパッケージとデータベーストリガーを適切に使用することにより、アプリケーションは、データベース内の関心のある値が変更されたときに自身に通知できます。

グラフィックツールがデータベーステーブルのデータのグラフを表示しているとします。グラフィックツールは、データを読み取り、グラフ化した後、読み取ったばかりのデータをカバーするデータベースアラート(WAITONE)を待つことができます。他のユーザーがデータを変更すると、ツールは自動的に起動します。必要なのは、トリガーが起動されるたびにシグナル(SIGNAL)を実行するトリガーをデータベーステーブルに配置することだけです。


また、OPの質問による「MS SQL Server 2008」についてはどうでしょうか?彼らは他のRDBMSを求めましたが、これは実際には役に立ちません。
gbn

9
@gbnなぜ役に立たないのですか?できる限りSQL Serverの部分に答えることができないので、できる部分に答えました。他のすべてのデータベースの専門家は誰もいませんが、それぞれが知識を提供すれば、OPと将来の訪問者は有用な情報を見つけるでしょう。OPがSQL Serverの回答を受け入れ、ScottCherの(+1)のような他の有用な回答に投票することを期待します。
リーリッフェル

よく言った。DBMS_ALERTの回答を読んだ後、これを行う別の方法を学びました-ツールボックス用のツールが増えました!+1
ScottCher

7

特定のデータベースベンダーは、アプリが単純にサブスクライブできる統合メッセージバスも提供しています。

別の方法は、Tibco / RVのようなメッセージバスを介してデータベースにデータを最初にルーティングし、それを単に「分岐」して、DBに行くストリームとアプリケーションに行くストリームにするか、Coherenceのようなキャッシュレイヤーを使用することですアプリとDBの間。


7

PostgreSQLのリッスン/通知

http://www.postgresql.org/docs/current/static/sql-notify.html

データベース内...

NOTIFY static_channel_name, 'static-message';

または関数/トリガー内:

perform pg_notify('dynamic-channel-name', 'dynamic-message');

データベースクライアントで:

LISTEN some_channel_name; --note the lack of quotes

LISTENクライアントは、PostgreSQLプロセスID、チャネル名、およびメッセージ値を受け取ります。

PostgreSQLの標準JDBCドライバーは通知を好みませんが、この目的にはhttps://github.com/impossibl/pgjdbc-ngドライバーを使用できます


5

別のOracleソリューション:Microsoftのドットネットフレームワークを使用して、Oracleのデータベース変更通知機能とODP.Net(ドットネットのOracleデータプロバイダー)を活用するアプリケーションを開発しました。これを使用して、データベースは実際に新しいデータが到着したときにドットネットアプリケーションに通知し、継続的なポーリングを避けることができます。上記のリンクは、まさにそれを行うためのOracleチュートリアルです。これがお役に立てば幸いです。

他のRDBMSについては知りません。


2

アプリケーションの1つ(ChromeとONLY Chromeのみにアクセス)で、sys_exec UDFで MySQLを使用しています。基本的に、なぜChromeなのか-WebSocketのサポートによるものです。

重要な更新/挿入/削除が発生すると、特定のトリガーに埋め込まれた新しく追加されたsys_exec機能を介して外部プログラムが呼び出されます。その時点で、すべてがリアルタイムで発生するため、ポーリングや複数のクエリを必要とせずに、接続されているすべてのクライアントにメッセージをリレーするために必要なすべてが揃っています。


1

Oracle GoldenGateとJava Persistence API(JPA)の組み合わせを使用して、Oracleデータベースだけでなく、DB2、Sybase、Microsoft SQL Server、MySQL、Teradataなどでもこれを行います。この機能については、http:// docsを参照してください。.oracle.com / middleware / 1212 / coherence / COHIG / golden_g.htm

GoldenGateが行うことは、データベーストランザクションログをフィルター処理可能なイベントストリームに変換し、ネットワーク上のどこでも消費できるようにすることです。関連するトランザクションをキャッシュ更新またはキャッシュ無効化に変換するために使用します。どちらもアプリケーションレベルのイベントをトリガーできます。たとえば、デスクトップまたはHTML5 Websocketアプリケーションにデータを完全にプッシュします。

(完全な開示のために、GoldenGateを使用する製品の1つでOracleで働いています。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.