アプリケーションは、できるだけデータベースから最新のデータを更新する必要があります。そのような場合、タイマーベースのデータベースの要求(ポーリング)の他に、データを取得する他の方法はありますか?
私はMS SQL Server 2008(および.NETアプリケーション+ Entity Framework)を使用していますが、他の種類のデータベースについても知りたいです。
アプリケーションは、できるだけデータベースから最新のデータを更新する必要があります。そのような場合、タイマーベースのデータベースの要求(ポーリング)の他に、データを取得する他の方法はありますか?
私はMS SQL Server 2008(および.NETアプリケーション+ Entity Framework)を使用していますが、他の種類のデータベースについても知りたいです。
回答:
SQL Server 2005+のService Brokerはこれを実行できます。
申し訳ありませんが、他のRDBMSについてはわかりません
Oracleでは、組み込みのDBMS_ALERTパッケージを使用してこれを容易にできます。
DBMS_ALERTは、データベースイベント(アラート)の非同期通知をサポートします。このパッケージとデータベーストリガーを適切に使用することにより、アプリケーションは、データベース内の関心のある値が変更されたときに自身に通知できます。
グラフィックツールがデータベーステーブルのデータのグラフを表示しているとします。グラフィックツールは、データを読み取り、グラフ化した後、読み取ったばかりのデータをカバーするデータベースアラート(WAITONE)を待つことができます。他のユーザーがデータを変更すると、ツールは自動的に起動します。必要なのは、トリガーが起動されるたびにシグナル(SIGNAL)を実行するトリガーをデータベーステーブルに配置することだけです。
特定のデータベースベンダーは、アプリが単純にサブスクライブできる統合メッセージバスも提供しています。
別の方法は、Tibco / RVのようなメッセージバスを介してデータベースにデータを最初にルーティングし、それを単に「分岐」して、DBに行くストリームとアプリケーションに行くストリームにするか、Coherenceのようなキャッシュレイヤーを使用することですアプリとDBの間。
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ドライバーを使用できます
別のOracleソリューション:Microsoftのドットネットフレームワークを使用して、Oracleのデータベース変更通知機能とODP.Net(ドットネットのOracleデータプロバイダー)を活用するアプリケーションを開発しました。これを使用して、データベースは実際に新しいデータが到着したときにドットネットアプリケーションに通知し、継続的なポーリングを避けることができます。上記のリンクは、まさにそれを行うためのOracleチュートリアルです。これがお役に立てば幸いです。
他のRDBMSについては知りません。
アプリケーションの1つ(ChromeとONLY Chromeのみにアクセス)で、sys_exec UDFで MySQLを使用しています。基本的に、なぜChromeなのか-WebSocketのサポートによるものです。
重要な更新/挿入/削除が発生すると、特定のトリガーに埋め込まれた新しく追加されたsys_exec機能を介して外部プログラムが呼び出されます。その時点で、すべてがリアルタイムで発生するため、ポーリングや複数のクエリを必要とせずに、接続されているすべてのクライアントにメッセージをリレーするために必要なすべてが揃っています。
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で働いています。)