ポーリングは、データベースからアプリのデータを更新する唯一の方法ですか?
-
16-10-2019 - |
質問
アプリケーションには、データベースからできるだけ新しく更新されるデータが必要です。そのような場合、タイマーベースの要求(ポーリング)データベースに加えて、データを取得する他の方法はありますか?
MS SQL Server 2008(および.NET Applications + Entity Framework)を使用していますが、他のタイプのデータベースについても知りたいと思います。
解決
サービスブローカー SQL Server 2005+の場合、これを行うことができます。
申し訳ありませんが、他のrdbmsがわかりません
他のヒント
Oracleでは、ビルトインを使用できます DBMS_ALERTパッケージ これを容易にするため。
DBMS_ALERTは、データベースイベントの非同期通知(アラート)をサポートしています。このパッケージとデータベースのトリガーを適切に使用することにより、データベースの関心のある値が変更されるたびにアプリケーションが自分自身に通知できます。
グラフィックツールがデータベーステーブルからいくつかのデータのグラフを表示しているとします。グラフィックツールは、データを読み取り、グラフ化した後、読み取られたデータをカバーするデータベースアラート(WaitOne)で待機できます。他のユーザーによってデータが変更されると、ツールは自動的に目覚めます。必要なのは、トリガーが起動されるたびに信号(信号)を実行するデータベーステーブルにトリガーを配置することです。
特定のデータベースベンダーは、アプリが単純に購読できる統合されたメッセージバスも提供します。
- Oracle Advanced Keuing
- MQSeriesを備えたIBM DB2 (現在はWebSphere MQと呼ばれています)
- sybase rtms
別の方法は、最初にデータをデータベースにルーティングすることです。 TIBCO/RV そして、単に「分岐」し、DBに入るストリームで、またはアプリケーションに行くか、キャッシュレイヤーを使用します コヒーレンス アプリと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
リスニングクライアントは、PostgreSQLプロセスID、チャネル名、およびメッセージ値を受け取ります。
PostgreSQL用の標準のJDBCドライバーは通知が好きではありませんが、 https://github.com/impossibl/pgjdbc-ng この目的のためのドライバー
別のOracleソリューション:MicrosoftのDotNetフレームワークを使用してアプリケーションを開発しました。 データベースの変更通知 ORACLEの機能ODP.NET(DOTNETのOracle Data Provider)と組み合わせて。これを使用して、データベースは実際に新しいデータが到着したときにdotnetアプリケーションに通知し、絶え間ないポーリングを避けることができます。上記のリンクは、まさにそれを行うためのOracleチュートリアルです。これがあなたを助けることを願っています。
他のRDBMSについては知らない。
当社のアプリケーションのいずれか(Trough ChromeとChromeのみにアクセス)については、MySQLを使用しています sys_exec udf。基本的に、なぜ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で働いています。)