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

article/2025/8/28 21:02:57

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

问题

  • 从一个例子说起,我们的客户端从服务器获取数据,这里假定获取文章。第一次使用,我们获取服务器端最新发表的几篇文章。
  • 我们可以每次都重新获取,但这样费时又费流量。好的设计应该是我们把获取过的文章存下来,下次只获取最新发表的文章。
    
  • 这样就有个问题,如果某一篇文章,我们已经获取过了,可有一天它更新了。。。。
    
  • 还有个问题,文章持续获取下去,我们手机没空间了。。。。
  • 如何使我们客户端能保存有限的文章,并且同时可以得到更新呢?
    

解决方法

  • 为了保证客户端不存过多文章,我们应该设置一个过期期限,当缓存的文章比较老旧,删除掉即可。
  • 为了保证客户端的文章能够得到更新,服务器的文章表应该有个最后修改时间字段。同时服务器端保存客户端最后一次获取文章的时间,保存在session里。
    

1、文章表设计

  • | index | content | ts | dl |
  • index 索引;
  • content 内容;
  • ts 文章最后一次的修改时间。把ts的格式设计为:NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,即默认为当前的时间戳,且随着文章更改,自动更新为更改时间。
  • dl 文章是否被删除了;

2、客户端查询文章时服务器端的工作

  1. 从session中查询该用户对文章的最后一次获取时间,last_gotten_ts;
  2. 如果有该记录,说明只需要给客户端发送last_gotten_ts只后的文章(dl != 1 AND ts > last_gotten_ts);
  3. 如果没有该记录,表示是这个用户第一次获取,那发送最近的若干条文章(dl != 1 ORDER BY index DESC LIMIT 10)。
  4. 将session里的last_gotten_ts设置为结果集里最大的ts.

3、客户端查询到最新文章时的工作

  1. 根据接收到的文章,新增或更新本地缓存。这里使用REPLACE INTO更合适。同时,根据dl字段判断是否已经被删除,如果是,删除本地的文章;
  2. 删除过期的缓存文章;
  3. 展示文章列表,注意这里应该以index,而不是ts排序。这样保证文章是以创建时间排序,而非更新时间。

4、向前查询

  1. 这种情况适用于上拉列表时加载更多文章的功能。目标是获取某个文章之前的文章。因此客户端请求时,应该带着最后一条文章的index,服务器返回该index之前的若干文章。注意这时候,不应该存储last_gotten_ts。

5、为什么将last_gotten_ts存到session而不是数据库

  1. 我们也可以新建一个表。类似这样的结构: | user_index | last_gotten_ts | 但是这样会有如下两个问题:
  2. 用户在其它设备登录了,这时候服务器会以为是从老设备上请求的,只发送last_gotten_ts后的文章,导致两个设备相互干扰。
  3. 当客户端好长时间没有使用时,可能导致服务器这段时间累积的文章量比较大。而事实上当客户端再次使用时,客户端没必要全部接受,只需要接收最新的若干文章(就像第一次使用时那样)。
  4. 使用session则可以巧妙解决这两个问题。
  5. 两个设备相互干扰,显然不是我们希望的。而session是跟设备相关的,在服务器端每个设备有自己的session,这样的话相当于每个设备都相互独立,可以巧妙避开干扰。
  6. 如果我们把session的过期时间设置恰当,当客户端再次使用时,旧session已经过期。新的session里并没有任何查询历史。正如客户端第一次使用那样。这样就完美地解决了服务器端文章累积的问题。

6、客户端的文章“断层”

  1. 当客户端长时间不用,后面再使用时,因为没有全部获取,可能导致与缓存的老文章之间不连续,有“断层”。这样的话,如果用户再想加载更多文章时,可能我们的代码会跳过这个断层,直接加载老文章之前的文章。这样的话这个“断层”就没机会获取到了,丢失了。
  2. 如何解决这个问题呢?其实很简单,只要设置好客户端本地的过期期限即可。客户端每次启动,都检查是不是有缓存文章过期了,如果过期了,就删除之。很明显,这个时间期限不能大于服务器端的session的过期时间。

7、服务器端的文章的dl字段

  1. 这个字段既然是删除的意思,那为什么不直接删除该记录呢?这个字段的实质目的,是要告诉客户端该记录被删除了。如果直接删除了该记录,客户端无从得知这个删除信息,那本地的缓存也就无法删掉。
  2. 如果已经被删了,还留在表里,是不是不太好?的确不好。服务器定期检查这些被删记录的删除时间(ts),如果超过一定期限了,那也删除之。注意这个期限不能小于客户端缓存的时间,即:保证在客户端删除了本地缓存记录之后,再删除该记录。

转载于:https://my.oschina.net/jiaozebo/blog/600010


http://chatgpt.dhexx.cn/article/U4WonKcH.shtml

相关文章

数据实时同步或抽取上收的技术分析

原文:http://blog.csdn.net/dsg_gulibin/article/details/1696365 1 实现数据集中的技术手段分析比较 根据业界提供数据同步或抽取的解决方案来看,主要包括以下几大类: l 存储复制技术 l 数据库复制技术 l …

时间同步/集群时间同步/在线/离线

目录 一、能够连接外网 二、集群不能连接外网--同步其它服务器时间 一、能够连接外网 1.介绍ntp时间协议 NTP(Network Time Protocol)网络时间协议,是用来使计算机时间同步的一种协议,它可以使计算机对其服务器或时钟源做同步…

如何实时同步数据到StarRocks

我们知道,是StarRocks基于Doris开发的,它在多表连接查询的性能方面引领OLAP市场,是一个很好用的结构化数据仓库。但是一直没有很好的工具能够实现业务数据库的数据实时同步到StarRocks分布式数据仓库集群中,本文将带领读者一起来通…

文件实时同步

rsync remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的、数据在内存缓存区完成之后还没有写入到磁盘中去、所以有时候要同步到磁盘中去的,而rsync说白了跟复制差不多、能将一个文件从一个地方复制到另外一个地方的、但是他也可以实现跨主机复…

系统间通讯实现数据信息实时同步解决方案

项目开发阶段遇到一个需求,描述大致就是同一个用户在A系统数据库保存的数据信息与在B系统数据库保存的数据信息要保持同步。当A系统用户修改了个人信息,A系统后台在将用户修改后的信息入库的同时也会向B系统发送消息,让B系统后台进行自动数据…

一文带你玩转实时数据同步方案

1、概述 1.1、目标 实时数据同步主要实现从源数据库到目标数据库的实时数据同步。源数据主要支持mysql数据库,目标数据包括mysql数据库和hbase数据库。 下面是实时数据同步的数据流转图,mysql的增量订阅数据经过canal和kafka,数据最终实时…

两台服务器同时写文件 怎么做同步,两台服务器做实时数据同步

两台服务器做实时数据同步 内容精选 换一换 DCS Memcached即将下线,部分Region已暂停售卖,建议使用Redis4.0/5.0。本章节主要描述Memcached主备实例。Memcached主备实例在单机实例基础上,增强服务高可用以及数据高可靠性。Memcached主备实例具…

实时数据同步方案

一.Flume收集各数据库日志,准实时抽取到HDFS 安装HDP,包含Flume 方案优点: 1.配置简单,不用编程:只要在flume.conf文件中配置source、channel及sink的相关属性 2.采用普通SQL轮询的方式实现,具有通用性&…

如何实现数据自动化的实时同步?

企业在日常业务中,比如总分支机构之间、数据中心之间、不同节点之间、跨国业务之间等,都需要将文件及时的传输,以供协同使用。所以,很多企业会选择一些同步工具或软件。 谈到文件同步备份大家使用较多的可能是Rsync、同步盘等一些…

像素是什么,一个像素有多大,像素和分辨率的关系

图片的像素和分辨率 对于像素和分辨率这两个词,主要见于图片和显示设备上。只要你用到手机里的照相功能,你都要接触到这两个概念。只是大多数人都是一知半解,而更多的人却根本就不知道,白白浪费了手机里500万、800万像素的摄影头&…

屏幕尺寸、分辨率、DPI、PPI

屏幕尺寸 下面这张图是华为荣耀7的尺寸图,图上写的是5.2英寸。我们所说的这个5.2英寸是手机屏幕对角线的长度。 我们平时是不用英寸这个单位的,我们用的是毫米,厘米,米这些单位。那么英寸和毫米,厘米之间怎样的换算关…

像素(Pixel)、DPI与PPI一看就明白

像素(Pixel)、DPI与PPI 像素(Pixel)DPI 英文全写是(Dots Per Inch,每英寸点数)PPI 英文全写是(Pixels Per Inch,每英寸像素数)比喻来区分应用(这张图熟悉吗)1.分辨率啥意思&#xff…

关于像素、分辨率、PPI、DPI等概念的分析

关于影像图的比例尺和分辨率:https://blog.csdn.net/liliiii/article/details/40261953 当我们说到 像素、分辨率、DPI、PPI等专业术语的时候,一般会涉及到图像、屏幕、打印机等等。 像素(Pixel)为图像显示的基本单位,…

分辨率 PPI DPI概念定义详解

我们在开发中,涉及到UI显示时,经常会遇到的一些概念,比如分辨率,ppi,dpi等,这些概念,在百度百科中,发现都有对它们的定义,一些博客中,也有对这几个概念的对比…

DPI与PPI的区别

开发中不免会遇到分辨率、DPI、PPI和屏幕尺寸等术语,那就弄弄清楚这些概念的真正含义。 分辨率 分辨率这个词在很多地方都有,比如相机、视频、扫描仪。这里说的就是显示器的分辨率。显示器是由一个个像素点(pixel)所组成的,一般所说的显示器…

传感器尺寸、像素、DPI分辨率、英寸、毫米的关系

虽然网上有很多这种资料,但是太过于复杂,每个人的说法都不一样,看的让人云里雾里的,我总结了一下,不知道对不对! 1. 1英寸25.4mm 2. 传感器尺寸:传感器的尺寸是指传感器的大小,一般…

dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

一、基本概念 dip : Density independent pixels ,设备无关像素。dp :就是dippx : 像素dpi :dots per inch , 直接来说就是一英寸多少个像素点。常见取值 120,160&…

什么是 PPI、DPI 及 像素、分辨率的区别?

什么是 PPI、DPI 及 像素、分辨率的区别? AbstractPPIDPI像素 Pixels分辨率 Resolution Abstract 笔者通过本篇文章重点来阐明相对迷惑的PPI、DPI概念,PPI 和 DPI 是处理图像时需要深入理解的概念,两者都指的时分辨率或清晰度,但…

DPI、像素与分辨率的区别和联系

DPI(Dot Per Inch) 表示打印分辨率,指每英寸长度上的点数。DPI 又可细分为水平分辨率和垂直分辨率,例如一张 “1英寸*1英寸” (1英寸2.54cm)的图片,如果它的水平分辨率是100 dpi,垂直…

一文详解像素、DPI、分辨率之间的关系

1.像素 像素:是指在由一个数字序列表示的图像中的一个最小单位,称为像素。 像素可以用一个数表示,比如一个“0.3兆像素”数码相机,它有额定30万像素;也可以用一对数字表示,例如“640x480显示器”&#xff0…