2017-07-08 13 views
0

私はJavascriptのWebアプリケーションを持っており、Node.JSをサーバーコンポーネントとして使用しています。データベースをポーリングして値を得る最良の方法は何ですか?

私は自分のアプリケーションをデータベースに統合したいと思っています。このデータベースには、頻繁に(数分ごとに)変更できる「ステータス」というフィールドを持つテーブルがあります。

ステータスフィールドの値がリアルタイムでわかるようにWebアプリケーションに通知します。

私の現在の方法:

私はcurrenltyは、私のNode.jsサーバにHTTPリクエストを送信するJavscriptでAJAX機能を持っています。 Node.jsサーバーはデータベースからレコードを選択し、その結果をAJAX関数に返します。この関数は結果を画面に表示します。毎秒機能を実行するための間隔を設定しました。

これは素晴らしいオプションのようではなく、私のサーバー上で多くのトラフィックを引き起こしています。

SQLフィールドをリアルタイムで監視する適切な方法は何ですか?

+1

変数をメモリ内に保持し、データベースのポーリングをまったく行わないのはなぜでしょうか?ステータスが変化したら、メモリ内とデータベース内の値を更新します。これはあなたのユースケースとリソースを条件にしています – vol7ron

+0

私は状態の変更を制御しません。このフィールドはサードパーティのデータベースからのものです。私は価値が何であるか知るために私のアプリが必要です。 – cleverpaul

+0

サードパーティのデータベースですか?あなたはそれに直接アクセスできますか?何かがチェックされずに更新されたとき、または接続をリフレッシュしてそれをあなたにプッシュするときに、あなたはどのようなことを知っていますか?あなたが管理しているデータベースであれば、Firebaseをチェックすることをお勧めします。そうでなければ、私は他人の言うことを知りたいのです。 Webソケットとメモリ管理を備えた簡単な設定のようです。 – vol7ron

答えて

1

すべてのクライアントがデータベース内の同じ値に関心を持ち、データベースの状況によってポーリングが発生しないシナリオができない場合は、クライアントからサーバーへのポーリングを移動して、サーバーがすべてのクライアント。これにより、サーバーとデータベースサーバーの負荷が大幅に制限されます。

次に、各クライアントをwebSocket(またはsocket.io)接続を使用してサーバーに接続させることができます。データベースの値が変更されたとき(およびそのときのみ)、各クライアントに更新メッセージを送信できますwebSocket接続。これは、より少ないCPUと帯域幅、およびクライアントバッテリを使用します。

関連する問題