Android客户端与服务器端数据同步

Android 客户端数据和服务器端的同步 今天研究的主题是:客户端的数据刷新,如何实现和客户端数据库的数据的同步,同 阅读详情

应用场景

假设我们在做一个通讯录软件,我们可以在多个客户端对服务端的数据进行增删改。那么这篇文章中我们要解决的问题是如何在客户端与服务端只传输经过增删改操作的数据,来使得客户端与服务端的数据是同步的。

名词解释

Anchor:同步锚点,用时间戳来表示,用来发现两端数据变化的部分

客户端表设计

每条记录包含两个用来同步用的字段:
status : 用来标识记录的状态
anchor : 记录服务端同步过来的时间戳

anchor含义
0本地新增
-1标记删除
1本地更新
9已同步

服务端表设计

modified : 服务端修改记录的时间戳

双向同步过程

初始状态下,我们假设客户端和服务端的表各有两条数据
客户端:

idnamephonestatusanchor
1Ken1861234567892
2Jim1388888888893

服务端:

idnamephonemodified
1Ken186123456782
2Jim138888888883

此时,客户端与服务端的数据是完全同步好了的

Client增加1条记录
idnamephonestatusanchor
1Ken1861234567892
2Jim1388888888893
3Tim1234567800
Client修改1条记录
idnamephonestatusanchor
1Ken1861234567892
2Jim010-1234567813
3Tim1234567800

注:因为上面的数据不是从服务端同步过来的,所以anchor默认为0

Client发送本地更新
SELECT * FROM table WHERE status < 9

客户端执行上面的SQL语句,找出客户端需要同步到服务端的记录。通过网络串行的发送给服务端。上一条请求没有得到回应的话,就不能进行下一个请求。
下表中的数据是发送的同步消息

idnamephonestatusanchor
2Jim010-1234567813
3Tim1234567800
Server处理同步消息

服务端串行的收到客户端发送过来的数据,首先处理第一条数据

idnamephonestatusanchor
2Jim010-1234567813

服务端收到请求后需要对比客户端的anchor和服务端的modified,只有服务端modified=客户端anchor才能继续同步,否则说明客户端在上一次同步后服务端更新过数据,需要解决冲突后才能继续,接着根据status的值为1,那么服务端执行UPDATE语句

UPDATE table SET (name, phone) VALUES (?, ?) WHERE id = ?

其次,处理第二条数据

idnamephonestatusanchor
3Tim1234567800

如果得知anchor = 0,直接执行INSERT 语句

INSERT INTO table (id, name, phone) VALUES(?, ?, ?)

服务端经过这两次操作后,数据表如下

idnamephonemodified
1Ken186123456782
2Jim010-123456786
3Tim123456788
Client根据响应更新本地记录

服务端处理完数据后,还要响应客户端的请求,如下

idstatusanchor
296
398

收到响应后,客户端就开始执行UPDATE了

UPDATE table SET status = ?, anchor = ? WHERE id = ?

客户端现在的数据表如下:

idnamephonestatusanchor
1Ken1861234567892
2Jim010-1234567893->6
3Tim1234567890->8
Server增加一条数据并更新一条数据
idnamephonemodified
1Ken0000000011
2Jim010-123456786
3Tim123456788
4Bill8888888810
Client向Server请求数据

因为服务端modified字段代表的是时间戳,所以Max(anchor)表示客户端最近一次同步的时间,如果存在服务端modified > Max(anchor),说明服务端需要向客户端同步数据。
服务器端执行下面的SQL语句:

SELECT * FROM table WHERE modified > Max(anchor)

返回下表中的数据:

idnamephonemodified
1Ken0000000011
4Bill8888888810
Client处理同步消息

客户端根据增量数据更新本地表,处理数据时,只能更新状态为已同步或者不存在的数据

idnamephonestatusanchor
1Ken0000000092->11
2Jim010-1234567896
3Tim1234567898
4Bill88888888910
客户端删除记录
逻辑删除记录
idnamephonestatusanchor
1Ken00000000-115
2Jim010-1234567896
3Tim1234567898
4Bill88888888910
客户端发送消息到服务端

根据status < 9,将逻辑删除的记录发送至服务端,服务端收到消息后,将该记录移至deleted_table(相当于时光机,以后可以进行数据的恢复)表中

idnamephonemodified
1Ken0000000016
服务端响应客户端的请求
idstatusanchor
1-116
客户端收到响应

客户端直接进行物理删除

服务端删除记录

如果客户端从服务端获取的增量信息中包含删除记录的消息,则客户端直接进行物理删除

Android 架构之路 (1)-- Android 客户端与服务器的数据交互总结 本文总结了Android客户端与服务器进行交互时,采用RESTful API +Json的交互方式,针对不同的数据形式以及不同的解析方法,如有不足之处,欢迎指正。 阅读详情

相关推荐

基于Labview2012实现的双通道信号源(课程设计)

双通道信号源,产生8种波形,能进行调制,带信号幅度与频率扫描功能,波形可存储与导入

qq_40617082的博客 1461

Android Studio多个设备之间怎么同步配置?

如果需要在另一台设备恢复配置,在Settings Repository配置仓库的git地址后执行Overwrite Local即可。Overwrite Remote:上传配置,用本地配置覆盖仓库。Overwrite Local:下载配置,用仓库配置覆盖本地。我是在Gitee码云上创建的,也可以在Github上创建。回到gitee仓库页面刷新,就能看到上产到的配置文件。Merge:将仓库配置和本地配置进行合并。在Gitee创建一个仓库后,复制仓库地址。2.配置Gitee URL。1.创建保存配置的仓库。

wkk_1281573890的博客 1464

京瓷扫描驱动安装_京瓷喷头拆解和供墨原理剖析

在工业喷头打印领域,京瓷喷头作为主流喷头广泛应用于喷墨行业,目前京瓷喷头市面上销售主要有两个系列:KJ4A和KJ4B。其中KJ4A系列设计是用于油性墨水,例如UV墨水,主要用在广告领域;而KJ4B设计用于水性墨水,例如活性、分散墨水等,主要用在数码印花领域。最近我们团队对京瓷喷头进行了拆解分析,本期和大家分享一下我们对京瓷喷头拆解和喷头供墨原理的研究。京瓷喷头介绍1. KJ4A系列(油性)如下图所...

weixin_39883906的博客 1676

Android时间与服务器同步方案

在部分场景里,应用对时间的要求比较严苛,比如金融类app,股票类、期货等,对交易区间的判断是非常重要的。这就需要客户端的时间与服务器时间或者是世界标准时间同步,而不能简单地获取本地时间就可以了。

xiaoerbuyu1233的博客 1802

1104全部报表版本号-银监会报表

G4B_Ⅲ(a)X1《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(现期风险暴露法)(第一档)》G4B_Ⅲ(b)X1《与非中央交易对手的证券融资交易对手信用风险违约风险计算表(权重法)(第一档)》G4B_Ⅲ(a1)X2《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(标准法)(第二档)》Ⅲ(a)X2《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(现期风险暴露法)(第二档)》Ⅲ(a1)X1《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(标准法)(第一档)》

数字化老司机 6300

从加权最小二乘(WLS)到IAA:手把手推导DOA估计中的迭代自适应核心公式

本文深入解析了从加权最小二乘(WLS)到迭代自适应算法(IAA)在DOA估计中的数学推导与应用。通过动态调整加权矩阵,IAA在低快拍数、相干源等复杂场景中展现出卓越性能,显著提升角度分辨率和检测概率。文章详细介绍了算法核心步骤、工程优化策略及前沿发展,为雷达探测和无线通信领域提供重要参考。

weixin_30847865的博客 291

Android 客户端如何与服务器时间同步

这次分享一个简单但是很实用的功能. 开发app经常会涉及获取当前时间这项功能, 大部分情况不需要特别精准, 但是遇到一些统计类的需求, 就需要精准的时间, 比如 : 需要统计消息送达时间, 服务器记录发送时间, 客户端记录接收时间, 两个时间取差值, 就可以得到消息延迟时间;导致问题的原因是客户端造成的, 因为手机的时间难免有些用户会自己设置, 而且即使没有设置,个别手机上的时间也可能不一致;此时, 我们需要同步服务器的时间,让本地时间和服务器时间保持一致;

qq_23992393的博客 4017

避坑指南:WSL2网络模式修改导致无法上网的解决方案(附备份还原技巧)

本文深入解析WSL2默认网络隔离机制,并提供三种安全的端口互通方案,重点推荐通过配置Windows防火墙规则实现稳定访问。同时,针对网络配置修改可能引发的无法上网问题,给出了从重置配置到系统级备份的完整恢复指南,确保开发环境安全可靠。

jj890的博客 781

【Android】【功能设计】离线数据同步方案

这里考虑的是本地数据不会被其它用户修改的情况,类似于微信,离线任务都是自己要发出的消息,不会和网络数据产生冲突 对于多个离线用户,同时修改同一份数据的情况,不适合使用此方案,大多时候也不允许离线使用 查询数据 有网的情况下,从网络下载数据 以网络作为最新版本的情形:清空本地数据,将网络数据存储到数据库 以本地作为最新版本的情形:本地不存在Id则插入到数据库,本地存在则跳过 新增,修改,...

天天向上 Up Up Up (*^▽^*) 6130

使用VLC库实现视频播放器(WPF版)

使用wpf制作一个视频播放器 一、 LibVLCSharp介绍 LibVLCSharp是基于VideoLAN的LibVLC库的.NET平台的跨平台音频和视频API。它提供了一个全面的多媒体API,可以跨移动、服务器和桌面使用,以呈现视频和输出音频。支持Mono、.NET Framework和.NET核心运行时。在vs工具中,只需要安装截图中得两个nuget包。 二、视频播放器的实现 视频播放器的实现需要用到两个比较nuget包中提供的类,MediaPlayer类。MediaPlayer类型用于控

cangqiongxiaoye的博客 1万+

华为od 面试八股文_测试/测试开发_01_含答案

华为od面试八股文_测试/测试开发_01_含答案

MISAYAONE的博客 3816

多个Android客户端同步服务器端表中数据架构分析

需求:Android客户端有N个,服务器端只有一个,客户端会不定时的到服务器端同步数据。 思路分析:     由于客户端的个数不确定,而且是不定时的到服务器端同步数据,所以应该由客户端来维护何时发起请求.     客户端和服务器端都维护一个TableVersion表,服务器端某个数据表中的数据改变时同时修改服务器端的TableVersion表.如下图: table1中添加了

chenming1990118的专栏 1142

基于VSCode+clangd插件打造高效C++开发环境之四:clangd配置

本文介绍如何配置VSCode+clangd插件进行高效C++开发。重点内容包括:1)生成compile_commands.json文件,通过ninja工具提取编译命令并使用gen_compdb脚本转换;2)配置clangd命令行参数,如设置后台索引、并行度等;3)编写.clangd配置文件,调整编译标志和诊断选项;4)添加.clang-format文件定义代码风格;5)在VSCode中添加远程服务器工作目录。配置完成后需重启clangd服务使更改生效。文章还提供了MTK/QCOM等不同平台生成compile

5072

基于android的宠物服务APP的设计与实现

摘要:基于Android的宠物服务APP采用C/S架构,整合宠物信息管理、健康咨询、饮食规划等功能,为用户提供一站式宠物养护解决方案。系统使用Android Studio开发客户端,搭配Spring Boot/MongoDB等后端技术,实现了数据同步、个性化推荐等关键技术。该应用通过测试优化确保性能稳定,有效提升宠物饲养的科学性和便利性。未来将持续升级智能推荐等功能,满足不断变化的宠物服务需求。(149字)

qq_1744828575的博客 833

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数据库小组第N次小组会议

时间:5.30晚,9:30 ~ 11:30 主题:讨论android app与服务器之间数据同步的技术选型与实现 与会人:陈兆庭,黄志鹏,吴雪晴 讨论内容: 大体分析 关于数据同步,整体上有两部分,用户身份认证与数据同步。我们暂时没有查用户身份认证的问题,而主要查找了数据同步问题的解决方案。 同步问题,大致分这几个部分:服务器端的技术选型,android端数据选型,数据传输协议,同步策略。 服务...

weixin_30807779的博客 99

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

基于XMPP的Android即时通讯应用设计方案。

这个文章想写了好久没有动笔。感觉都有点生疏了。 之前在一片文章里提过Android Xmpp做IM的事。做了几个月自己有了更深的了解。 Android IM应用,方案 :openfire + asmack 对于大多数IM应用,这个方案还是不错的。我之前对这个XMPP适用移动通信产生质疑(比如:通信效率低,网络穿透能力差)。不过现在我还是比较看好他的。 先说个成功案例吧--环信。环信就是基于

SunnyCoffee Blog 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android消息推送(一)--AndroidPn(XMPP协议)Demo版到正式上线

前言: 最近公司需要android的消息推送,在网上找了很多消息推送的例子,都是无法运行. 经过一段时间的研究,终于把例子运行起来了.现在共享出来,共同学习. 在下载的文件里面在bin目录下有run.bat文件直接双击即可运行.然后在浏览器里面输入 http://127.0.0.1:7070即可,如果在eclipse中运行了客户端即可在服务器端看到.这个很简单,不是本文的重点.现在主要

539

linux搭建seafile_CentOS7+seafile搭建私有云盘测试过程记录

CentOS7+seafile搭建私有云盘测试过程记录2017-11-01 08:00:0048点赞339收藏43评论自从360云盘免费取消后,网上能用的免费并且比较方便的网盘几乎只有百度了,公司同事同事间经常用百度的云盘给我共享资料,百度云盘现在如果不买会员,下载速度十分的**。十分不爽。作为一个假装是极客的技术攻城狮,一直想给自己组一台NAS用,把笔记本上、手机上、台式机上的数据全放在一块最好...

weixin_39815435的博客 638

APP后端 | 02- Android客户端(APP)与服务器端(JavaEE)整合的架构

Android客户端(APP)与服务器端(JavaEE)整合的架构 转载于:https://www.cnblogs.com/wanqinlong/articles/5605593.html

a69186150的博客 528

java 服务器 android 客户端_Android客户端与云服务器进行网络通信

多写技术文档,多写技术文档,多写技术文档,重要的事情说三遍......-------------------------------------------------------------------------------------------------------------------功能需求:Android客户端解析和显示云服务器返回的xml文件。思路:涉及到Android端应用和...

weixin_34701288的博客 230
上一篇: 学校Android客户端共享上网的原理
下一篇: Java实现单例模式
coder_ken
博客等级 码龄12年 14粉丝 25原创
评论 16
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值