• 浪潮孙丕恕从信息时代到智能时代 人工智能价值将爆发式释放 2019-12-21
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
    • / 24
    • 下载费用:30 金币  

    重庆时时彩官网计划: 客户端同步服务端数据的方法及装置.pdf

    关 键 词:
    客户端 同步 服务端 数据 方法 装置
      专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    摘要
    申请专利号:

    CN201310574904.0

    申请日:

    2013.11.15

    公开号:

    CN103678494A

    公开日:

    2014.03.26

    当前法律状态:

    授权

    有效性:

    有权

    法律详情: 授权|||实质审查的生效IPC(主分类):G06F 17/30申请日:20131115|||公开
    IPC分类号: G06F17/30; H04L29/06 主分类号: G06F17/30
    申请人: 北京奇虎科技有限公司; 奇智软件(北京)有限公司
    发明人: 陈斌; 陈超; 杨银波; 艾忠元
    地址: 100088 北京市西城区新街口外大街28号D座112室(德胜园区)
    优先权:
    专利代理机构: 北京思睿峰知识产权代理有限公司 11396 代理人: 赵爱军
    PDF完整版下载: PDF下载
    法律状态
    申请(专利)号:

    CN201310574904.0

    授权公告号:

    ||||||

    法律状态公告日:

    2018.09.11|||2014.04.23|||2014.03.26

    法律状态类型:

    授权|||实质审查的生效|||公开

    摘要

    本发明公开了一种客户端同步服务端数据的方法及装置,属于数据库技术领域。所述方法包括:获取服务端的数据对象在第一时刻的全量数据;根据数据记录的版本号获取服务端的数据对象在第二时刻相对于第一时刻发生变化的增量数据,其中,所述第二时刻晚于所述第一时刻;合并所述全量数据和所述增量数据,得到数据对象在第二时刻的全量数据。根据本发明,能够减小客户端与服务端之间的交互次数以及交互传输的数据量,并能够降低客户端的存储消耗。

    权利要求书

    权利要求书
    1.  一种客户端同步服务端数据的方法,包括:
    获取服务端的数据对象在第一时刻的全量数据,其中,所述全量数据为所述数据对象的所有数据记录构成的集合;
    根据数据记录的版本号获取服务端的数据对象在第二时刻相对于第一时刻发生变化的增量数据,其中,所述第二时刻晚于所述第一时刻;
    合并所述全量数据和所述增量数据,得到数据对象在第二时刻的全量数据。

    2.  如权利要求1所述的方法,其中,所述数据对象具有多条数据记录,每条数据记录具有数据状态标识和版本号标识,数据状态包括表示数据记录未被删除的正常状态和表示数据记录已被删除的删除状态,当数据记录发生变化时,其版本号为所有数据记录中的最大版本号,所述变化包括增加、修改和删除,所述获取服务端的数据对象在第一时刻的全量数据,包括:
    从服务端获取所述数据对象在第一时刻的所有数据记录的最大版本号bgsp;
    从服务端获取所述数据对象中版本号小于等于bgsp的所有处于正常状态的数据记录,得到所述全量数据。

    3.  如权利要求2所述的方法,其中,每条数据记录还具有节点标识,所述从服务器获取所述数据对象中版本号小于等于bgsp的所有处于正常状态的数据记录,得到所述全量数据,包括:
    对所述数据对象中的数据记录按照版本号的降序+节点标识的降序进行排序;
    分页从所述数据对象中获取数据记录,其中,每页数据记录的获取过程为:将上一页数据记录的最小版本号和上一页的最后一条数据记录的节点标识作为同步点,从所述数据对象中获取位于所述同步点之后的版本号小于等于bgsp的预定数目条处于正常状态的数据记录,得到本页的数据记录,其中, 第一页数据记录的获取始于数据对象的第一条记录;
    对分页获取到的数据记录进行合并,得到所述全量数据。

    4.  如权利要求2所述的方法,其中,每条数据记录还具有节点标识,所述根据数据记录的版本号获取服务端的数据对象在第二时刻相对于第一时刻发生变化的增量数据,包括:
    对所述数据对象中的数据记录按照版本号的升序+节点标识的升序进行排序;
    分页从所述数据对象中获取数据记录,其中,每页数据记录的获取过程为:将上一页数据记录的最大版本号gsp和上一页的最后一条数据记录的节点标识作为同步点,从所述数据对象中获取位于所述同步点之后的版本号大于gsp的预定数目条数据记录,得到本页的数据记录,其中,所述第二时刻为最后一页数据记录的获取时刻,第一页数据记录的获取始于数据对象的第一条记录,且gsp采用bgsp;
    对分页获取到的数据记录进行合并,得到所述增量数据。

    5.  如权利要求4所述的方法,其中,每条数据记录还具有父节点标识,所述数据对象为数据库或者数据库的一个目录,所述目录为数据库中具有相同父节点标识的数据记录构成的集合。

    6.  如权利要求5所述的方法,其中,当所述数据对象为数据库的一个目录时,服务端按照如下方式修改数据库中某条数据记录的父节点标识:新增一条与原数据记录相同的数据记录,将新增的数据记录的父节点标识进行修改,并将原数据记录的数据状态标识修改为删除状态。

    7.  如权利要求6所述的方法,其中,当所述数据对象为数据库的一个目录时,所述方法还包括:对数据库的所有目录在第二时刻的全量数据进行合并,得到数据库在第二时刻的全量数据。

    8.  如权利要求1至7中任一项所述的方法,其中,在合并所述全量数据和所述增量数据时,在节点标识相同的情况下,版本号大的数据记录覆盖版本号小的数据记录。

    9.  一种客户端同步服务端数据的装置,包括:
    全量数据获取单元,适于获取服务端的数据对象在第一时刻的全量数据,其中,所述全量数据为所述数据对象的所有数据记录构成的集合;
    增量数据获取单元,适于根根据数据记录的版本号获取服务端的数据对象在第二时刻相对于第一时刻发生变化的增量数据,其中,所述第二时刻晚于所述第一时刻;
    数据合并单元,适于合并所述全量数据和所述增量数据,得到数据对象在第二时刻的全量数据。

    10.  如权利要求9所述的装置,其中,所述数据对象具有多条数据记录,每条数据记录具有数据状态标识和版本号标识,数据状态包括表示数据记录未被删除的正常状态和表示数据记录已被删除的删除状态,当数据记录发生变化时,其版本号为所有数据记录中的最大版本号,所述变化包括增加、修改和删除,所述全量数据获取单元进一步适于:
    从服务端获取所述数据对象在第一时刻的所有数据记录的最大版本号bgsp;
    从服务端获取所述数据对象中版本号小于等于bgsp的所有处于正常状态的数据记录,得到所述全量数据。

    说明书

    说明书客户端同步服务端数据的方法及装置
    技术领域
    本发明涉及数据库技术领域,具体涉及一种客户端同步服务端数据的方法及装置。
    背景技术
    在基于客户端/服务器的应用系统中,客户端需要获取存储在服务器上的数据库记录,并且,当服务器上的数据库记录发生更新时,需要保证客户端的数据库记录与服务器上的数据库记录保持一致,即客户端需要同步服务器的数据记录。
    现有的一种客户端同步服务端数据的方法是基于事件回放的机制,即当服务端某数据发生变化的时候,需记录下该数据的变化过程,然后基于这个变化过程,客户端拿到这个变化过程的数据,对这个过程进行重做,以保证客户端与服务端的数据记录一致。
    假如原始数据如下:
    NidpidstatusNv10012001300140015001600170018001900110001
    表1
    在本发明中,nid为节点的标识,节点为数据库中的一行记录;pid为父 节点的标识,父节点是子节点的上一级节点;status为节点的数据状态标识,包括表示数据记录未被删除的正常状态(用0标识)和表示数据记录已被删除的删除状态(用10标识),其中,服务端对于数据库记录的删除,均为逻辑删除,即做状态标记,并非真正意义上的删除(物理删除);nv为节点的版本号标识,当数据记录发生变化时,其版本号为所有数据记录中的最大版本号,所述变化包括增加、修改和删除。
    服务端对数据库进行了更新(增加、修改或者删除了一些记录),假如变化后的数据如下:
    nidpidstatusnv10012001300140015001600170018001970210001115031250413505
    表2
    在表2中,变化的数据用黑体字标识。则基于事件回放的机制,服务端将会记录4条事件记录,用于描述数据库发生了什么变化,事件记录如下:
    update9insert11insert12insert13
    表3
    在表3中,update表示数据记录的修改,insert表示数据记录的增加。
    客户端首先会从服务端获取这些事件记录,然后再通过nid把这些事件记录对应的数据记录取到本地进行合并,以实现增量同步。其中,在进行合并时,在节点标识相同的情况下,版本号大的数据记录覆盖版本号小的数据 记录。
    可以看出,根据现有的实现方式,客户端需要从服务端获取事件记录以及事件记录对应的数据记录,这使得客户端与服务端的交互次数较多,交互传输的数据量也较大;另外,客户端还需要额外的存储事件记录的开销;而且,服务端需要保证数据库的修改与这些事件记录保持一致,如果不一致,还需要兼容如何处理的问题,实现方式复杂。
    发明内容
    鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的客户端同步服务端数据的方法及装置。
    依据本发明的一个方面,提供了一种数据同步方法,包括:
    获取服务端的数据对象在第一时刻的全量数据,其中,所述全量数据为所述数据对象的所有数据记录构成的集合;
    根据数据记录的版本号获取服务端的数据对象在第二时刻相对于第一时刻发生变化的增量数据,其中,所述第二时刻晚于所述第一时刻;
    合并所述全量数据和所述增量数据,得到数据对象在第二时刻的全量数据。
    可选地,所述数据对象具有多条数据记录,每条数据记录具有数据状态标识和版本号标识,数据状态包括表示数据记录未被删除的正常状态和表示数据记录已被删除的删除状态,当数据记录发生变化时,其版本号为所有数据记录中的最大版本号,所述变化包括增加、修改和删除,所述获取服务端的数据对象在第一时刻的全量数据,包括:
    从服务端获取所述数据对象在第一时刻的所有数据记录的最大版本号bgsp;
    从服务端获取所述数据对象中版本号小于等于bgsp的所有处于正常状态的数据记录,得到所述全量数据。
    可选地,每条数据记录还具有节点标识,所述从服务器获取所述数据对 象中版本号小于等于bgsp的所有处于正常状态的数据记录,得到所述全量数据,包括:
    对所述数据对象中的数据记录按照版本号的降序+节点标识的降序进行排序;
    分页从所述数据对象中获取数据记录,其中,每页数据记录的获取过程为:将上一页数据记录的最小版本号和上一页的最后一条数据记录的节点标识作为同步点,从所述数据对象中获取位于所述同步点之后的版本号小于等于bgsp的预定数目条处于正常状态的数据记录,得到本页的数据记录,其中,第一页数据记录的获取始于数据对象的第一条记录;
    对分页获取到的数据记录进行合并,得到所述全量数据。
    可选地,每条数据记录还具有节点标识,所述根据数据记录的版本号获取服务端的数据对象在第二时刻相对于第一时刻发生变化的增量数据,包括:
    对所述数据对象中的数据记录按照版本号的升序+节点标识的升序进行排序;
    分页从所述数据对象中获取数据记录,其中,每页数据记录的获取过程为:将上一页数据记录的最大版本号gsp和上一页的最后一条数据记录的节点标识作为同步点,从所述数据对象中获取位于所述同步点之后的版本号大于gsp的预定数目条数据记录,得到本页的数据记录,其中,所述第二时刻为最后一页数据记录的获取时刻,第一页数据记录的获取始于数据对象的第一条记录,且gsp采用bgsp;
    对分页获取到的数据记录进行合并,得到所述增量数据。
    可选地,每条数据记录还具有父节点标识,所述数据对象为数据库或者数据库的一个目录,所述目录为数据库中具有相同父节点标识的数据记录构成的集合。
    可选地,当所述数据对象为数据库的一个目录时,服务端按照如下方式修改数据库中某条数据记录的父节点标识:新增一条与原数据记录相同的数据记录,将新增的数据记录的父节点标识进行修改,并将原数据记录的数据 状态标识修改为删除状态。
    可选地,当所述数据对象为数据库的一个目录时,所述方法还包括:对数据库的所有目录在第二时刻的全量数据进行合并,得到数据库在第二时刻的全量数据。
    可选地,在合并所述全量数据和所述增量数据时,在节点标识相同的情况下,版本号大的数据记录覆盖版本号小的数据记录。
    根据本发明的另一方面,提供了一种数据同步装置,包括:
    全量数据获取单元,适于获取服务端的数据对象在第一时刻的全量数据,其中,所述全量数据为所述数据对象的所有数据记录构成的集合;
    增量数据获取单元,适于根根据数据记录的版本号获取服务端的数据对象在第二时刻相对于第一时刻发生变化的增量数据,其中,所述第二时刻晚于所述第一时刻;
    数据合并单元,适于合并所述全量数据和所述增量数据,得到数据对象在第二时刻的全量数据。
    可选地,所述数据对象具有多条数据记录,每条数据记录具有数据状态标识和版本号标识,数据状态包括表示数据记录未被删除的正常状态和表示数据记录已被删除的删除状态,当数据记录发生变化时,其版本号为所有数据记录中的最大版本号,所述变化包括增加、修改和删除,所述全量数据获取单元进一步适于:
    从服务端获取所述数据对象在第一时刻的所有数据记录的最大版本号bgsp;
    从服务端获取所述数据对象中版本号小于等于bgsp的所有处于正常状态的数据记录,得到所述全量数据。
    可选地,每条数据记录还具有节点标识,所述全量数据获取单元按照如下方式从服务器获取所述数据对象中版本号小于等于bgsp的所有处于正常状态的数据记录,得到所述全量数据:
    对所述数据对象中的数据记录按照版本号的降序+节点标识的降序进行 排序;
    分页从所述数据对象中获取数据记录,其中,每页数据记录的获取过程为:将上一页数据记录的最小版本号和上一页的最后一条数据记录的节点标识作为同步点,从所述数据对象中获取位于所述同步点之后的版本号小于等于bgsp的预定数目条处于正常状态的数据记录,得到本页的数据记录,其中,第一页数据记录的获取始于数据对象的第一条记录;
    对分页获取到的数据记录进行合并,得到所述全量数据。
    可选地,每条数据记录还具有父节点标识,所述增量数据获取单元进一步适于:
    对所述数据对象中的数据记录按照版本号的升序+节点标识的升序进行排序;
    分页从所述数据对象中获取数据记录,其中,每页数据记录的获取过程为:将上一页数据记录的最大版本号gsp和上一页的最后一条数据记录的节点标识作为同步点,从所述数据对象中获取位于所述同步点之后的版本号大于gsp的预定数目条数据记录,得到本页的数据记录,其中,所述第二时刻为最后一页数据记录的获取时刻,第一页数据记录的获取始于数据对象的第一条记录,且gsp采用bgsp;
    对分页获取到的数据记录进行合并,得到所述增量数据。
    可选地,每条数据记录还具有父节点标识,所述数据对象为数据库或者数据库的一个目录,所述目录为数据库中具有相同父节点标识的数据记录构成的集合。
    可选地,当所述数据对象为数据库的一个目录时,服务端按照如下方式修改数据库中某条数据记录的父节点标识:新增一条与原数据记录相同的数据记录,将新增的数据记录的父节点标识进行修改,并将原数据记录的数据状态标识修改为删除状态。
    可选地,当所述数据对象为数据库的一个目录时,所述装置还包括目录合并单元,适于对数据库的所有目录在第二时刻的全量数据进行合并,得到 数据库在第二时刻的全量数据。
    可选地,所述数据合并单元在合并所述全量数据和所述增量数据时,在节点标识相同的情况下,版本号大的数据记录覆盖版本号小的数据记录。
    与现有技术相比,根据本发明的技术方案,在获取服务端数据对象的全量数据后,根据数据记录的版本号获取服务端数据对象的增量数据,再将全量数据和增量数据进行合并以实现数据同步,减少了客户端与服务端之间的交互次数较以及交互传输的数据量,降低了客户端的存储开销,并降低了数据同步的复杂度。
    上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
    附图说明
    通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
    图1示出了根据本发明一个实施例的客户端同步服务端数据的方法流程图;
    图2示出了本发明实施例中获取全局全量时客户端与服务端的交互示意图;
    图3示出了本发明实施例中获取全局增量时客户端与服务端的交互示意图;
    图4示出了本发明实施例中获取目录全量时客户端与服务端的交互示意图;
    图5示出了本发明实施例中获取目录增量时客户端与服务端的交互示意图;
    图6示出了根据本发明一个实施例的客户端同步服务端数据的装置结构图。
    具体实施方式
    下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
    图1示出了根据本发明一个实施例的客户端同步服务端数据的方法流程图。参照图1,所述方法包括:
    步骤102,获取服务端的数据对象在第一时刻的全量数据;
    所述数据对象可以为存储在服务端的数据库,此种情况下,客户端需要获取服务端的数据库在第一时刻的所有数据记录,即数据库的全量数据。如果数据库的数据量较大,获取整个数据库的全量数据的操作将会消耗很长时间,对服务端和客户端的压力均较大,因此,所述数据对象也可以是数据库的一个目录。在获取到数据库的每个目录的全量数据后,将所有目录的全量数据进行合并,则可以得到整个数据库的全量数据。
    其中,所述数据库具有多条数据记录,每条数据记录具有节点标识、父节点标识、数据状态标识和版本号标识,数据状态包括表示数据记录未被删除的正常状态和表示数据记录已被删除的删除状态,当数据记录发生变化时,其版本号为所有数据记录中的最大版本号,所述变化包括增加、修改和删除,所述目录为数据库中具有相同父节点标识的数据记录构成的集合。另外,服务端对于数据记录的删除,均为逻辑删除,即做状态标记,并非真正意义上的删除(物理删除)。
    步骤104,根据数据记录的版本号获取服务端的数据对象在第二时刻相对于第一时刻发生变化的增量数据,其中,所述第二时刻晚于所述第一时刻;
    由于当数据记录发生变化时,其版本号为所有数据记录中的最大版本号, 因此,可以根据数据记录的版本号来获取增量数据。例如,可以记录数据对象在第一时刻的所有数据记录的最大版本号bgsp,这样,在获取增量数据的过程中,如果某条数据记录的版本号大于bgsp,就可以认为该条数据记录为相对于第一时刻的一个增量数据。
    步骤106,合并所述全量数据和所述增量数据,得到数据对象在第二时刻的全量数据。
    由于版本号大的数据记录比版本号小的数据记录新,因此,在本发明实施例中,全量数据和增量数据的合并方式可以采用:在节点标识相同的情况下,版本号大的数据记录覆盖版本号小的数据记录。
    由上述可知,在本发明实施例提供的技术方案中,在获取完增量数据后,客户端将增量数据与全量数据进行一次合并,那么在这个时刻(获取完增量数据的时刻),客户端与服务端数据就保证了完全一致。相对于基于事件回放的数据同步机制,该技术方案减少了客户端与服务端之间的交互次数较以及交互传输的数据量,降低了客户端的存储开销,并降低了数据同步的复杂度。
    由于当数据记录发生变化时,其版本号为所有数据记录中的最大版本号,因此,在步骤102中,可以按照如下方式获取服务端的数据对象在第一时刻的全量数据:
    从服务端获取所述数据对象在第一时刻的所有数据记录的最大版本号bgsp;
    从服务端获取所述数据对象中版本号小于等于bgsp的所有处于正常状态的数据记录,得到所述全量数据(如果某条数据记录的版本号大于bgsp,说明该数据记录相对于第一时刻已经发生了变化,属于增量数据)。
    由于数据对象包括的数据记录的条数通常较多,一次性获取所有的数据记录对客户端及服务端都会造成压力,因此,作为一种可选方案,可以分页获取所述数据对象中的数据记录,然后再将各页的数据记录进行合并。分页获取数据记录的过程中,数据对象中的数据记录也可能时刻在发生着变化, 而且,服务端有可能用一条sql语句更新一批数据记录,造成多条数据记录的版本号相同(后文有详细分析),因此,在获取完一页数据记录后,需要记录一个同步点,以便于根据所述同步点来获取下一页的数据记录。
    基于以上分析,本发明实施例给出如下的分页获取数据记录以得到全量数据的方法:
    对所述数据对象中的数据记录按照版本号的降序+节点标识的降序进行排序;
    分页从所述数据对象中获取数据记录,其中,每页数据记录的获取过程为:将上一页数据记录的最小版本号和上一页的最后一条数据记录的节点标识作为同步点,从所述数据对象中获取位于所述同步点之后的版本号小于等于bgsp的预定数目条处于正常状态的数据记录,得到本页的数据记录,其中,第一页数据记录的获取始于数据对象的第一条记录;
    对分页获取到的数据记录进行合并,得到所述全量数据。
    也就是说,除了最后一页外,获取到的每页的数据记录的条数为所述预定数目,可以理解的是,最后一页包括的数据记录的条数小于等于所述预定数目。所述预定数目可以根据客户端以及服务端的处理能力来确定,例如,可以将其设置为100。
    类似地,本发明实施例还给出如下的分页获取数据记录以得到增量数据的方法:
    对所述数据对象中的数据记录按照版本号的升序+节点标识的升序进行排序;
    分页从所述数据对象中获取数据记录,其中,每页数据记录的获取过程为:将上一页数据记录的最大版本号gsp和上一页的最后一条数据记录的节点标识作为同步点,从所述数据对象中获取位于所述同步点之后的版本号大于gsp的预定数目条数据记录,得到本页的数据记录,其中,所述第二时刻为最后一页数据记录的获取时刻,第一页数据记录的获取始于数据对象的第一条记录,且gsp采用bgsp;
    对分页获取到的数据记录进行合并,得到所述增量数据。
    可选地,当所述数据对象为数据库的一个目录时,所述方法还包括:对数据库的所有目录在第二时刻的全量数据进行合并,得到数据库在第二时刻的全量数据。
    另外,当所述数据对象为数据库的一个目录时,在获取目录的增量数据时,客户端有可能无法感知对数据记录的父节点的修改所引起的数据记录的变化(后文有详细分析),为解决该问题,在本发明实施例中,服务端可以按照如下方式修改数据库中某条数据记录的父节点标识:新增一条与原数据记录相同的数据记录,将新增的数据记录的父节点标识进行修改,并将原数据记录的数据状态标识修改为删除状态。
    如前所述,本发明实施例在进行客户端与服务端的数据同步时,同步的数据对象可以是存储在服务端的数据库,也可以是数据库的一个目录。以下结合实例分别对这两种情况进行详细描述。在以下的描述中,将数据对象为数据库的同步分为全局全量同步和全局增量同步两个过程,将数据对象为目录的同步分为目录全量同步和目录增量同步两个过程。
    参照图2,本发明实施例中获取全局全量时客户端与服务端的交互过程如下:
    客户端在首次启动时可以请求全局全量同步,首先向服务端请求当前时刻数据库中所有数据记录的最大版本号bgsp,服务端可以通过执行sql查询语句来获取bgsp,并将获取到的bgsp返回给客户端;
    然后,客户端根据bgsp请求获取当前时刻数据库中第一页的所有正常节点(即版本号小于等于bgsp的所有正常节点),服务端通过执行sql查询语句来获取并返回符合条件的节点列表、gsp(当前页的数据记录的最小版本号)和spnid(当前页的最后一条数据记录的节点标识);
    其次,客户端将gsp和spnid发送到服务端,请求数据库中第二页的所有版本号小于等于bgsp的正常节点,服务端以gsp和spnid作为同步点定位到第二页,并返回符合条件的节点列表、gsp(指更新后的gsp)和spnid;
    依次类推,直到客户端获取到服务端的数据库中版本号小于等于bgsp的所有节点后,合并节点信息到本地缓存。
    在上述过程中,服务端对数据库中的数据记录是按照版本号的降序+节点标识的降序进行排序。
    由于上述获取全量数据的过程是分页获取的,可能在数据获取的过程中或者获取完全量数据之后的某个时刻,在服务端有部分数据被修改或者有节点新增和删除,因此,在做完全局全量同步之后,需要根据bgsp这个点,查询是否有新增或者变化的节点。当数据库中有发生变化的节点时,需要做全局增量同步,其中,全局增量同步的触发条件可以是:服务端主动通知客户端进行全局增量同步,或者,客户端向服务端询问数据记录的版本号是否发生了变化,并根据服务器的反馈来启动全局增量同步。
    参照图3,本发明实施例中获取全局增量时客户端与服务端的交互过程如下:
    全局增量同步被触发时,客户端首先将bgsp发送到服务端,服务端获取数据库中版本号大于bgsp的第一页数据记录,并向客户端返回第一页的节点列表、gsp(当前页的数据记录的最大版本号)和spnid(当前页的最后一条数据记录的节点标识);
    然后,客户端将gsp和spnid发送到服务端,服务端以gsp和spnid作为同步点定位到第二页,并返回版本号大于gsp的节点列表、gsp(指更新后的gsp)和spnid;
    依次类推,直到服务端遍历完数据库中的所有数据记录后,客户端合并节点信息到本地缓存;
    最后,客户端清除垃圾数据(同步过程中用到的临时变量,例如gsp和spnid等)。
    在上述过程中,服务端对数据库中的数据记录是按照版本号的升序+节点标识的升序进行排序,即按照版本号的升序对所有数据记录进行排序,对于版本号相同的多条数据记录,则进一步按照节点标识的升序进行排序。
    例如,未排序时的数据库记录如下:
    nidpidstatusnv1001200130054005501046005700180019001100021100212003
    表4
    则按照上述排序方式排序后的数据库记录如下:
    nidpidstatusnv1001200170018001900110002110021200350104300540056005
    表5
    在获取到全局全量数据和全局增量数据后,把增量获取的数据与全量获取的数据做一次合并,合并的规则为:nid相同的条件下,nv大的节点覆盖nv小的节点。当增量获取完成时,那么客户端获取到的节点数据即为该时刻,服务端最新的数据。
    以下对本发明实施例中引入spnid的原因进行分析说明。
    通常情况下,对数据节点的操作采用的是批量操作,即:一条sql语句更新一批数据,如果需要保证每个节点的nv不相同的话,则需要对每一个节 点进行单独更新,这样的结果则会严重影响数据库系统的性能,因此,在本发明实施例中nv可以重复,并且不限制nv重复的数量(即具有相同nv的节点数量),以解决批量操作的问题。由于采用的是增量同步,所有的同步点会依赖于nv,因此,无论在获取全量数据或者是增量数据时,都是通过nv排序,然后再基于gsp来获取数据。但是如果nv重复,会引入另外一问题,即:
    假如有1000条节点的记录,nv分别为1,2,3,4,....,1000(nv不重复),每次获取100条记录,通过10次可以把这1000条记录获取完成。当获取到第一页后,会把第一页中最大或最小(根据排序方式的不同)的nv返回给客户端,这个nv值即为前述gsp,当获取到第二页时,则会直接取nv>100,然后再往后获取100条即为第二页的数据,依次类推。但是,当出现nv重复的情况下,按照上述的的方案就不能准确的定位到第二页的数据了。因此,在gsp的基础上,本发明实施例中引入了spnld的概念,将gsp与spnld进行结合来作为同步点。具体情况如下:
    假设记录如下(nv重复):
    nidpidstatusnv10012001300140015001600170018001900110001
    表6
    假设客户端每次获取5条记录,第一次获取全量过程(以mysql查询为例),sql语句如下:
    select*from table where 1 order by nv desc limit 1;//获取bgsp
    此时,返回的bgsp为1。
    获取全局全量(客户端会把bgsp,gsp,spnid传给服务端进行获取,第一次获取时,gsp等于bgsp,spnid默认为0)时,服务端逻辑的伪代码如下:

    此时,第一页返回nid为10、9、8、7、6的这5条数据,返回的gsp为1,spnid为6。
    需要注意的是,当全量获取完成后,第一次获取增量时,增量的gsp为bgsp,之后每做完一次全局增量,服务端都会返回一个新的gsp,客户端每次获取增量时,便会通过将这个gsp发送给服务端来获取。
    当全量获取完成后,由于某些操作,发生了新增或者修改,表6的数据变化为:
    nidpidstatusnv1001200130014001501046001700180019001
    100011100212003
    表7
    表7中数据的变化用黑体字表示,相对于表6,增加了nid为11和12的两条记录,nid为5的这条记录被删除,因此,能够通过gsp这个点,获取到这个点之后所有变化节点的数据(包含增加、修改和删除)。
    在获取全局增量时,以sql为例(上面例子获得的gsp为4),假设客户端每次获取10条增量,伪代码则如下:

    此时会返回nv为2,3,4的3条记录,同时返回gsp,spnid,此时,gsp为4,spnid为12。
    在获取完全局增量后,客户端将全局增量与本地数据进行一次合并,假如此时服务端数据没有再变化,那么这个时刻(获取完全局增量的时刻),客户端与服务端数据就保证了完全一致。
    以上介绍的是全局全量和全局增量的方案。但是,对于移动端设备(网速慢),由于进行一次全局全量同步,可能数据量会比较大,在手机等2G网络的设备下,如果数据量太大,进行一次全局全量同步,将会消耗很长的时间,严重影响使用速度,因此,还可以采用基于目录(或者叫层级的全量同步与增量同步)的同步方案。
    参照图4,本发明实施例中获取目录全量时客户端与服务端的交互过程如下:
    当用户进行到某个目录时,首先向服务端请求当前时刻此目录中所有数 据记录的最大版本号bdsp(为区别于全局全量时的bgsp,此处采用bdsp),服务端可以通过执行sql查询语句来获取bdsp,并将获取到的bdsp返回给客户端;
    然后,客户端根据bdsp请求获取当前时刻该目录中第一页的所有正常节点(即版本号小于等于bdsp的所有正常节点),服务端通过执行sql查询语句来获取并返回符合条件的节点列表、dsp(当前页的数据记录的最小版本号)和spnid(当前页的最后一条数据记录的节点标识);
    其次,客户端将dsp和spnid发送到服务端,请求该目录中第二页的所有版本号小于等于bdsp的正常节点,服务端以dsp和spnid作为同步点定位到第二页,并返回符合条件的节点列表、dsp(指更新后的dsp)和spnid;
    依次类推,直到客户端获取到该目录中版本号小于等于bdsp的所有节点后,合并节点信息到本地缓存。
    在上述过程中,服务端对目录中的数据记录是按照版本号的降序+节点标识的降序进行排序。
    对于目录,如果获取了一次完整的全量同步后,以后,便可通过增量的方式来获取数据,减少数据的传输与服务端查询数据带来的压力。
    参照图5,本发明实施例中获取目录增量时客户端与服务端的交互过程如下:
    目录增量同步被触发时,客户端首先将bdsp发送到服务端,服务端获取该目录中版本号大于bdsp的第一页数据记录,并向客户端返回第一页的节点列表、dsp(当前页的数据记录的最大版本号)和spnid(当前页的最后一条数据记录的节点标识);
    然后,客户端将dsp和spnid发送到服务端,服务端以dsp和spnid作为同步点定位到第二页,并返回版本号大于dsp的节点列表、dsp(指更新后的dsp)和spnid;
    依次类推,直到服务端遍历完该目录中的所有数据记录后,客户端合并节点信息到本地缓存;
    最后,客户端清除垃圾数据(同步过程中用到的临时变量,例如dsp和spnid等)。
    在上述过程中,服务端对该目录中的数据记录是按照版本号的升序+节点标识的升序进行排序。
    可见,目录全量与全局全量的同步流程类似,目录增量与全局增量的同步流程也类似,只是在查询相关数据时,会增加一个pid的查询条件(即在sql语句中增加“where pid=...”的查询条件),但是存在一个问题,假如未发生更新时的数据如下(pid即标识目录,其可以描述节点的层级关系):
    nidpidstatusnv11012101310141015101610171018101910110101
    表8
    假如我们更改了nid为5这条记录的pid值,将pid由1更改为5,更改后的数据如下:
    nidpidstatusnv11012101310141015804610171018101910110101
    表9
    根据前面的描述可知,假如获取目录全量的dsp为1,spnid为5,那么在获取pid=1这层目录的增量时,对于nid=5这一条记录,将无法感知 到这一条记录的变化。假设目录增量的伪代码如下(以sql语句为例):
    nodes=select*from table where pid=1 and nv>dsp limit 10;
    由于nid为5这一条记录,pid已经不等于1了,此时,目录增量获取时,无法感知到该节点的变化。因此,对于修改pid这种行为的操作,服务端可以保持pid不变,在逻辑上标识该节点删除,再新增加一条记录来实现,即:先删后加,按这种方案,修改后的数据如下:
    nidpidstatusnv1101210131014101510461017101810191011010111805
    表10
    见上表黑体字部分,先对nid为5的这条记录做了逻辑上的删除,而pid并未改变,增加了一条nid为11的新记录。那么再次通过上面的sql语句查询时,将可以正确感知到该节点变化。
    与上述客户端同步服务端数据的方法相对应,本发明实施例还提供一种客户端同步服务端数据的装置。
    图6示出了根据本发明一个实施例的客户端同步服务端数据的装置结构图,参照图6,所述装置包括全量数据获取单元10、增量数据获取单元20和数据合并单元30。
    全量数据获取单元10适于获取服务端的数据对象在第一时刻的全量数据,其中,所述数据对象为数据库或者数据库的一个目录,所述数据库具有多条数据记录,每条数据记录具有节点标识、父节点标识、数据状态标识和版本号标识,数据状态包括表示数据记录未被删除的正常状态和表示数据记录已被删除的删除状态,当数据记录发生变化时,其版本号为所有数据记录 中的最大版本号,所述变化包括增加、修改和删除,所述目录为数据库中具有相同父节点标识的数据记录构成的集合,所述全量数据为所述数据对象的所有数据记录构成的集合。
    其中,全量数据获取单元10可以按照如下方式来获取全量数据:从服务端获取所述数据对象在第一时刻的所有数据记录的最大版本号bgsp;从服务端获取所述数据对象中版本号小于等于bgsp的所有处于正常状态的数据记录,得到所述全量数据。具体过程可以是:
    对所述数据对象中的数据记录按照版本号的降序+节点标识的降序进行排序;
    分页从所述数据对象中获取数据记录,其中,每页数据记录的获取过程为:将上一页数据记录的最小版本号和上一页的最后一条数据记录的节点标识作为同步点,从所述数据对象中获取位于所述同步点之后的版本号小于等于bgsp的预定数目条处于正常状态的数据记录,得到本页的数据记录,其中,第一页数据记录的获取始于数据对象的第一条记录;
    对分页获取到的数据记录进行合并,得到所述全量数据。
    增量数据获取单元20适于根据数据记录的版本号获取服务端的数据对象在第二时刻相对于第一时刻发生变化的增量数据,其中,所述第二时刻晚于所述第一时刻。
    其中,增量数据获取单元20可以按照如下方式获取增量数据:
    对所述数据对象中的数据记录按照版本号的升序+节点标识的升序进行排序;
    分页从所述数据对象中获取数据记录,其中,每页数据记录的获取过程为:将上一页数据记录的最大版本号gsp和上一页的最后一条数据记录的节点标识作为同步点,从所述数据对象中获取位于所述同步点之后的版本号大于gsp的预定数目条数据记录,得到本页的数据记录,其中,所述第二时刻为最后一页数据记录的获取时刻,第一页数据记录的获取始于数据对象的第一条记录,且gsp采用bgsp;
    对分页获取到的数据记录进行合并,得到所述增量数据。
    数据合并单元30适于合并所述全量数据和所述增量数据,得到数据对象在第二时刻的全量数据。数据合并单元30在合并所述全量数据和所述增量数据时,在节点标识相同的情况下,版本号大的数据记录覆盖版本号小的数据记录。
    另外,当所述数据对象为数据库的一个目录时,服务端按照如下方式修改数据库中某条数据记录的父节点标识:新增一条与原数据记录相同的数据记录,将新增的数据记录的父节点标识进行修改,并将原数据记录的数据状态标识修改为删除状态。
    可选地,当所述数据对象为数据库的一个目录时,所述装置还包括目录合并单元(图未示),适于对数据库的所有目录在第二时刻的全量数据进行合并,得到数据库在第二时刻的全量数据。
    综上所述,根据本发明实施例的技术方案,在获取完增量数据后,客户端将增量数据与全量数据进行一次合并,那么在这个时刻(获取完增量数据的时刻),客户端与服务端数据就保证了完全一致。相对于基于事件回放的数据同步机制,该技术方案减少了客户端与服务端之间的交互次数较以及交互传输的数据量,降低了客户端的存储开销,并降低了数据同步的复杂度。
    在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
    在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
    类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时 被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求?;さ谋痉⒚饕蟊仍诿扛鋈ɡ笾兴魅芳窃氐奶卣鞲嗟奶卣?。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
    本领域那些技术人员可以理解,可以对实施例中的设备中的??榻凶允视π缘馗谋洳⑶野阉巧柚迷谟敫檬凳├煌囊桓龌蚨喔錾璞钢???梢园咽凳├械哪?榛虻ピ蜃榧楹铣梢桓瞿?榛虻ピ蜃榧?,以及此外可以把它们分成多个子??榛蜃拥ピ蜃幼榧?。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
    此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求?;さ氖凳├娜我庵欢伎梢砸匀我獾淖楹戏绞嚼词褂?。
    本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件??槭迪?,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的 信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
    应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序??山庑┑ゴ式馐臀??!  ∧谌堇醋宰ɡ鴚ww.www.4mum.com.cn转载请标明出处

    关于本文
    本文标题:客户端同步服务端数据的方法及装置.pdf
    链接地址://www.4mum.com.cn/p-6181111.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    [email protected] 2017-2018 www.4mum.com.cn网站版权所有
    经营许可证编号:粤ICP备17046363号-1 
     


    收起
    展开
  • 浪潮孙丕恕从信息时代到智能时代 人工智能价值将爆发式释放 2019-12-21
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 山东11选5任选8 至尊彩票游戏 体育彩票31选7走势图1 黑龙江十一选五自助 福彩3d开机号 秒速时时彩 快乐十分开奖走势图 福彩3d和值走势图2000 山东时时彩11选5走势图 麻将客户端 山西快乐10分开奖结果 股票推荐3只暴涨股 买彩票和买的网站吗 排列3字谜 辽宁35选7 全球股票指数stock