0

概要:

すべてのデータをメモリに保持できず、切断し続けるクライアントと非常に大量のデータを同期するにはどうすればよいですか?

説明:

Web 上にデータを表示するリアルタイム (ajax/comet) アプリがあります。これは、ビューが Web 上にあり、モデルがサーバー上にあると考えるのが好きです。

サーバー上に多数のレコードがあり、それらすべてが常に追加/削除/変更されているとします。問題は次のとおりです。

-これは Web であるため、クライアントは多くの接続/切断を行う可能性があります。クライアントが切断されている間、データが変更されている可能性があり、再接続時にクライアントを更新する必要があります。ただし、データが非常に大きいため、再接続のたびにすべてのデータをクライアントに送信することはできません。

- 非常に多くのデータがあるため、明らかにクライアントにすべてを送信することはできません。数千のメッセージを含む Gmail アカウントや、世界中の Google マップを考えてみてください。

最初に、関連するデータのサブセットの完全なスナップショットがクライアントに送信され、その後は増分更新のみが送信されることを認識しています。これは、ある種のシーケンス番号を通じて行われる可能性があります... クライアントは「受信した最後の更新は #234 でした」と言い、クライアントは #234 と #current の間のすべてのメッセージを送信します。

また、クライアントビューがサーバーに100〜200のレコードを「表示」していることを通知することも認識しています。

ただし、これらすべてを自分でコーディングするという考えは嫌いです。ライブラリ(または少なくとも段階的なレシピ)がすでに存在している必要があるという一般的かつ一般的な問題があります。

Javaまたはnode.jsでこれを行うことを検討しています。他の言語で解決策が利用できる場合は、喜んで切り替えます。

4

1 に答える 1

1

pub/sub ソリューションを試してください。特定の開始時刻にクライアントをサーバー イベントにサブスクライブします。サーバーは、発生時刻に基づいてすべてのデータ変更イベントをログに記録します。所定の時間またはクライアントの再接続後、クライアントは最後の同期以降に変更されたすべてのデータ行のリストを要求します。すべてのロジックをサーバーに保持し、変更を同期するだけです。サーバー上で典型的な「select * from table where id in (select id from changed_rows where change_date > given_date)」ステートメントになり、最適化できます。

于 2013-06-17T12:36:54.253 に答える