3

設計上の問題があります。データを表示するためにリアルタイム システムにサブスクライブするアプリケーションがあります。基本的に、クライアントがサーバーに接続し、現時点でのデータのスナップショットをダウンロードし、ライブ更新を購読すると、すぐに UI に表示されます。

私たちが抱えている問題の 1 つは、複数のリアルタイム レポートを開くことができることです。これは、複数の接続と、必要のないデータの重複があることを意味します。したがって、すべてのデータを保持してレポートに提供するための中央データ リポジトリを作成して、1 つのソケット接続のみを使用し、1 つのデータ セットがネットワークを通過するようにします。

私が抱えている問題はこれです。レポートがデータ リポジトリをサブスクライブすると、現時点でのスナップショットが取得され、その後ライブ アップデートが受信されます。つまり、リポジトリがサーバーからのライブ更新で内部キャッシュを更新し、それらの更新をサブスクライブされたレポートに送信しています。

別のレポートがリポジトリに接続するときは、現在のデータをダウンロードして更新を購読する必要もあります。ただし、スナップショットのダウンロード中に更新が入った場合、それらはレポートに表示されません。また、スナップショットのダウンロード中にキャッシュをロックすることもできません。これは、レポート 2 がスナップショットを取得している間にレポート 1 の更新が停止するためです。

レポート 1 が引き続き更新を取得し、レポート 2 が無害なスナップショットをダウンロードし、その間に見逃したすべての更新と将来の更新を受信し始めるようにするにはどうすればよいですか?

これが明確でない場合は申し訳ありません。私は自分の問題を説明するのが常に得意というわけではありません:) 入ってくるデータは基本的にテーブルの行であり、それをツリーにまとめます。それらは「行」のキーフィールドで識別でき、キャッシュには各「行」の最新のコピーが保存されます

前もって感謝します!

4

2 に答える 2

0

私があなたが正しいと理解した場合、あなたはあなたのシステムの3つの部分を持っています:

  1. レポートに関する情報を書き込むリアルタイムシステム
  2. 情報が保存されるキャッシュサーバー
  3. この情報を取得するクライアント

右?

もしそうなら、私があなたなら、私はキャッシュサーバーのマネージャーを開発し、キャッシュサーバーでの作業に使用するリアルタイムシステムとクライアント用の2つのAPIを作成します。私は、一度に書く人がいない、またはすべての人が読む人がいないというルールにとどまります。キューを作ります。1つはクライアントの要求用で、もう1つはリアルタイム用です。そして、そのキューの同期メカニズムが必要です。

私は仕事のための次の方法を見ます:

リアルタイムシステムが新しい情報を書き込む場合:

  1. 現在更新中のレポートのクライアントリーダーがあります

    1.1キャッシュマネージャーは、これらのレポートのすべての情報を2番目のストアに書き込みます

    マネージャーは、新しい情報があることを確認すると、新しいリーダーリクエストを停止してキューに入れ、読み取りを開始したすべてのスレッドが終了するまで待機し、2番目のリポジトリから最初のリポジトリに更新します。

  2. 読者なし

    2.1。変更されたレポートに関する情報をメインストアブロックリーダーに配置します

リアルタイムシステムが本当にリアルタイム(リアルタイムプロセッサで動作)であり、毎回書き込む場合は、2つのストアをマージし、その間リーダーを停止するためのタイミングを追加する必要があります。

于 2012-05-24T03:16:19.050 に答える