0

概括:

如何与无法将所有数据保存在内存中并不断断开连接的客户端同步大量数据?

解释:

我有一个实时(ajax/comet)应用程序,它将在网络上显示一些数据。我喜欢将其视为 Web 上的视图和服务器上的模型。

假设我在服务器上有大量记录,所有这些记录都一直在添加/删除/修改。以下是问题:

- 这是网络,客户端可能有很多连接/断开连接。当客户端断开连接时,数据可能已被修改,重新连接时需要更新客户端。但是,由于数据太大,每次重新连接时都无法向客户端发送所有数据。

- 既然有这么多数据,客户端显然不能全部发送出去。想想拥有数千条消息的 gmail 帐户或带有……整个世界的谷歌地图!

我意识到最初会向客户端发送一些相关数据子集的完整快照,然后只会进行增量更新。这很可能通过某种序列号来完成……客户端会说“我收到的最后一个更新是#234”,客户端将发送#234 和#current 之间的所有消息。

我还意识到客户端视图会通知服务器它正在“显示”记录 100-200 “所以只向我发送那些”(可能是 0-300,无论策略如何)。

但是,我讨厌自己编写所有这些代码的想法。有一个足够普遍且足够普遍的问题,即必须已经有库(或至少是逐步的食谱)。

我希望在 Java 或 node.js 中执行此操作。如果有其他语言的解决方案,我愿意切换。

4

1 回答 1

1

尝试发布/订阅解决方案。在给定的开始时间为客户端订阅您的服务器事件。服务器根据发生的时间记录所有数据更改事件。在给定时间或重新连接客户端后,客户端会要求提供自上次同步以来所有更改的数据行的列表。您可以将所有逻辑保留在服务器上并同步更改。将导致服务器上出现典型的“select * from table where id in (select id from changed_rows where change_date > given_date)”语句,可以对其进行优化。

于 2013-06-17T12:36:54.253 回答