設計上の問題があります。データを表示するためにリアルタイム システムにサブスクライブするアプリケーションがあります。基本的に、クライアントがサーバーに接続し、現時点でのデータのスナップショットをダウンロードし、ライブ更新を購読すると、すぐに UI に表示されます。
私たちが抱えている問題の 1 つは、複数のリアルタイム レポートを開くことができることです。これは、複数の接続と、必要のないデータの重複があることを意味します。したがって、すべてのデータを保持してレポートに提供するための中央データ リポジトリを作成して、1 つのソケット接続のみを使用し、1 つのデータ セットがネットワークを通過するようにします。
私が抱えている問題はこれです。レポートがデータ リポジトリをサブスクライブすると、現時点でのスナップショットが取得され、その後ライブ アップデートが受信されます。つまり、リポジトリがサーバーからのライブ更新で内部キャッシュを更新し、それらの更新をサブスクライブされたレポートに送信しています。
別のレポートがリポジトリに接続するときは、現在のデータをダウンロードして更新を購読する必要もあります。ただし、スナップショットのダウンロード中に更新が入った場合、それらはレポートに表示されません。また、スナップショットのダウンロード中にキャッシュをロックすることもできません。これは、レポート 2 がスナップショットを取得している間にレポート 1 の更新が停止するためです。
レポート 1 が引き続き更新を取得し、レポート 2 が無害なスナップショットをダウンロードし、その間に見逃したすべての更新と将来の更新を受信し始めるようにするにはどうすればよいですか?
これが明確でない場合は申し訳ありません。私は自分の問題を説明するのが常に得意というわけではありません:) 入ってくるデータは基本的にテーブルの行であり、それをツリーにまとめます。それらは「行」のキーフィールドで識別でき、キャッシュには各「行」の最新のコピーが保存されます
前もって感謝します!