场景
客户端A不定时地把本地数据同步到server上,然后另一个客户端B(app)从server把数据同步下来,汇总展示
客户端A数据结构
原始的数据(来自客户端A),每条都有create_time和modify_time,用于表示这条记录的创建时间和修改时间。同时系统里还有latest_backup_time字段,用来表示上次备份的时间。客户端每次备份,都会以这3个字段作为条件,找出需要备份的数据,上传到server
服务端数据结构
由于历史遗留问题,服务端收到备份数据之后,没有做其他的处理,而是直接写入数据库
客户端B同步逻辑
客户端B有latest_sync_time字段,用于表示最后一次从server同步的时间。这个字段是每次同步之后,服务端确定并返回的,客户端把这个时间戳记下来。请求同步时,再带上这个时间戳。然后服务端就以create_time,modify_time,latest_sync_time这3个字段作为条件,找出需要下发的数据,返回客户端B
查询哪些数据需要下发的逻辑是:
这个方案的关键是,如何确定latest_sync_time。由于create_time和modify_time都是客户端A的本地时间,服务端也没有字段表示服务端入库的时间,所以服务端返回latest_sync_time到客户端B的时候,不能用服务器接收到同步请求的时间,而要用本次查询到的数据中,最后的create_time或modify_time
其他方案
上面这个方案主要在确定latest_sync_time的时候比较麻烦。根源在于服务端入库的时候,没有把入库的服务端时间保存下来。如果在服务端有sync_time,那么比较起来就很容易,只要找到sync_time在latest_sync_time和now之间的数据就可以了。这些数据就是从上次同步到当前时刻的新数据,然后只要把当前的时间,放在响应里一起返回客户端,客户端刷新latest_sync_time就行了
另外,上面这个方案把判断insert和update的逻辑也放在了服务端。其实服务端也可以把满足的数据直接发回客户端B,然后在客户端判断id是否存在,就可以确定该数据是新增的,还是需要update的
这个方案感觉会更简单,而且由于sync_time是由服务端控制的,也可以避免由于客户端A修改本地系统时间引起的逻辑错误,应该是一个更优的方案。但是由于现在server里已经存在没有记录sync_time的历史数据,迁移起来比较麻烦,而且这种方案也需要改动server现有的备份逻辑,所以最后还是决定采用第一种方案。新开发的系统,建议采用第二种方案
分享到:
相关推荐
ownCloud桌面客户端介绍ownCloud桌面客户端是一种工具,用于将ownCloud Server中的文件与您的计算机同步。下载二进制包请参阅下载页面源代码ownCloud桌面客户端是在Git中开发的。 由于Git可以轻松地分叉和改进源代码...
SymmetricDS是一种数据库和文件同步解决方案,与平台无关,启用Web且与数据库无关。 SymmetricDS的构建旨在使跨两万个数据库和文件系统的数据复制变得快速,轻松和灵活。 我们专注于通过WAN或LAN在大型节点网络上...
由于本系统是有点儿对等网络中,所有的内部主机状态需要与所有客户端同步,因此当一个新的主机被分配,他们有各种各样的旧主机的内部数据。 数据包: 服务器到主机-服务器发送到主机时,它提供带有发出数据包
采用sql server数据库,数据容量巨大,快速,稳定是建立大型人才网站的好程序,采用全新的生成静态页技术;数据处理方面采用全存储过程实现,可快速实现大批量数据处理。 网软志成人才招聘系统2021升级功能: 1、职位...
SQLServer是windows平台.NET架构下标配数据库解决方案,与Oracle、MySQL共同构成...镜像技术实现了位于不同物理服务器上的两个SQLServer实例数据同步,在镜像集群中,SQLServer实例具有三种角色;Principal:具有完整的
@xviz/parser parser-用于消费XVIZ数据的客户端解码器和同步器。 @xviz/schema -XVIZ协议的验证和架构。 @xviz/server支持完整XVIZ协议的完整服务器模块。 和例子: 将开放数据集(例如和转换为XVIZ协议的样本...
含两32位和6位,免费使用,附带详细的使用说明书。 TFTP ... TFTP采用UDP而不是TCP进行传输,通常用于将固件升级传输到网络设备,如路由器,交换机...Syslog是一种远程记录数据的服务。 例如,它允许监视无视频网络设备。
7.2.4 一种通用的出错处理方法 7.2.5 XACT_ABOR 7.2.6 Raiserro 7.3 小结 7.4 练习 第8章 确定专业的编程风格 8.1 源代码控制的概念 8.1.1 Microsoft Visual SourceSafe简介 8.1.2 管理Visual SourceSafe数据库 ...
深入浅出地介绍了ADO与ADO.NET编程,介绍用这两种API编写适用于各种数据源和前端的数据访问代码,介绍如何用ADO技术支持遗留系统,如何利用ADO.NET的特殊功能,如XML支持与切断数据,还介绍了结构修改、数据同步、多维...
介绍用这两种API编写适用于各种数据源和前端的数据访问代码,介绍如何用ADO技术支持遗留系统,如何利用ADO.NET的特殊功能,如XML支持与切断数据,还介绍了结构修改,数据同步,多维累计之类的功能。书中详细介绍了...
mpi 是一种数据同步工具,可帮助节点服务器与客户端共享动态数据。 使用 npm 安装 npm install mpi 用一些数据创建一个服务器: var mpi = require('mpi'); var server = mpi.Server(8080, { stuff: 5 }); 创建...
Jiefo FlowMIS 3.0是一个基于SQL Server 7/2000的工作流开发平台,基于这一产品可以开发办公自动化、业务流程、远程报表、工程项目、远程销售等各种软件系统,而这一高端平台领域目前由国外软件Notes和Exchange所...
根据长沙移动绩效管理思路,绩效管理的信息化平台不能只是专门针对某一种绩效 管理方法来构建,必须是一个可选择配置可伸缩的绩效管理系统平台。在这个可配置可 伸缩的绩效管理系统平台上,能够根据不同部门不同...
Elliotte Rusty Harold 介绍了 Subversion —— 一种开放源码、多用户版本控制系统,支持非 ASCII 文本和二进制数据。通过 Elliotte 的介绍,您可看到如何在 Eclipse 中配置 Subversion 支持(通过 Subclipse 插件)...
当我们已经在使用一种编程语言时,为什么还要在客户端和服务器之间来回发送所有应用程序数据呢? 让我们共享对象。 这就是Synchronous.io的用途:它使您可以在后端和前端之间共享JavaScript对象。 它们是自动同步的...
Elliotte Rusty Harold 介绍了 Subversion —— 一种开放源码、多用户版本控制系统,支持非 ASCII 文本和二进制数据。通过 Elliotte 的介绍,您可看到如何在 Eclipse 中配置 Subversion 支持(通过 Subclipse 插件)...
7.2.4 一种通用的出错处理方法 7.2.5 XACT_ABOR 7.2.6 Raiserro 7.3 小结 7.4 练习 第8章 确定专业的编程风格 8.1 源代码控制的概念 8.1.1 Microsoft Visual SourceSafe简介 8.1.2 管理Visual SourceSafe数据库 ...
2、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的 3、分布式读写,更新请求转发,由leader实施 4、更新请求顺序进行,来自同一个client的更新请求按其发送顺序...
根据我做以来所学的知识,我决定为编写一个新演示,演示一种称为状态同步的技术。 现在,这是我推荐使用Godot进行网络物理学的方法。 客户端和服务器都运行物理模拟。 状态快照以高速率从服务器发送到客户端。 ...