具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
图1给出了本申请一个示例性实施例提供的计算机***的结构框图。该计算机***包括:终端101和服务器102。
示例性的,终端101包括智能手机、平板电脑、电子书阅读器、MP3播放器、MP4播放器、膝上型便携计算机和台式计算机中的至少一种;服务器102包括一台服务器、多台服务器(多个网络节点103)、云计算平台和虚拟化中心中的至少一种。
示例性的,终端101运行有客户端,终端101通过客户端与服务器进行数据交互。示例性的,客户端可以是任意类型应用程序的客户端,例如,客户端可以是游戏程序的客户端,游戏程序可以是策略游戏(Strategy Game)、多人在线战术竞技游戏(MultiplayerOnline Battle Arena Games,MOBA)程序、大逃杀射击游戏程序、虚拟现实(VirtualReality,VR)应用程序、增强现实(Augmented Reality,AR)程序、三维地图程序、虚拟现实游戏、增强现实游戏程序、第一人称射击游戏(First-Person Shooting Game,FPS)程序、第三人称射击游戏(Third-Person Shooting Game,TPS)程序、策略游戏(Simulation Game,SLG)程序中的任意一种。
终端101通过无线网络或有线网络与服务器102相连。
服务器102用于为游戏程序的客户端提供后台服务。可选地,服务器102承担主要计算工作,终端承担次要计算工作;或者,服务器102承担次要计算工作,终端承担主要计算工作;或者,服务器102和终端之间采用分布式计算架构进行协同计算。
在一个示意性的例子中,服务器102包括多个网络节点103,例如,服务器102包括主网络节点和从网络节点,不同的网络节点用于处理不同业务的数据。示例性的,客户端与服务器的数据交互通过主网络节点进行,由主网络节点从数据库104中获取数据,采用本申请提供的数据同步方法向客户端同步数据。示例性的,主网络节点还会采用本申请提供的数据同步方法向从网络节点同步数据。示例性的,当数据被修改时,主网络节点还用于将修改后的数据写入数据库104。示例性的,主网络节点包括处理器和存储器,存储器中存储有第一程序,处理器通过调用第一程序来执行本申请提供的数据同步方法。
结合上述对虚拟环境的介绍以及实施环境说明,对本申请实施例提供的数据同步方法进行说明,以该方法的执行主体为图1所示出的服务器(主网络节点)来举例说明。
图2示出了本申请一个示例性实施例提供的数据同步方法的流程图。该方法可以由上述图1中的服务器(主网络节点)来执行。该方法包括:
步骤201,获取目标数据的树结构和数据需求方订阅的订阅标签;目标数据是需要进行数据同步的数据,树结构是根据目标数据的索引逻辑构造的树型结构,树结构中的节点标注有数据标签,订阅标签包括标签集中的至少一个标签,数据标签包括标签集中的至少一个标签。
示例性的,在服务器需要向客户端同步数据,或,主网络节点需要向从网络节点同步数据时,通过执行步骤201至步骤203的方法来从全量数据中筛选出部分数据进行同步。
示例性的,目标数据是本次需要进行同步的全量数据。例如,在客户端刚启动时,服务器需要向客户端同步程序启动的全量数据,例如,程序启动的全量数据包括应用程序各个功能模块的启动数据。再如,在数据被修改时,服务器需要向客户端同步修改后的数据,则目标数据包括被修改的数据所在的数据块中的全部数据。示例性的,目标数据可以是应用数据的全部数据,目标数据也可以是应用程序中某个模块对应的全部数据,目标数据也可以是应用程序中某个进程对应的全部数据,目标数据还可以是应用程序中某个功能对应的全部数据。
示例性的,由于目标数据中多数数据可能并不会被使用,因此,服务器可以根据数据需求方的需求,对目标数据进行筛选,选出数据需求方需要的同步数据,仅向数据需求方发送同步数据即可。
示例性的,对目标数据的筛选是基于树结构进行的。
树结构是根据目标数据的索引逻辑构建的树型结构,其具有根节点、各级父节点以及各级子节点。示例性的,树结构中的父节点是子节点的索引。示例性的,以目标数据的数据结构为map结构为例,其中,根据键值对,key(键)为value(值)的父节点。
例如,如图3所示,示出了一种目标数据的树结构,其中,根节点301为应用数据,根节点301包括四个子节点:热数据、地图数据、温数据和冷数据,地图数据包括三个子节点:地图1、地图2和地图3;地图2包括五个子节点:标识、热数据、温数据1、温数据2以及冷数据。
示例性的,数据需求方包括客户端、网络节点(从网络节点)中的至少一种。示例性的,当数据需求方为客户端时,该方法可以由服务器来执行,也可以由服务器中的主网络节点执行。示例性的,当数据需求方为网络节点(从网络节点)时,该方法可以由主网络节点执行。
示例性的,订阅标签和数据标签取自同一个标签集。示例性的,服务器采用标签集中的标签(数据标签)标注数据,依据数据需求方的需要,确定数据需求方的订阅标签。
示例性的,目标数据的树结构中存在至少一个节点标注有数据标签。示例性的,数据需求方的订阅标签包括至少一个标签。示例性的,数据需求方的订阅标签也可以为空,当数据需求方的订阅标签为空时,数据需求方会接收到全部的目标数据,或,数据需求方不会接收到目标数据中的任何一个数据。
例如,如图4所示,对于图3的树结构,根节点301标注有数据标签:None(无),地图数据节点304标注有数据标签:None,温数据节点302标注有数据标签:+noWarm(不要温数据),冷数据节点303标注有数据标签:+noCold(不要冷数据),地图2节点标注有数据标签:None,温数据1节点标注有数据标签:+noWarm,温数据2节点标注有数据标签:+noWarm,冷数据节点305标注有数据标签:+noCold。
示例性的,标签集中的标签划分可以是任意的,例如,可以根据数据被使用的频率将数据划分为冷数据、温数据和热数据;再如,还可以根据数据允许被获取的权限,将数据划分为一级数据、二级数据和三级数据。服务器可以采用任意的数据划分方式得到标签集中的标签。
示例性的,树结构中的节点可以标注有数据标签,也可以不标注数据标签(不标注数据标签的节点可以默认该节点的数据标签为“无”)。示例性的,树结构中标注有数据标签的节点,其数据标签的数量可以是任意的,一个节点可以标注一个数据标签也可以标注多个数据标签。
步骤202,基于订阅标签和数据标签在目标数据中确定同步数据,同步数据在树结构中对应的节点的数据标签与订阅标签具有关联关系。
示例性的,根据数据需求方订阅的订阅标签,以及树结构中各个节点标注的数据标签,通过判断订阅标签与数据标签的关联关系,来确定该节点对应的数据是否为同步数据。
步骤203,向数据需求方发送同步数据。
综上所述,本实施例提供的方法,通过使用标签标注数据,将数据进行分类,客户端可以向服务器订阅不同的标签,以便服务器根据客户端订阅的标签向客户端发送数据,而不需要同步全量数据。对于使用不频繁使用的数据,可以用标签将其与热点数据相区分。在进行数据同步时,根据客户端订阅的标签,将不频繁使用的数据过滤,保留热点数据,服务器只需要同步热点数据,节约数据同步所需的网络流量,提高数据同步效率。
示例性的,给出一种根据数据需求方发送的数据获取请求来进行数据同步的示例性实施例。
图5示出了本申请一个示例性实施例提供的数据同步方法的流程图。该方法可以由上述图1中的服务器(主网络节点)来执行。基于图2所示的实施例,在步骤201之前还包括步骤401,步骤201还包括步骤2011。
步骤401,接收数据需求方发送的数据获取请求,数据获取请求用于请求获取目标进程的数据。
示例性的,数据需求方在需要获取数据时,会向服务器发送数据获取请求,数据获取请求包括数据需求方的标识、目标进程的标识。
示例性的,目标进程可以是启动应用程序的进程、启动应用程序中某一功能的进程、显示某一页面的进程等等。
示例性的,服务器接收数据获取请求,根据数据需求方的标识,对应获取该数据需求方的订阅标签。
步骤2011,根据数据获取请求,获取目标进程对应的目标数据的树结构,以及数据需求方订阅的订阅标签。
示例性的,服务器中存储有各个数据需求方的订阅标签,服务器根据数据获取请求中数据需求方的标识,对应获取数据需求方的订阅标签,根据目标进程的标识,获取目标进程相关的目标数据。
示例性的,数据需求方的订阅标签包括数据需求方主动订阅的标签,以及服务器为数据需求方标注的标签。
例如,服务器接收数据需求方发送的订阅请求,订阅请求用于请求订阅第一标签的数据;将第一标签添加至数据需求方的白名单中;或,接收数据需求方发送的订阅请求,订阅请求用于请求订阅第一标签的数据;将第一标签从数据需求方的黑名单中删除。
再如,响应于数据需求方获得第二标签的数据的获取权限,将第二标签添加至数据需求方的白名单中;或,响应于数据需求方获得第二标签的数据的获取权限,将第二标签从数据需求方的黑名单中删除。
步骤202,从树结构的根节点开始自上而下遍历树结构,将树结构中数据标签与订阅标签具有关联关系的节点对应的数据,确定为同步数据。
示例性的,订阅标签包括白名单和黑名单中的至少一种,白名单中的标签用于确定数据需求方需要的数据,黑名单中的标签用于确定数据需求方不需要的数据。
响应于订阅标签包括白名单,关联关系包括:白名单中的标签中包含数据标签;同步数据包括树结构中数据标签与白名单中的至少一个标签相同的节点对应的数据;
响应于订阅标签包括黑名单,关联关系包括:黑名单中的标签不包含数据标签;同步数据包括树结构中数据标签与黑名单中任意一个标签不相同的节点对应的数据;
响应于订阅标签包括白名单和黑名单,关联关系包括:白名单中的标签中包含数据标签,且,黑名单中的标签不包含数据标签;同步数据包括:树结构中数据标签与白名单中的至少一个标签相同,且数据标签与黑名单中的任意一个标签不相同的节点对应的数据。
即,当数据需求方的订阅标签为白名单时,服务器将树结构中具有订阅标签的节点的数据确定为同步数据;当数据需求方的订阅标签为黑名单时,服务器将树结构中不具有订阅标签的节点的数据确定为同步数据;当数据需求方的订阅标签包括白名单和黑名单时,服务器将树结构中具有白名单的标签且不具有黑名单的标签的节点的数据确定为同步数据。
示例性的,响应于订阅标签与树结构中第i个父节点的数据标签具有关联关系,继续遍历第i个父节点的子节点,将子节点中数据标签与订阅标签具有关联关系的节点对应的数据确定为同步数据,i是正整数;
响应于订阅标签与树结构中第i个父节点的数据标签不具有关联关系,且存在与第i个父节点同级且未被遍历过的第i+1个父节点,继续遍历第i+1个父节点,将第i+1个父节点及第i+1个父节点的子节点中,数据标签与订阅标签具有关联关系的节点对应的数据确定为同步数据,i是正整数;
响应于订阅标签与树结构中第i个父节点的数据标签不具有关联关系,且不存在与第i个父节点同级且未被遍历的父节点,停止遍历。
示例性的,节点还标注有树标签,树标签用于标注节点的子节点的数据标签;响应于订阅标签与树结构中第i个父节点的数据标签具有关联关系,订阅标签为黑名单,且第i个父节点的树标签与订阅标签不具有关联关系,则继续遍历第i个父节点的子节点,将子节点中数据标签与订阅标签具有关联关系的节点对应的数据确定为同步数据;
响应于订阅标签与树结构中第i个父节点的数据标签具有关联关系,订阅标签为白名单,且第i个父节点的树标签与订阅标签具有关联关系,则继续遍历第i个父节点的子节点,将子节点中数据标签与订阅标签具有关联关系的节点对应的数据确定为同步数据。
响应于订阅标签与树结构中第i个父节点的数据标签具有关联关系,订阅标签为黑名单,第i个父节点的树标签与订阅标签具有关联关系,将第i个父节点以及第i个父节点的子节点对应的数据确定为同步数据;
响应于订阅标签与树结构中第i个父节点的数据标签具有关联关系,订阅标签为白名单,第i个父节点的树标签与订阅标签不具有关联关系,且存在与第i个父节点同级且未被遍历过的第i+1个父节点,继续遍历第i+1个父节点,将第i+1个父节点及第i+1个父节点的子节点中,数据标签与订阅标签具有关联关系的节点对应的数据确定为同步数据;
响应于订阅标签与树结构中第i个父节点的数据标签具有关联关系,订阅标签为白名单,第i个父节点的树标签与订阅标签不具有关联关系,且不存在与第i个父节点同级且未被遍历的父节点,停止遍历。
示例性的,按照自上而下的顺序,依次遍历树结构中的各个节点,判断各个节点的数据标签与订阅标签是否存在关联关系,将存在关联关系的节点对应的数据确定为同步数据。
示例性的,每个节点的标签包括数据标签和树标签,数据标签用于标注该节点的类型,树标签用于标注该节点下的子节点的类型。示例性的,一个节点的树标签等于其子节点的数据标签之和(去重后的数据标签)。
例如,如图6中的(1)所示,根节点301下的子节点的数据标签包括+noWarm和+noCold,则根节点301的树标签为+noWarm,+noCold。地图数据节点下的子节点的数据标签包括+noWarm和+noCold,则地图数据节点的树标签为+noWarm,+noCold。
示例性的,根据节点的树标签,服务器可以快速判断该节点下的子节点的数据标签的标注情况,若树标签与订阅标签不具有关联关系,则该节点下的子节点与订阅标签都不具有关联关系,服务器可以直接跳过对该节点的子节点的遍历,提高服务器的筛选速度。
如图6所示,以数据需求方的订阅标签为黑名单为例,假设黑名单中的标签为+noWarm和+noCold,即,数据需求方不要标注有+noWarm或+noCold的节点。则,对于根节点301,其数据标签为None,不包含+noWarm或+noCold,与订阅标签具有关联关系,其树标签为+noWarm,+noCold,与订阅标签不具有关联关系,则继续遍历根节点301的子节点。根节点301的子节点中,热数据节点不具有数据标签和树标签,即,热数据节点的数据标签和树标签皆为None,与订阅标签具有关联关系,则将热数据节点(及其子节点)对应的数据确定为同步数据。地图数据节点的数据标签为None,与订阅标签具有关联关系,树标签为+noWarm,+noCold,与订阅标签不具有关联关系,则继续遍历地图数据的子节点。地图1节点的数据标签为None,与订阅标签具有关联关系,树标签为+noWarm,+noCold,与订阅标签不具有关联关系,则继续遍历地图1节点的子节点。示例性的,图中未画出地图1节点的子节点,本实施例中以地图2节点的子节点为例进行说明,地图1节点地图3节点同地图2节点。地图2节点的子节点中标识节点、热数据节点的数据标签与订阅标签具有关联关系,温数据1节点、温数据2节点以及冷数据节点的数据标签与订阅标签不具有关联关系,则将标识节点、热数据节点对应的数据确定为同步数据。然后继续遍历根节点301的子节点:温数据节点,温数据节点的数据标签与订阅标签不具有关联关系,继续遍历根节点的子节点:冷数据节点,冷数据节点的数据标签与订阅标签不具有关联关系,且没有与冷数据节点同级的未遍历过的父节点,因此停止遍历。最终得到如图6中的(2)所示的标签树,标签树中的数据即为根据订阅标签和数据标签确定出的同步数据。
再如,如图7所示,以数据需求方的订阅标签为黑名单为例,数据需求方订阅的订阅标签为+noCold,根据如图7中的(1)所示的目标数据的树结构,及其树结构中各个节点标注的数据标签以及树标签,将与订阅标签具有关联关系的数据标签对应的节点筛选出来可以得到如图7中的(2)所示的标签树。示例性的,当订阅标签是黑名单中的+noCold时,关联关系为:数据标签或树标签中不包括+noCold则数据标签与订阅标签存在关联关系。以此,由于根节点301的数据标签不存在+noCold,且树标签存在+noCold,则数据标签具有关联关系,而树标签不具有关联关系,因此,继续遍历根节点301的子节点。根据关联关系可以确定根节点301的子节点:热数据节点、温数据节点的数据标签、树标签与订阅标签都具有关联关系,因此,这两个节点对应的数据为同步数据;而根节点301的子节点:冷数据节点的数据标签与订阅标签不具有关联关系,因此,不属于同步数据。地图数据节点的数据标签与订阅标签具有关联关系,而树标签不具有关联关系,因此,继续遍历地图数据节点的子节点。以地图2节点为例(地图1节点和地图3节点的标签以及子节点构成同地图2节点),地图2节点的数据标签与订阅标签具有关联关系,而树标签不具有关联关系,因此,继续遍历地图2节点的子节点。其中,标识节点、热数据节点、温数据1节点和温数据2节点的数据标签和树标签都与订阅标签存在关联关系,因此,标识节点、热数据节点、温数据1节点和温数据2节点对应的数据为同步数据。而冷数据节点的数据标签与订阅标签不具有关联关系,因此不属于同步数据,最终得到如图7中的(2)所示的标签树,标签树中的数据为根据订阅标签+noCold筛选出的同步数据。
示例性的,本实施例中仅以+noCold、+noWarm为例进行举例说明,基于本实施例提供的方法,本领域技术人员可以使用更多数量的其他标签来进行同步数据的筛选,各标签的含义及标签形式可以是任意的。
步骤203,向数据需求方发送同步数据。
综上所述,本实施例提供的方法,通过对节点标注树标签,使服务器可以根据树标签来初步判断该节点下的子节点的数据标签的标注情况,从而便于服务器根据树标签来确定子节点中是否可能存在需要同步的数据,当根据树标签可以确定不存在需要同步的数据时,服务器就可以跳过该节点的子节点,继续遍历其他节点,提高服务器的数据筛选效率。
本实施例提供的方法,通过设置订阅白名单和订阅黑名单,使服务器可以根据客户端订阅的标签,进行正向选择或逆向选择,丰富服务器根据订阅标签确定同步数据的可实现方式,使服务器能够实现逻辑更为复杂的数据筛选。
本实施例提供的方法,提供了一种基于标签的数据结构,根据数据的标签以及订阅机制,可以通过代码自动生成技术,零开发成本地实现按数据需求方的需要进行数据的全量同步或增量同步,不需要针对不同数据块分别开发对应的数据同步逻辑,服务器无需按照不同逻辑处理不同数据块的数据同步问题,降低数据同步逻辑的开发难度,提高复杂业务模型应用程序的开发效率和运行效率。
示例性的,给出一种在发生数据修改时,向数据需求方同步修改数据的示例性实施例。
图8示出了本申请一个示例性实施例提供的数据同步方法的流程图。该方法可以由上述图1中的服务器(主网络节点)来执行。基于图2所示的实施例,在步骤201之前还包括步骤501,步骤202还包括步骤2021。
步骤501,响应于目标数据中至少一条数据被修改,将被修改数据在树结构中对应的第一节点及第一节点的各级父节点标记为脏数据。
示例性的,服务器仅在首次数据同步时,会根据数据需求方订阅的订阅标签向数据需求方发送订阅标签的全量数据;在后续进程中,如果订阅标签对应的数据发生了修改,仅需对修改数据进行标脏(标记脏数据),根据标记的脏数据以及订阅标签向数据需求方进行增量同步,同步订阅标签对应的数据中发生修改的部分数据。
示例性的,在应用程序运行过程中,会发生数据的修改,例如,根据接收到的用户操作会发生数据修改,或,根据应用程序的逻辑运算过程,会发生数据的修改。
当发生数据修改时,服务器需要向客户端和各个网络节点同步修改后的数据,在同步修改数据的过程中也可以采用本申请提供的数据同步方法进行数据同步。
以修改的数据是目标数据中的至少一条数据为例,被修改的数据在目标数据中对应有一个叶子节点,将叶子节点以及该叶子节点上级的各级父节点标注为脏数据。
例如,如图3所示,以被修改数据为热数据节点的数据为例,将热数据节点、热数据节点的父节点:地图2节点、地图2节点的父节点:地图数据节点、地图数据节点的父节点:应用数据节点标记为脏数据。
步骤201,获取目标数据的树结构和数据需求方订阅的订阅标签;目标数据是需要进行数据同步的数据,树结构是根据目标数据的索引逻辑构造的树型结构,树结构中的节点标注有数据标签,订阅标签包括标签集中的至少一个标签,数据标签包括标签集中的至少一个标签。
步骤2021,基于订阅标签、数据标签和脏数据在目标数据中确定同步数据。
示例性的,服务器从树结构的根节点开始自上而下遍历树结构,将树结构中数据标签与订阅标签具有关联关系,且被标记为脏数据的节点对应的数据确定为同步数据。
示例性的,在图5所示的实施例基于订阅标签和数据标签确定同步数据的方法的基础上,更加脏数据的限制,将满足关联关系并且被标记为脏数据的节点对应的数据确定为同步数据。
即,若数据需求方所订阅的数据发生修改,则会向数据需求方同步修改字段的数据及其key数据,若发生修改的数据不是数据需求方所订阅的数据,则不会向数据需求方同步修改的数据。
示例性的,对于发生修改的数据,在向客户端/网络节点同步数据的同时,还需要将修改的数据写入数据库进行存储。由于数据库仅具有数据存取功能,不具有数据合并的功能,因此,需要由服务器将修改的数据与原数据进行合并得到新的原数据,然后将新的原数据写入数据库进行存储。
示例性的,将脏数据缓存入修改数据列表,修改数据列表用于缓存目标数据中被修改的数据;响应于修改数据列表中的数据量达到阈值,将修改数据列表合并入目标数据列表,清空修改数据列表,目标数据列表用于存储所以目标数据;将合并后的目标数据列表写入数据库。
即,如图9所示,服务器中维护有两个数据列表;修改数据列表601和目标数据列表602,修改数据列表601用于存放目标数据中修改的数据,目标数据列表602用于存放目标数据,每当目标数据中有数据被修改,服务器就将被修改的字段存入修改数据列表601中,并检测修改数据列表601中的数据量是否达到阈值,当修改数据列表中的数据量达到阈值,服务器将修改数据列表中的数据合并到目标数据列表中,得到用修改数据替换原数据的新的目标数据,将新的目标数据存入数据库中,并清空修改数据列表。
步骤203,向数据需求方发送同步数据。
示例性的,数据需求方在接收到服务器发送的修改数据的同步数据时,将同步数据与本地数据进行合并,得到完整数据。
以数据需求方是客户端为例,例如,客户端的订阅标签为第一标签,在客户端启动时,服务器根据第一标签从应用程序的总数据中获取第一标签对应的第一数据,向客户端全量同步第一数据。当第一数据中的第一字段发生修改时,服务器对第一字段在第一数据的树结构中对应的节点以及父节点进行标脏,然后根据标记的脏数据从第一数据中筛选出修改数据,向客户端同步修改数据。客户端接收到修改数据后,将本地存储的第一数据与修改数据进行合并,得到新的第一数据。
综上所述,本实施例提供的方法,通过在发生数据修改时,采用标脏的方法在目标数据的树结构中标出与修改数据相关的节点,然后根据订阅标签、数据标签以及脏数据来确定向每个数据需求方同步的数据,减少每次数据修改需要向数据需求方同步的数据量,提高数据同步效率。
示例性的,给出一种应用本申请提供的数据同步方法进行客户端、服务器、数据库间数据同步的示例性实施例。
图10示出了本申请一个示例性实施例提供的数据同步方法的流程图。该方法包括以下步骤。
步骤701,客户端启动时,向服务器发送数据获取请求,数据获取请求中包括客户端的标识以及启动进程的标识。
步骤702,服务器接收客户端发送的获取请求,根据启动进程的标识到数据库中拉取程序启动相关的目标数据。
步骤703,数据库向服务器发送程序启动相关的目标数据。
步骤704,服务器根据客户端的标识,确定客户端的订阅标签,例如,客户端的订阅标签为订阅了热点数据,则服务器根据订阅标签从目标数据中筛选出热点数据,向客户端同步热点数据。
步骤705,客户端向服务器发送用户操作。
步骤706,服务器根据用户操作修改相关数据,并将修改数据在树结构中进行标脏、以及各级父节点的路径染色(将父节点标记为脏数据),然后从根据标记的脏数据、客户端的订阅标签从树结构中自上而下进行遍历,确定同步数据。
步骤707,服务器将修改数据写入数据库进行存储。
步骤708,服务器向客户端发送同步数据。
步骤709,客户端在接收到同步数据后,将同步数据合并到原数据中。
步骤710,客户端向服务器发送订阅第一标签的请求。
步骤711,服务器根据第一标签从树结构中确定第一标签的数据,向客户端同步第一标签的数据。
步骤712,第一标签的数据中发生了数据修改。
步骤713,服务器向客户端同步第一标签的数据中被修改的数据。
步骤714,客户端接收到修改的数据后,将修改的数据合并到第一标签的数据中。
步骤715,客户端向服务器发送取消订阅第一标签的请求。
步骤716,当第一标签的数据发生变化时,服务器不再向客户端进行数据同步。
示例性的,采用TLV(Type Length Value,类型、长度、值)格式定义数据,通过代码运行生成脚本,进而生成内存态数据、pb结构协议数据。例如,部分数据定义如下:
示例性的,数据定义支持byte、char、int32、int64、float、double、String、BinaryString等基本类型;支持array、set、map、oneof等集合类型,集合类型可以任意嵌套。
通过运行代码生成工具,上面的数据结构可以生成.proto文件和.java文件。.proto文件采用protobuf2.0语法,用于数据的网络传输和持久化存储。.java文件提供数据的操作接口,数据打解包接口,脏数据收集合并接口,数据比较接口等。
示例性的,可以对数据标注LOD(Levels of Detail,多细节层次)标签或功能性标签。LOD标签用于标注数据的使用频繁度。对于复杂数据模型的应用程序,采用LOD同步技术同样重要。该种类型的应用程序数据结构复杂,数据量大,热点数据占比较少。通常复合二八定律,既20%的数据经常被使用,80%的数据使用频率较低,或仅在特定场景下才会使用。因此,采用LOD标签对数据进行标注,软件开发者定义数据模型时,可以为每个字段自定义不同的标签。客户端启动后,仅同步热点数据,从而解决了初次打开应用程序时,同步量过大的问题;如果客户端不需要相关数据,后续的修改也不会进行同步,进一步节约流量。
对于某些敏感数据,仅当客户端拥有特定权限时,客户端才能查看,对于这部分数据,同样可以使用LOD标签来进行标注,进而实现限制客户端对部分数据的查阅权限。
示例性的,功能性标签是指有特定功能的标签,例如,+listenable标签:加上+listenable标签后,会为内存对象生成修改回调接口,应用程序开发者可以注册该接口,实现数据修改后的自动化同步功能。+key标签:map结构数据要求必须有key字段。+one of标签:结构体是union结构。+deletable标签:某些数据使用完成后,可能就不在需要了,对这部分数据标注+deletable标签,在数据使用后,彻底将其删除。
综上所述,本实施例提供的方法,实现了一种最小化同步的解决方案,通过自动代码生成技术,零开发成本实现真正的按需同步。增量同步的粒度可以精确到字段,实现修改哪个字段,同步哪个字段。通过标签区分热点数据和非热点数据,非热点数据默认不同步,仅客户端需要时同步。真正做到无网络流量浪费,无开发成本,极大的提高了复杂业务模型应用程序的开发效率和运行效率。
以下为本申请的装置实施例,对于装置实施例中未详细描述的细节,可参考上述方法实施例。
图11是本申请一个示例性实施例提供的数据同步装置的框图。所述装置包括:
获取模块801,用于获取目标数据的树结构和数据需求方订阅的订阅标签;所述目标数据是需要进行数据同步的数据,所述树结构是根据所述目标数据的索引逻辑构造的树型结构,所述树结构中的节点标注有数据标签,所述订阅标签包括标签集中的至少一个标签,所述数据标签包括所述标签集中的至少一个标签;
确定模块802,用于基于所述订阅标签和所述数据标签在所述目标数据中确定同步数据,所述同步数据在所述树结构中对应的节点的所述数据标签与所述订阅标签具有关联关系;
发送模块803,用于向所述数据需求方发送所述同步数据。
在一个可选的实施例中,所述确定模块802,用于从所述树结构的根节点开始自上而下遍历所述树结构,将所述树结构中所述数据标签与所述订阅标签具有所述关联关系的节点对应的数据,确定为所述同步数据。
在一个可选的实施例中,所述确定模块802,用于响应于所述订阅标签与所述树结构中第i个父节点的所述数据标签具有所述关联关系,继续遍历所述第i个父节点的子节点,将所述子节点中所述数据标签与所述订阅标签具有所述关联关系的节点对应的数据确定为所述同步数据,i是正整数;
所述确定模块802,用于响应于所述订阅标签与所述树结构中第i个父节点的所述数据标签不具有所述关联关系,且存在与所述第i个父节点同级且未被遍历过的第i+1个父节点,继续遍历所述第i+1个父节点,将所述第i+1个父节点及所述第i+1个父节点的子节点中,所述数据标签与所述订阅标签具有所述关联关系的节点对应的数据确定为所述同步数据,i是正整数;
所述确定模块802,用于响应于所述订阅标签与所述树结构中第i个父节点的所述数据标签不具有所述关联关系,且不存在与所述第i个父节点同级且未被遍历的父节点,停止遍历。
在一个可选的实施例中,所述节点还标注有树标签,所述树标签用于标注所述节点的子节点的所述数据标签;
所述确定模块802,用于响应于所述订阅标签与所述树结构中第i个父节点的所述数据标签具有所述关联关系,所述订阅标签为黑名单,且所述第i个父节点的所述树标签与所述订阅标签不具有所述关联关系,则继续遍历所述第i个父节点的子节点,将所述子节点中所述数据标签与所述订阅标签具有所述关联关系的节点对应的数据确定为所述同步数据;
所述确定模块802,用于响应于所述订阅标签与所述树结构中第i个父节点的所述数据标签具有所述关联关系,所述订阅标签为白名单,且所述第i个父节点的所述树标签与所述订阅标签具有所述关联关系,则继续遍历所述第i个父节点的子节点,将所述子节点中所述数据标签与所述订阅标签具有所述关联关系的节点对应的数据确定为所述同步数据。
在一个可选的实施例中,所述确定模块802,用于响应于所述订阅标签与所述树结构中第i个父节点的所述数据标签具有所述关联关系,所述订阅标签为黑名单,所述第i个父节点的所述树标签与所述订阅标签具有所述关联关系,将所述第i个父节点以及所述第i个父节点的子节点对应的数据确定为所述同步数据;
所述确定模块802,用于响应于所述订阅标签与所述树结构中第i个父节点的所述数据标签具有所述关联关系,所述订阅标签为白名单,所述第i个父节点的所述树标签与所述订阅标签不具有所述关联关系,且存在与所述第i个父节点同级且未被遍历过的第i+1个父节点,继续遍历所述第i+1个父节点,将所述第i+1个父节点及所述第i+1个父节点的子节点中,所述数据标签与所述订阅标签具有所述关联关系的节点对应的数据确定为所述同步数据;
所述确定模块802,用于响应于所述订阅标签与所述树结构中第i个父节点的所述数据标签具有所述关联关系,所述订阅标签为白名单,所述第i个父节点的所述树标签与所述订阅标签不具有所述关联关系,且不存在与所述第i个父节点同级且未被遍历的父节点,停止遍历。
在一个可选的实施例中,所述订阅标签包括白名单和黑名单中的至少一种,所述白名单中的标签用于确定所述数据需求方需要的数据,所述黑名单中的标签用于确定所述数据需求方不需要的数据;
响应于所述订阅标签包括所述白名单,所述关联关系包括:所述白名单中的标签中包含所述数据标签;所述同步数据包括所述树结构中所述数据标签与所述白名单中的至少一个标签相同的节点对应的数据;
响应于所述订阅标签包括所述黑名单,所述关联关系包括:所述黑名单中的标签不包含所述数据标签;所述同步数据包括所述树结构中所述数据标签与所述黑名单中任意一个标签不相同的节点对应的数据;
响应于所述订阅标签包括所述白名单和所述黑名单,所述关联关系包括:所述白名单中的标签中包含所述数据标签,且,所述黑名单中的标签不包含所述数据标签;所述同步数据包括:所述树结构中所述数据标签与所述白名单中的至少一个标签相同,且所述数据标签与所述黑名单中的任意一个标签不相同的节点对应的数据。
在一个可选的实施例中,所述装置还包括:
接收模块804,用于接收所述数据需求方发送的订阅请求,所述订阅请求用于请求订阅第一标签的数据;
标签模块805,用于将所述第一标签添加至所述数据需求方的所述白名单中;
或,
所述接收模块804,用于接收所述数据需求方发送的订阅请求,所述订阅请求用于请求订阅所述第一标签的数据;
所述标签模块805,用于将所述第一标签从所述数据需求方的所述黑名单中删除。
在一个可选的实施例中,所述装置还包括:
标签模块805,用于响应于所述数据需求方获得第二标签的数据的获取权限,将所述第二标签添加至所述数据需求方的所述白名单中;
或,
所述标签模块805,用于响应于所述数据需求方获得所述第二标签的数据的获取权限,将所述第二标签从所述数据需求方的所述黑名单中删除。
在一个可选的实施例中,所述装置还包括:
标脏模块806,用于响应于所述目标数据中至少一条数据被修改,将被修改数据在所述树结构中对应的第一节点及所述第一节点的各级父节点标记为脏数据;
所述确定模块802,用于基于所述订阅标签、所述数据标签和所述脏数据在所述目标数据中确定所述同步数据。
在一个可选的实施例中,所述确定模块802,用于从所述树结构的根节点开始自上而下遍历所述树结构,将所述树结构中所述数据标签与所述订阅标签具有所述关联关系,且被标记为所述脏数据的节点对应的数据确定为所述同步数据。
在一个可选的实施例中,所述装置还包括:
缓存模块807,用于将所述脏数据缓存入修改数据列表,所述修改数据列表用于缓存所述目标数据中被修改的数据;
合并模块808,用于响应于所述修改数据列表中的数据量达到阈值,将所述修改数据列表合并入目标数据列表,清空所述修改数据列表,所述目标数据列表用于存储所以目标数据;
写入模块809,用于将合并后的所述目标数据列表写入数据库。
在一个可选的实施例中,所述装置还包括:
接收模块804,用于接收所述数据需求方发送的数据获取请求,所述数据获取请求用于请求获取目标进程的数据;
所述获取模块801,用于根据所述数据获取请求,获取所述目标进程对应的目标数据的树结构,以及所述数据需求方订阅的所述订阅标签。
需要说明的是:上述实施例提供的数据同步装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据同步装置与数据同步方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本申请还提供了一种终端,该终端包括处理器和存储器,存储器中存储有至少一条指令,至少一条指令由处理器加载并执行以实现上述各个方法实施例提供的数据同步方法。需要说明的是,该终端可以是如下图12所提供的终端。
图12出了本申请一个示例性实施例提供的终端1100的结构框图。该终端1100可以是:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio LayerIV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端1100还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端1100包括有:处理器1101和存储器1102。
处理器1101可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1101可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1101也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU;协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1101可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1101还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1102可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1102还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1102中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1101所执行以实现本申请中方法实施例提供的数据同步方法。
在一些实施例中,终端1100还可选包括有:***设备接口1103和至少一个***设备。处理器1101、存储器1102和***设备接口1103之间可以通过总线或信号线相连。各个***设备可以通过总线、信号线或电路板与***设备接口1103相连。具体地,***设备包括:射频电路1104、显示屏1105、摄像头1106、音频电路1107、定位组件1108和电源1109中的至少一种。
***设备接口1103可被用于将I/O(Input/Output,输入/输出)相关的至少一个***设备连接到处理器1101和存储器1102。在一些实施例中,处理器1101、存储器1102和***设备接口1103被集成在同一芯片或电路板上;在一些其他实施例中,处理器1101、存储器1102和***设备接口1103中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路1104用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路1104通过电磁信号与通信网络以及其他通信设备进行通信。射频电路1104将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路1104包括:天线***、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路1104可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路1104还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏1105用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏1105是触摸显示屏时,显示屏1105还具有采集在显示屏1105的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器1101进行处理。此时,显示屏1105还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏1105可以为一个,设置终端1100的前面板;在另一些实施例中,显示屏1105可以为至少两个,分别设置在终端1100的不同表面或呈折叠设计;在再一些实施例中,显示屏1105可以是柔性显示屏,设置在终端1100的弯曲表面上或折叠面上。甚至,显示屏1105还可以设置成非矩形的不规则图形,也即异形屏。显示屏1105可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件1106用于采集图像或视频。可选地,摄像头组件1106包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件1106还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路1107可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器1101进行处理,或者输入至射频电路1104以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端1100的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器1101或射频电路1104的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路1107还可以包括耳机插孔。
定位组件1108用于定位终端1100的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。定位组件1108可以是基于美国的GPS(GlobalPositioning System,全球定位***)、中国的北斗***或俄罗斯的伽利略***的定位组件。
电源1109用于为终端1100中的各个组件进行供电。电源1109可以是交流电、直流电、一次性电池或可充电电池。当电源1109包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端1100还包括有一个或多个传感器1110。该一个或多个传感器1110包括但不限于:加速度传感器1111、陀螺仪传感器1112、压力传感器1113、指纹传感器1114、光学传感器1115以及接近传感器1116。
加速度传感器1111可以检测以终端1100建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器1111可以用于检测重力加速度在三个坐标轴上的分量。处理器1101可以根据加速度传感器1111采集的重力加速度信号,控制显示屏1105以横向视图或纵向视图进行用户界面的显示。加速度传感器1111还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器1112可以检测终端1100的机体方向及转动角度,陀螺仪传感器1112可以与加速度传感器1111协同采集用户对终端1100的3D动作。处理器1101根据陀螺仪传感器1112采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器1113可以设置在终端1100的侧边框和/或显示屏1105的下层。当压力传感器1113设置在终端1100的侧边框时,可以检测用户对终端1100的握持信号,由处理器1101根据压力传感器1113采集的握持信号进行左右手识别或快捷操作。当压力传感器1113设置在显示屏1105的下层时,由处理器1101根据用户对显示屏1105的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器1114用于采集用户的指纹,由处理器1101根据指纹传感器1114采集到的指纹识别用户的身份,或者,由指纹传感器1114根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器1101授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器1114可以被设置终端1100的正面、背面或侧面。当终端1100上设置有物理按键或厂商Logo时,指纹传感器1114可以与物理按键或厂商Logo集成在一起。
光学传感器1115用于采集环境光强度。在一个实施例中,处理器1101可以根据光学传感器1115采集的环境光强度,控制、显示屏1105的显示亮度。具体地,当环境光强度较高时,调高、显示屏1105的显示亮度;当环境光强度较低时,调低、显示屏1105的显示亮度。在另一个实施例中,处理器1101还可以根据光学传感器1115采集的环境光强度,动态调整摄像头组件1106的拍摄参数。
接近传感器1116,也称距离传感器,通常设置在终端1100的前面板。接近传感器1116用于采集用户与终端1100的正面之间的距离。在一个实施例中,当接近传感器1116检测到用户与终端1100的正面之间的距离逐渐变小时,由处理器1101控制、显示屏1105从亮屏状态切换为息屏状态;当接近传感器1116检测到用户与终端1100的正面之间的距离逐渐变大时,由处理器1101控制、显示屏1105从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图12中示出的结构并不构成对终端1100的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,所述一个或者一个以上程序包含用于进行本申请实施例提供的数据同步方法。
图13是本申请一个实施例提供的服务器的结构示意图。具体来讲:服务器1200包括中央处理单元(英文:Central Processing Unit,简称:CPU)1201、包括随机存取存储器(英文:Random Access Memory,简称:RAM)1202和只读存储器(英文:Read-Only Memory,简称:ROM)1203的***存储器1204,以及连接***存储器1204和中央处理单元1201的***总线1205。服务器1200还包括帮助计算机内的各个器件之间传输信息的基本输入/输出***(I/O***)1206,和用于存储操作***1213、应用程序1214和其他程序模块1215的大容量存储设备1207。
基本输入/输出***1206包括有用于显示信息的显示器1208和用于用户输入信息的诸如鼠标、键盘之类的输入设备1209。其中显示器1208和输入设备1209都通过连接到***总线1205的输入/输出控制器1210连接到中央处理单元1201。基本输入/输出***1206还可以包括输入/输出控制器1210以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入/输出控制器1210还提供输出到显示屏、打印机或其他类型的输出设备。
大容量存储设备1207通过连接到***总线1205的大容量存储控制器(未示出)连接到中央处理单元1201。大容量存储设备1207及其相关联的计算机可读介质为服务器1200提供非易失性存储。也就是说,大容量存储设备1207可以包括诸如硬盘或者只读光盘(英文:Compact Disc Read-Only Memory,简称:CD-ROM)驱动器之类的计算机可读介质(未示出)。
不失一般性,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、可擦除可编程只读存储器(英文:Erasable Programmable Read-Only Memory,简称:EPROM)、电可擦除可编程只读存储器(英文:Electrically Erasable Programmable Read-Only Memory,简称:EEPROM)、闪存或其他固态存储其技术,CD-ROM、数字通用光盘(英文:Digital Versatile Disc,简称:DVD)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知计算机存储介质不局限于上述几种。上述的***存储器1204和大容量存储设备1207可以统称为存储器。
根据本申请的各种实施例,服务器1200还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器1200可以通过连接在***总线1205上的网络接口单元1211连接到网络1212,或者说,也可以使用网络接口单元1211来连接到其他类型的网络或远程计算机***(未示出)。
本申请提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述至少一条指令由所述处理器加载并执行以实现上述各个方法实施例提供的数据同步方法。
本申请还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述可选实现方式中提供的数据同步方法。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。