关于服务器的差异化(另说增量)更新

php中文网
发布: 2016-06-23 13:20:36
原创
1159人浏览过

不明白要如何做,目前属于服务器小白

比如两个用户,服务器数据目前有10条,a和b都更新了
过了一会,服务器有更新,数据从10条增加到了15条

a更新了,app本地的数据从10条变成了15条;但是b没更新,还是10条;

再过了一会,服务器数据又更新了,数据从15条增加到了20条


那我怎么让a只增加更新的5条(15到20的),让b更新10条(10到20的)呢?

商汤商量
商汤商量

商汤科技研发的AI对话工具,商量商量,都能解决。

商汤商量 36
查看详情 商汤商量


回复讨论(解决方案)

我自己来吧

把当前数据序号(这里就用id)的最大值传给app,app记录下来

一开始A和B同时进行更新,他俩都是10

更新的时候,给服务器发数据序号(这里就用id)这个过去,服务器通过select * from XXX where id >= app本地数据序号进行查询

A更新的时候(从10条变成了15条)那么当前这个id是15;B没进行更新,他还是10;

再次更新的时候,同理,服务器只会给A发送16到20的数据,对于B服务器发送11到20的数据,让他们增量更新

针对于简单的逻辑(只是对数据的新增),上面的部分已经解决了

但这里又出现一个新问题,服务器的数据进行更改或者标记删除?怎么办?

那么你需要看下面的处理:
新增一个字段mark一开始设置为0

一开始A和B同时进行更新(都更新了10条数据),把mark为0的都更新过去了,本地的mark为0

现在对表中的数据更新(从10到15),对里面的某条数据进行修改(第3条),对第5条进行删除(标记为-1);现在服务器的数据mark标记10到15的为1(1到10的还是不变为0)

A进行了更新(从10到15),他本地的mark变成了1;B没更新mark本地还是0;

服务器的数据再次更新(从15到20)
这时A和B都更新,A给服务器传mark的值为1,服务器查找比mark大的标记(15到20条数据)发给A;同理,给B发送mark大于0的标记(10到20条数据);他俩也能达到差异更新

现在来看看上面的,如果对数据进行修改了,怎么办?
假如上面所说的服务器对第3条数据进行了修改,那么我们约定mark+2为修改的,app在碰到mark+2的,就要对这条数据进行更新,具体更新客户端来做;同样标记删除的,我们约定为-1,那是标记不显示出来;

现在问题又来了

假如目前服务器的mark标记已经达到了5000,一个app他从未更新,现在还是0(类似情况也适用于新安装的客户端);那么他需要同时更新到5000(可能数据有十来万),这怎么办?


所以要加一个限定,我们假设app上传本地mark的时候,服务器判断,他和服务器中最大的mark相差超过50,我们只给其发送最大-50的数据(用在这里就是4950到5000的数据列),这样就减少了客户端的压力

那么,可能就要问了,期间的数据怎么办?

首选丢弃。。第二选择,可以选择一个小版本,对这部分的处理。

不过参考微信和qq的数据,他们也是对这部分进行删除的,我们还给她保留可点。。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号