一种数据同步方法、服务器及存储介质
技术领域
本发明涉及软件开发领域,尤其涉及一种数据同步方法、服务器及存储介质。
背景技术
手机在上网过程中,经常需要先将数据缓存到本地,供我们阅览观看。而由于网站服务器上的数据会不断变动,一段时间后,就需要刷新当前页面,来获取最新的数据同步到手机客户端。
目前,常用的方法是通过http协议去请求最新的数据,再将更新后的数据加载到当前页面,一般会采用增量更新的办法,获取到差异数据对需要更新的地方进行更新。但当需要增量更新数据非常庞大时,客户端需要执行数据库更新操作,同步速度会较慢,而且占用的流量开销也会变大。
发明内容
有鉴于此,本发明实施例提供了一种数据同步方法、服务器及存储介质,以解决同步速度过慢的问题。
本发明实施例的第一方面,提供了一种数据同步方法,包括:
接收到客户端的更新请求后,获取所述客户端本地数据的时间戳;
比对所述客户端本地数据的时间戳和服务器端数据的时间戳;
当所述客户端本地数据的时间戳和所述服务器端数据的时间戳不相同时,根据所述客户端本地数据和所述服务器端数据的差异,获取所述客户端需要更新的数据的字段,拼接SQL语句;
发送所述SQL语句的集合到所述客户端,以进行所述客户端数据的同步
本发明实施例的第二方面,提供了一种服务器,包括:
获取模块:用于接收到客户端的更新请求后,获取所述客户端本地数据的时间戳;
比对模块:用于比对所述客户端本地数据的时间戳和服务器端数据的时间戳;
拼接模块:用于当所述客户端本地数据的时间戳和所述服务器端数据的时间戳不相同时,根据所述客户端本地数据和所述服务器端数据的差异,获取所述客户端需要更新的数据的字段,拼接SQL语句;
发送模块:用于发送所述SQL语句的集合到所述客户端,以进行所述客户端数据的同步。
本发明实施例的第三方面,提供了一种服务器,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例第一方面所述方法的步骤。
本发明实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。
本发明实施例的第五方面,提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被一个或多个处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。
本发明实施例中,通过时间戳,确定要增量更新的数据,再在服务器端将需要更新的数据拼接为SQL语句发送到客户端,克服了客户端大批量更新数据时,出现同步速度慢的问题,使得客户端可以直接执行SQL语句,将数据的更新操作放在服务器执行,大大提升客户端数据同步速度,减少了流量占用,同时降低了内存消耗。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的实现数据同步的业务时序图;
图2为本发明实施例二提供的数据同步方法的流程示意图;
图3为本发明实施例三提供的步骤S203流程示意图;
图4为本发明实施例四提供的服务器的结构示意图;
图5为本发明实施例五提供的拼接模块430的结构示意图;
图6为本发明实施例六提供的服务器的结构示意图。
具体实施方式
本发明实施例提供了一种数据同步方法、服务器及存储介质,用于数据同步,保障数据同步的实时性。
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路、以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。如在本说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
实施例一:
请参阅图1,本发明实施例提供的实现数据同步的业务时序图,包括:客户端10、服务器端20和服务器端数据库30,以及它们之间的数据交互、处理。
所述客户端10为安装在终端设备上,为用户提供本地服务的程序,需要与服务端互相配合运行,通过互联网可以与服务器进行数据交互。在本发明实施例中,客户端10向服务器端20请求数据,会经过S1发送请求,服务器端20接收到请求后,自身先要对请求数据进行解析,对不同请求提供不同服务,当确定需要去查询数据库后,会通过S2查询数据库,确定差异数据。
所述服务器端20能处理客户端请求,并提供服务,优选的,在本发明实施例中,服务器端20接收S1请求更新后,会获取客户端10本地数据的时间戳,拿到时间戳后,再去通过S2取服务器端数据库30中的差异数据。
所述服务器端数据库30用于存放服务器端接收或产生的数据,并对服务器端20的数据请求进行简单处理,并反馈给服务器端20,所述服务器端数据库30类似于终端里的存储器,属于服务器20的一部分。确定服务器端数据的时间戳与客户端数据的时间戳不一致以后,通过SQL语句查找出不同数据,并反馈给服务器端。
服务器端20从服务器端数据库30得到差异数据后会拼接SQL语句,所述拼接SQL语句是指根据要更新的数据的不同,通过SQL语句将要更新的数据放入SQL语句中,直接执行所述SQL语句就能完成数据更新。
服务器端20将所有拼接成的SQL语句发送到客户端10,即通过S4返回SQL语句集合,就能拿到要更新的内容,客户端10通过S5执行SQL语句后,就完成数据更新操作,实现数据同步。
上述中,服务器端20是进行数据处理的主要部分,接收客户端请求,查询数据库,以返回数据,实现同步。在本发明实施例中,返回数据不是差异数据,而是SQL语句,能极大加快客户端数据更新速度。
实施例二:
请参阅图2,本发明实施例提供的数据同步方法的流程示意图,包括以下步骤:
S201、接收到客户端的更新请求后,获取所述客户端本地数据的时间戳。
所述客户端能为用户提供本地服务,连接上互联网后,就能向服务器请求数据,获取服务器提供的的数据,例如,通过在手机上安装斗鱼APP,就可以通过网络,获取到斗鱼服务器上的直播视频。所述更新请求为通过网络传递的请求报文,发送报文到服务器,服务器解析报文数据,读取请求内容,所述更新请求设有触发条件,例如用户进行刷新操作,程序会默认请求数据更新。所述时间戳,指的是可以用来标识一份数据最早存在的时刻,通常是一个字符序列。
可选的,在所述客户端的数据表和服务端的数据表中都增加用于记录数据表最早存在时刻的字段。具体的,例如在数据表中都增加processtime字段,processtime用于表示时间戳,每次客户端发出更新请求,附上processtime字段。
S202、比对所述客户端本地数据的时间戳和服务器端数据的时间戳;
所述服务器端会经常自动更新数据,服务器端最新数据会带有时间戳,该时间戳和上述客户端数据数据的时间戳相同,都是自定义增加的表示时间戳的字段,如processtime字段,该processtime为长整型,代表一个确定的数值,直接比对是否相等,就可以确定当前客户端数据是否与服务器端数据同步。由于时间戳产生的时间越早,数值就会越小,因而相对于服务器端最新的数据,使用时间能较为准确的确定数据是否同步。
优选的,客户端使用SQLlite数据表,服务端为MySQL数据表。
S203、当所述客户端本地数据的时间戳和所述服务器端数据的时间戳不相同时,根据所述客户端本地数据和所述服务器端数据的差异,获取所述客户端需要更新的数据的字段,拼接SQL语句;
所述根据客户端本地数据和所述服务端器数据的差异指的是,当客户端向服务器请求更新某一数据时,该数据都是放在构建的数据库里,所述数据可用一张或多张表存放分类,而服务器端数据也使用这种形式存放,直接比对客户端与服务器同一类型数据表,就可以发现区别数据,例如服务器端存放有主播信息的表,包括:ID、姓名、年龄、直播时长、直播类别等信息,而本地客户端也存放有主播信息信息表,直接比对两张表就能确定差别数据在哪一项,哪一个主播。所述获取所述客户端需要更新的数据的字段,就是确定发生数据变更的表项,例如某一ID主播直播时长发生改变,确定该主播ID,直播时长,通过拼接SQL语句,就能改变数据表数据。
所述拼接SQL语句就是获取要更改的字段,并获取要更改内容,这样就可以组成一条完整的SQL语句,在本发明实施例中,进行的SQL操作包括增加、删除、修改等操作。
优选的,所述拼接的SQL包含有需要更新的数据内容。即需要更新的数据放到SQL中,例如,一条SQL语句insert into table(uid,age)values(100,20),其中(100,20)即为要更新的数据内容,(uid,age)即为要更新的字段
S204、发送所述SQL语句的集合到所述客户端,以进行所述客户端数据的同步。
在本发明实施例中,通过返回SQL语句,能够避免直接进行增量更新时,对网络流量的大量占用,同时直接执行SQL,能够加快更新速度。
实施例三:
在图2的基础上,结合图3详述步骤S203,即拼接SQL语句过程,如下:
图3为本发明实施例提供的步骤S203流程示意图,包括S301、S302、S303,上述步骤并不意味着执行顺序的先后。
所述S301、比较所述客户端数据表和所述所述服务器数据表,获取所述客户端数据表中发生变动的表项,所述表项为需要更新的字段。
当确定客户端与服务器的数据不同步时,通过比较所述客户端数据表和所述所述服务器数据表,找出发生变动的数据,进而可以确定需要改变的表项,例如客户端表与服务器表中主播名字不同,要改变客户端表中的这一项,直接找到表项名字,当然还要确定主播的编号。该表项即为需要更新的字段。
所述S302、对需要更新的数据,拼接为UPDATE语句,对需要删除的数据,拼接为DELETE语句,对需要新增的数据,拼接为INSERT语句。
在SQL语句中,最基础的操作就是UPDATE、DELETE、INSERT,以上即为操作的关键字,UPDATE表示修改后更新数据表,DELETE表示删除某一项,INSERT表示增加某一项。
可选的,还可以包括拼接CREAT、ALTER、DROP、ADD等操作。
所述S303、根据所述SQL语句要更新字段的不同,设置所述SQL语句执行的优先级。
由于在进行数据更新过程中,不同的数据重要性也会不同,而且有些数据可能会不展示给用户,这样可以对一些特定的表格、特定的内容设置为优先执行,例如在浏览视频网站时,用户优先关注的是视频内容,这样可以优先呈现视频缩略图、视频标题等,还有一些最新的、关注度大的视频也可以优先刷新,后台的更新内容,可以放到后面执行。
可选的,所述优先级可以默认为执行SQL语句的先后,拼接SQL语句的先后可以表示执行的顺序。
在本发明提供的实施例中设置SQL语句的优先级,能够带来良好的用户体验,数据同步更为合理。
实施例四:
上面主要描述了一种数据同步方法,下面将对一种数据同步的服务器进行详细描述。
图4示出了本发明实施例提供的数据同步服务器的结构示意图,包括:
获取模块410:用于接收到客户端的更新请求后,获取所述客户端本地数据的时间戳;
可选的,所述获取模块41还包括设置模块:用于在所述客户端的数据表和服务端的数据表中都增加用于记录数据表最早存在时刻的字段。
比对模块420:用于比对所述客户端本地数据的时间戳和服务器端数据的时间戳;
拼接模块430:用于当所述客户端本地数据的时间戳和所述服务器端数据的时间戳不相同时,根据所述客户端本地数据和所述服务器端数据的差异,获取所述客户端需要更新的数据的字段,拼接SQL语句;
可选的,所述拼接模块430包括:
获取单元:用于比较所述客户端数据表和所述所述服务器数据表,获取所述客户端数据表中发生变动的表项,所述表项为需要更新的字段。
拼接单元:用于对需要更新的数据,拼接为UPDATE语句,对需要删除的数据,拼接为DELETE语句,对需要新增的数据,拼接为INSERT语句。
优选的,还包括设置单元:根据所述SQL语句要更新字段的不同,设置所述SQL语句执行的优先级。
发送模块440:用于发送所述SQL语句的集合到所述客户端,以进行所述客户端数据的同步。
实施例五:
图5为本发明实施例五提供的拼接模块430的结构示意图,具体包括:
获取单元4301:用于比较所述客户端数据表和所述所述服务器数据表,获取所述客户端数据表中发生变动的表项,所述表项为需要更新的字段。
具体的,所述发生变动的表项指的是客户端与服务器的差异数据
拼接单元4302:用于对需要更新的数据,拼接为UPDATE语句,对需要删除的数据,拼接为DELETE语句,对需要新增的数据,拼接为INSERT语句。
可选的,上述还包括:对于需要删除的表格拼接为DROP,对于要创建的表格拼接为CREAT,对于需要增加的表项拼接为ADD等,根据需要可以增加拼接的关键字。
设置单元4303:根据所述SQL语句要更新字段的不同,设置所述SQL语句执行的优先级。
具体的,对于重要的数据,例如姓名、名称等,优先显示的,例如视频内容、标题等,优先更新,即设置执行的先后顺序。
实施例六:
图6是本发明一实施例提供的数据同步的服务器结构的示意图。所述服务器,为提供计算服务的设备,通常指具有较高计算能力,通过网络提供给多个用户使用的计算机。如图6所示,该实施例的服务器6包括:存储器610、处理器620以及系统总线630,所述存储器610包括存储其上的可运行的程序6101,本领域技术人员可以理解,图6中示出的终端设备结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图6对终端设备的各个构成部件进行具体的介绍:
存储器610可用于存储软件程序以及模块,处理器620通过运行存储在存储器610的软件程序以及模块,从而执行终端的各种功能应用以及数据处理。存储器610可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器610可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
在存储器610上包含数据同步方法的可运行程序6101,所述可运行程序6101可以被分割成一个或多个模块/单元,所述一个或多个模块/单元被存储在所述存储器610中,并由处理器620执行,以完成通知的传递并获取通知实现过程,所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序6101在所述服务器6中的执行过程。例如,所述计算机程序6101可以被分割为获取模块、比对模块、拼接模块和发送模块。
处理器620是服务器的控制中心,利用各种接口和线路连接整个终端设备的各个部分,通过运行或执行存储在存储器610内的软件程序和/或模块,以及调用存储在存储器610内的数据,执行终端的各种功能和处理数据,从而对终端进行整体监控。可选的,处理器620可包括一个或多个处理单元;优选的,处理器620可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器520中。
系统总线630是用来连接计算机内部各功能部件,可以传送数据信息、地址信息、控制信息,其种类可以是例如PCI总线、ISA总线、VESA总线等。处理器620的指令通过总线传递至存储器610,存储器610反馈数据给处理器620,系统总线630负责处理器620与存储器610之间的数据、指令交互。当然系统总线630还可以接入其他设备,例如网络接口、显示设备等。
所述服务器应至少包括CPU、芯片组、内存、磁盘系统等,其他构成部件在此不再赘述。
在本发明实施例中,该终端所包括的处理器620执行的可运行程序具体为:
一种数据同步方法,其特征在于,包括:
接收到客户端的更新请求后,获取所述客户端本地数据的时间戳;比对所述客户端本地数据的时间戳和服务器端数据的时间戳;当所述客户端本地数据的时间戳和所述服务器端数据的时间戳不相同时,根据所述客户端本地数据和所述服务器端数据的差异,获取所述客户端需要更新的数据的字段,拼接SQL语句;发送所述SQL语句的集合到所述客户端,以进行所述客户端数据的同步。
进一步的,所述接收到客户端的更新请求后,获取所述客户端本地数据的时间戳之前还包括:
在所述客户端的数据表和服务端的数据表中都增加用于记录数据表最早存在时刻的字段。
进一步的,所述根据所述客户端本地数据和所述服务器端数据的差异,获取所述客户端需要更新的数据的字段具体为:
比较所述客户端数据表和所述所述服务器数据表,获取所述客户端数据表中发生变动的表项,所述表项为需要更新的字段。
进一步的,所述比较所述客户端数据表和所述所述服务器数据表,获取所述客户端数据表中发生变动的表项,所述表项为需要更新的字段还包括:
对需要更新的数据,拼接为UPDATE语句,对需要删除的数据,拼接为DELETE语句,对需要新增的数据,拼接为INSERT语句。
进一步的,所述拼接SQL语句还包括:
根据所述SQL语句要更新字段的不同,设置所述SQL语句执行的优先级。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各实施例的模块、单元和/或方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。