当数据对于客户端来说太大时,在不可靠的客户端和服务器之间同步数据结构

时间:2011-05-15 19:17:07

标签: ajax design-patterns client-server comet data-synchronization

摘要:

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

说明:

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

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

- 这是网络,客户端可能有很多连接/断开连接。当客户端断开连接时,数据可能已被修改,并且在重新连接时需要更新客户端。但是,每次重新连接时,都不能向客户端发送所有数据,因为数据太大了。

- 由于数据太多,客户端显然无法全部发送。想想一个拥有成千上万条消息的Gmail帐户或谷歌地图......整个世界!

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

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

然而,我讨厌自己编写所有这些的想法。有一个足够普遍且常见的问题,必须有库(或至少是逐步的配方)。

我希望用Java或node.js来做这个。如果有其他语言的解决方案,我愿意转换。

1 个答案:

答案 0 :(得分:1)

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