数据记录和同步方法及系统
技术领域
本发明涉及计算机领域,特别是涉及一种数据记录和同步方法及系统。
背景技术
计算机运行过程中会产生一些运行数据,如系统运行过程中自身产生的数据或日志、安全软件对计算机监控和扫描过程中产生的数据,这些运行数据的格式比较复杂不易于定义同一格式,且数据记录的方式也多种多样不易于通过一致的方法进行记录和同步到中心服务器。在将运行数据记录至对应的表格时,应用模块需要根据运行数据的格式对相应的数据表格进行预处理,然后才能将这些运行数据记录至本地数据库中。在将运行数据记录至本地数据库之后,才能将新产生的运行数据组织成数据包的形式同步到服务器上,服务器根据上传上来的数据格式进行相应的预处理,然后将上传上来的新数据写入到云端数据库中。
传统的数据记录方式在应用模块获的运行数据后,需要其对数据表格进行预处理,然后再将运行数据写入数据文件中,每个应用模块需要对数据进行较复杂的处理,同时,应用模块需要同步的进行数据存储,若是数据量比较大,则数据存储将会阻塞。传统的数据同步方式在客户端将数据包上传至服务器时,服务器会先将数据包缓存至队列里,然后再挨个进行处理,当客户端数据量很大时,很可能造成队列很大甚至会占满整个内存,且超出内存数据包将会被丢掉,导致整个网络通信和服务器处理的效率降低。在数据记录和同步过程中若是发生未事先料想到的异常时,有可能导致数据被破坏或导致数据丢失的问题。
发明内容
鉴于此,本发明提供一种可靠高效的数据记录和同步方法及系统。
为达到发明目的,本发明提供一种数据记录和同步方法,包括以下步骤:
将客户端运行过程中产生的运行数据打包为本地数据包,并将所述本地数据包发送至本地数据库,所述本地数据包包括数据格式;
根据所述数据格式解析出表格类型及所述运行数据,并根据所述表格类型将所述运行数据记录至所述本地数据库中相应类型的表格中;
若客户端接收到日志上传消息,则从所述本地数据库中获取各种类型的表格对应的统计计算型表格,从所述统计计算型表格的记录中获取需要同步到服务器的同步数据,并将所述同步数据组织成同步数据包后上传至所述服务器;
所述服务器接收所述同步数据包后,解析出所述同步数据包对应的表格类型及所述同步数据,并根据所述表格类型将所述同步数据同步至云端数据库中相应类型的表格中。
作为一种可实施例,所述根据所述数据格式解析出表格类型及所述运行数据,并根据所述表格类型将所述运行数据记录至所述本地数据库中相应类型的表格中,包括以下步骤:
若根据所述数据格式解析出的所述表格类型为追加型,则将所述运行数据记录至追加型表格的末尾;
若根据所述数据格式解析出的所述表格类型为覆盖型,判断所述运行数据的版本号是否大于覆盖型表格内的表格数据的版本号,若是,则将所述表格数据删除,并将所述运行数据记录至所述表格数据所在的位置;若否,则保持所述表格数据;
若根据所述数据格式解析出的所述表格类型为覆盖追加型,则将允许重复的所述运行数据记录至覆盖追加型表格的末尾,将不允许重复的所述运行数据对应的所述覆盖追加型表格中的表格数据删除,并将不允许重复的所述运行数据记录至删除的所述表格数据所在的位置。
作为一种可实施例,所述若客户端接收到日志上传消息,则从所述本地数据库中获取各种类型的表格对应的统计计算型表格,从所述统计计算型表格的记录中获取需要同步到服务器的同步数据,并将所述同步数据组织成同步数据包后上传至所述服务器,包括如下步骤:
若表格为追加型表格,则得到对应的统计计算型表格为游标表,从所述游标表的记录中获取所述同步数据,将所述同步户数组织成所述同步数据包缓存至数据包缓存表,并给每个所述同步数据包赋予一个同步数据包标签号,将所述同步数据包及其同步数据包标签号上传至所述服务器,其中,所述游标表记录每个追加型表格已同步的数据的位置;
若表格为覆盖型表格,则得到对应的统计计算型表格为数据版本表,从所述数据版本表的记录中获取所述同步数据,将所述同步数据组织成所述同步数据包缓存至数据包缓存表,并给每个所述同步数据包赋予一个同步数据包标签号,将所述同步数据包及其同步数据包标签号上传至所述服务器,其中,所述数据版本表记录当前数据的版本号及修改时间;
若表格为覆盖追加型表格,则得到对应的统计计算型表格为游标表和更新标记表,从所述游标表和所述更新标记表的记录中获取所述同步数据,将所述同步数据组织成所述同步数据包缓存至数据包缓存表,并给每个所述同步数据包赋予一个同步数据包标签号,将所述同步数据包及其同步数据包标签号上传至所述服务器,其中,所述游标表记录允许重复的所述运行数据已同步的数据的位置,所述更新标记表记录不允许重复的所述运行数据上次同步后修改的数据。
作为一种可实施例,所述若客户端接收到日志上传消息,则从所述本地数据库中获取各种类型的表格对应的统计计算型表格,从所述统计计算型表格的记录中获取需要同步到服务器的同步数据,并将所述同步数据组织成同步数据包后上传至所述服务器之后,还包括以下步骤:
所述服务器接收所述同步数据包时,获取与所述同步数据包同步上传的所述同步数据包标签号;
将所述同步数据包标签号与所述服务器中的预设标签表中标签号进行对比;
若所述预设标签表中有与所述同步数据包标签号相同的标签号,则向所述客户端发送所述同步数据包已上传成功信号,不接收所述同步数据包;
若所述预设标签表中没有与所述同步数据包标签号相同的标签号,则接收所述同步数据包,并将所述同步数据包标签号添加至所述预设标签表中。
作为一种可实施例,所述服务器接收所述同步数据包后,解析出所述同步数据包对应的表格类型及所述同步数据,并根据所述表格类型将所述同步数据同步至云端数据库中相应类型的表格中之前,包括以下步骤:
所述服务器接收所述同步数据包时,判断将所述同步数据包缓存到当前数据包队列后是否超过预设队列内存,若是,则将所述同步数据包缓存到下一数据包队列中,若否,则将所述同步数据包缓存到所述当前数据包队列;
将所述同步数据包缓存到所述数据包队列时,判断数据包队列中已满的队列是否超过预设数据包队列,若是,则向所述客户端发送延迟信息,并将所述同步数据包缓存至未满数据包队列中,若否,则不发送延迟信息,并将所述同步数据包缓存至所述未满数据包队列中;
选取一个有所述同步数据包的所述数据包队列作为第一数据包队列,并将所述第一数据包队列中的所有所述同步数据包作为一个事务进行处理,处理成功后,将上传日志成功消息发送给所述同步数据包对应的客户端,并选取下一个第一数据包队列。
作为一种可实施例,在所述客户端将所述同步数据组织成同步数据包上传所述服务器时,若接收到异常信号,则将所述同步数据包恢复到所述同步数据组包前的状态;
在所述服务器处理所述同步数据包时,若接收到异常信号,则将所述同步数据包返回到处理前的状态。
作为一种可实施例,所述将计算机运行过程中产生的运行数据打包为本地数据包,并将所述本地数据包发送至本地数据库之前和所述若客户端接收到日志上传消息,获取各种类型的表格对应的统计计算型表格,从所述统计计算型表格的记录中获取需要同步到服务器的同步数据,并将所述同步数据组织成同步数据包后上传至所述服务器之前,均包括以下步骤:
获取所述客户端的第一预设表格信息;
获取所述服务器的第二预设表格信息;
将所述第一预设表格信息和所述第二预设表格信息进行交互,使得所述第一预设表格信息与所述第二预设表格信息相同;
所述预设表格信息包括表格类型。
本发明还提供一种数据记录和同步系统,包括适于配置在客户端的打包发送模块,解析记录模块和组包上传模块以及适于配置在服务器的接收同步模块,其中:
所述打包发送模块,被配置以将所述客户端运行过程中产生的运行数据打包为本地数据包,并将所述本地数据包发送至本地数据库,所述本地数据包包括数据格式;
所述解析记录模块,被配置以根据所述数据格式解析出表格类型及所述运行数据,并根据所述表格类型将所述运行数据记录至所述本地数据库中相应类型的表格中;
所述组包上传模块,被配置以若接收到日志上传消息,从所述本地书库中获取各种类型的表格对应的统计计算型表格,从所述统计计算型表格的记录中获取需要同步到服务器的同步数据,并将所述同步数据组织成同步数据包后上传至所述服务器;
所述接收同步模块,被配置以接收所述同步数据包后,解析出所述同步数据包对应的表格类型及所述同步数据,并根据所述表格类型将所述同步数据同步至云端数据库中相应的云端表格中。
作为一种可实施例,所述解析记录模块包括第一解析单元,第二解析单元和第三解析单元,所述组包上传模块包括第一组包上传单元,第二组包上传单元和第三组包上传单元,其中:
所述第一解析单元,被配置以若根据所述数据格式解析出的所述表格类型为追加型,则将所述运行数据记录至追加型表格的末尾;
所述第二解析单元,被配置以若根据所述数据格式解析出的所述表格类型为覆盖型,判断所述运行数据的版本号是否大于覆盖型表格内的表格数据的版本号,若是,则将所述表格数据删除,并将所述运行数据记录至所述表格数据所在的位置;若否,则保持所述表格数据;
所述第三解析单元,被配置以若根据所述数据格式解析出的所述表格类型为覆盖追加型,则将允许重复的所述运行数据记录至覆盖追加型表格的末尾,将不允许重复的所述运行数据对应的所述覆盖追加型表格中的表格数据删除,并将不允许重复的所述运行数据记录至删除的所述表格数据所在的位置;
所述第一组包上传单元,被配置以若表格为追加型表格,则得到对应的统计计算型表格为游标表,从所述游标表的记录中获取所述同步数据,将所述同步户数组织成所述同步数据包缓存至数据包缓存表,并给每个所述同步数据包赋予一个同步数据包标签号,将所述同步数据包及其同步数据包标签号上传至所述服务器,其中,所述游标表记录每个追加型表格已同步的数据的位置;
所述第二组包上传单元,被配置以若表格为覆盖型表格,则得到对应的统计计算型表格为数据版本表,从所述数据版本表的记录中获取所述同步数据,将所述同步数据组织成所述同步数据包缓存至数据包缓存表,并给每个所述同步数据包赋予一个同步数据包标签号,将所述同步数据包及其同步数据包标签号上传至所述服务器,其中,所述数据版本表记录当前数据的版本号及修改时间;
所述第三组包上传单元,被配置以若表格为覆盖追加型表格,则得到对应的统计计算型表格为游标表和更新标记表,从所述游标表和所述更新标记表的记录中获取所述同步数据,将所述同步数据组织成所述同步数据包缓存至数据包缓存表,并给每个所述同步数据包赋予一个同步数据包标签号,将所述同步数据包及其同步数据包标签号上传至所述服务器,其中,所述游标表记录允许重复的所述运行数据已同步的数据的位置,所述更新标记表记录不允许重复的所述运行数据上次同步后修改的数据。
作为一种可实施例,还包括适于配置在所述服务器的获取模块,对比模块,第一判断模块,第二判断模块和选取模块,其中:
所述获取模块,被配置以接收所述同步数据包时,获取与所述同步数据包同步上传的所述同步数据包标签号;
所述对比模块,被配置以将所述同步数据包标签号与所述服务器中的预设标签表中标签号进行对比;若所述预设标签表中有与所述同步数据包标签号相同的标签号,则向所述客户端发送所述同步数据包已上传成功信号,不接收所述同步数据包;若所述预设标签表中没有与所述同步数据包标签号相同的标签号,则接收所述同步数据包,并将所述同步数据包标签号添加至所述预设标签表中;
所述第一判断模块,被配置以接收所述同步数据包时,判断将所述同步数据包缓存到当前数据包队列后是否超过预设队列内存,若是,则将所述同步数据包缓存到下一数据包队列中,若否,则将所述同步数据包缓存到所述当前数据包队列;
所述第二判断模块,被配置以将所述同步数据包缓存到所述数据包队列时,判断数据包队列中已满的队列是否超过预设数据包队列,若是,则向所述客户端发送延迟信息,并将所述同步数据包缓存至未满数据包队列中,若否,则不发送延迟信息,并将所述同步数据包缓存至所述未满数据包队列中;
所述选取模块,被配置以选取一个有所述同步数据包的所述数据包队列作为第一数据包队列,并将所述第一数据包队列中的所有所述同步数据包作为一个事务进行处理,处理成功后,将上传日志成功消息发送给所述同步数据包对应的客户端,并选取下一个第一数据包队列。
作为一种可实施例,还包括适于配置在所述客户端和所述服务器的获取交互模块,被配置以获取所述客户端的第一预设表格信息和所述服务器的第二预设表格信息,并将所述第一预设表格信息和所述第二预设表格信息进行交互,使得所述第一预设表格信息与所述第二预设表格信息相同,其中,所述预设表格信息包括表格类型;
所述组包上传模块还包括第一异常单元,所述接收同步模块包括第二异常单元,其中:
所述第一异常单元,被配置以若在将所述同步数据组织成同步数据包上传所述服务器时接收到异常信号,将所述同步数据包恢复到所述同步数据组包前的状态;
所述第二异常单元,被配置以若在处理所述同步数据包时接收到异常信号,将所述同步数据包返回到处理前的状态。
本发明的有益效果包括:
本发明的数据记录和同步的方法及系统,客户端的应用层可以直接将运行数据组织成数据包发送给本地数据库,相应的程序控制本地数据库自动进行分类记录,应用层不用关心数据存储的细节,简化了应用层的使用,使得应用层访问变得简单高效。同时,将数据记录和数据同步改为异步执行,减少了等待数据操作的时间,最大程度减少对业务处理的耗时,提高了网络通信效率及服务器性能,使得数据的记录和同步变的高效可靠。
附图说明
图1为本发明的数据记录和同步方法的一实施例的流程示意图;
图2为本发明的数据记录和同步方法中数据记录方法的一实施例的流程示意图;
图3为本发明的数据记录和同步方法中数据同步方法的一实施例的流程示意图;
图4为本发明的数据记录和同步方法中数据同步方法的另一实施例的流程示意图;
图5为本发明的数据记录和同步系统的一实施例的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例对本发明数据记录和同步方法及系统进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
参见图1,本发明实施例提供一种数据记录和同步方法,包括以下步骤:
S200,将客户端运行过程中产生的运行数据打包为本地数据包,并将本地数据包发送至本地数据库,其中,本地数据包包括数据格式。
S400,根据数据格式解析出表格类型及运行数据,并根据表格类型将运行数据记录至本地数据库中相应类型的表格中。
S600,若客户端接收到日志上传消息,则从本地数据库中获取各种类型的表格对应的统计计算型表格,从统计计算型表格的记录中获取需要同步到服务器的同步数据,并将同步数据组织成同步数据包后上传至服务器。
S800,服务器接收同步数据包后,解析出同步数据包对应的表格类型及同步数据,并根据表格类型将同步数据同步至云端数据库中相应类型的表格中。
本发明的数据记录和同步方法,给客户端的应用层提供了一个统一的访问接口,应用层不用关心其产生数据的类型和记录方式,只需将其产生的数据组织成本地数据包发送给本地数据库,本地数据库接收本地数据包后会自动进行分类处理,不用关系记录的细节,对运行数据的格式进行一致性类型划分,从而将数据的记录方式抽象到统一的方法上,客户端应用层不用关心不同数据的不同记录方式,简化应用层的使用,使得应用层数据访问变得简单高效。同时,该方法把数据记录和数据同步改为异步执行(步骤S200和步骤S600能够同时执行,即数据同步时不用再等待数据记录成功后才能执行),减少了等待数据操作的时间,最大程度减少对业务处理的耗时,提高了网络通信效率及服务器性能,使得数据同步变得高效可靠。其中,在本申请中,数据库为关系型数据库,每一个表格对应关系型数据库中的一张表。
需要说明的是,每个类型的表格只存储某一特定格式的数据,因此,在获的数据格式后,即能获取对应的表格类型,其中,表格类型通过配置表预先配置。
作为一种可实施方式,参见图2,步骤S400包括如下步骤:
S410,若根据数据格式解析出的表格类型为追加型,则将运行数据记录至追加型表格的末尾。
S420,若根据数据格式解析出的表格类型为覆盖型,判断运行数据的版本号是否大于覆盖型表格内的表格数据的版本号,若是,则将表格数据删除,并将运行数据记录至表格数据所在的位置;若否,则保持表格数据。
S430,若根据数据格式解析出的表格类型为覆盖追加型,则将允许重复的运行数据记录至覆盖追加型表格的末尾,将不允许重复的运行数据对应的覆盖追加型表格中的表格数据删除,并将不允许重复的运行数据记录至删除的表格数据所在的位置。
为实现数据记录高效可靠的目的,将数据根据不同的格式分成了不同的表格,将所有的表格按其存储数据的特点分为:追加型表格,覆盖型表格,覆盖追加型表格。其中,追加型表格的数据允许重复,因此新产生的数据只需追加在表格末尾就可以。覆盖型表格的数据成批生成,每批数据都有一个固定的版本号,版本号越大的数据越新,其数据不允许重复,新版本的数据需要阀盖旧版本的数据。覆盖追加型表格的数据一部分允许重复,一部分不允许重复,不允许重复的数据需要先清理旧数据,再将新数据写入。
作为一种可实施方式,参见图3,步骤S600包括如下步骤:
S610,若表格为追加型表格,则得到对应的统计计算型表格为游标表,从游标表的记录中获取同步数据,将同步户数组织成同步数据包缓存至数据包缓存表,并给每个同步数据包赋予一个同步数据包标签号,将同步数据包及其同步数据包标签号上传至服务器,其中,游标表记录每个追加型表格已同步的数据的位置。
S620,若表格为覆盖型表格,则得到对应的统计计算型表格为数据版本表,从数据版本表的记录中获取同步数据,将同步数据组织成同步数据包缓存至数据包缓存表,并给每个同步数据包赋予一个同步数据包标签号,将同步数据包及其同步数据包标签号上传至服务器,其中,数据版本表记录当前数据的版本号及修改时间。
S630,若表格为覆盖追加型表格,则得到对应的统计计算型表格为游标表和更新标记表,从游标表和更新标记表的记录中获取同步数据,将同步数据组织成同步数据包缓存至数据包缓存表,并给每个同步数据包赋予一个同步数据包标签号,将同步数据包及其同步数据包标签号上传至服务器,其中,游标表记录允许重复的运行数据已同步的数据的位置,更新标记表记录不允许重复的运行数据上次同步后修改的数据。
在获取同步数据前,针对每种类型的表格初始化其对应的统计计算型表格。当客户端接收到日志上传消息后,每种类型的表格有其对应的统计计算型表格。如追加型表格对应的统计计算型表格为游标表,游标表记录每个追加型表格已同步的数据的位置,在向服务器上传数据时,从游标指定的位置开始同步,避免重复同步相同的数据;覆盖型表格对应的统计计算型表格为数据版本表,数据版本表记录当前数据的版本号及修改时间,客户端和服务器均有一个数据版本表,当客户端有新的版本数据产生时,客户端的数据版本表会自动修改为新的版本数据的版本号及其修改时间,同时,客户端会定期校验其和服务器两端的数据版本表,若服务器反馈其数据版本表与客户端的数据版本表不同,则客户端会将最新的数据同步至服务器,并修改服务器的数据版本表(版本号及其修改时间);覆盖追加型表格对应的统计计算型表格为游标表和更新标记表,由于覆盖追加型表格内的数据包括允许重复的数据和不允许重复的数据,对于允许重复的数据采用游标表,记录上次数据同步的位置,此位置之后的数据都是未同步的,对于不允许重复的数据采用更新标记表,更新标记表记录了上次同步后有哪些数据被修改了,在下次同步数据时,客户端把从上次同步后的所有已修改的数据提取出来进行同步,服务器接收到这些更新的数据后会先将旧的数据删除,然后再将插入这些更新的数据。
值得说明的是,客户端在上传同步数据时,会将同步数据打包为同步数据包然后缓存至客户端的数据包缓存表中,并给每个所述同步数据包赋予一个同步数据包标签号,同步数据包标签号能够唯一标志一个同步数据包,不再使用传统数据库里符合主键的概念,达到简化概念,操作简单的效果。客户端上传同步数据包后,若接收到服务器反馈的上传日志成功消息,则根据统计计算型表格继续上传后续的数据,若接收到服务器反馈的上传日志失败消息或者数据接收超时消息,则重新上传缓存在数据包缓存表中的该同步数据包,直至上传成功,若接收到的是服务器正繁忙等待若干分钟的消息,则客户端等待若干分钟后再上传。上传同步数据包后,检查所有的同步数据包是否上传成功,若是在停止等待下一个日志上传消息,若否则继续上传,直至所有的同步数据包上传成功。
作为一种可实施方式,参见图4,步骤S600之后,还包括以下步骤:
S700a,服务器接收同步数据包时,获取与同步数据包同步上传的同步数据包标签号。
S700b,将同步数据包标签号与服务器中的预设标签表中标签号进行对比;若预设标签表中有与同步数据包标签号相同的标签号,则向客户端发送同步数据包已上传成功信号,不接收同步数据包;若预设标签表中没有与同步数据包标签号相同的标签号,则接收同步数据包,并将同步数据包标签号添加至预设标签表中。
由步骤S600可知,在将同步数据上传给服务器时,同时也会上传一个同步数据包标签号,每个同步数据包标签号对应一个同步数据包,服务器接收同步数据包时,首先根据同步数据包标签号判断该同步数据包是否已经接收,避免数据重复等问题,确保数据传输准确。
作为一种可实施方式,参见图4,步骤S800之前,还包括以下步骤:
S700A,服务器接收同步数据包时,判断将同步数据包缓存到当前数据包队列后是否超过预设队列内存,若是,则将同步数据包缓存到下一数据包队列中,若否,则将同步数据包缓存到当前数据包队列。
S700B,将同步数据包缓存到数据包队列时,判断数据包队列中已满的队列是否超过预设数据包队列,若是,则向客户端发送延迟信息,并将同步数据包缓存至未满数据包队列中,若否,则不发送延迟信息,并将同步数据包缓存至未满数据包队列中。
S700C,选取一个有同步数据包的数据包队列作为第一数据包队列,并将第一数据包队列中的所有同步数据包作为一个事务进行处理,处理成功后,将上传日志成功消息发送给同步数据包对应的客户端,并选取下一个第一数据包队列。
传统的数据同步方法会先将同步数据包缓存到数据包队列中,再对数据包队列中的同步数据包逐个进行处理,当客户端数量大时,会造成数据包队列非常大甚至沾满整个内存,超出内存时会将同步数据包丢掉,易出现同步数据包遗漏的问题,导致整个网络通信和服务器的处理效率降低。该方法能够将同步数据包自动缓存在一定的内存的数据包队列中,并将每个数据包队列内的同步数据包当作一个事务写入云端数据库所在的磁盘,减少了数据库90%的写磁盘的频率,极大提升了服务器的性能。同时,通过向客户端发送延迟消息动态调整同步周期,能够减轻服务器压力,服务器不会因为数据包占满内存而将数据包丢掉,避免了数据包遗漏的问题,从而提高整个网络通信的性能。
其中,需要说明的是,步骤S700A前可以没有步骤S700a和S700b,直接位于步骤S600之后,较优的,在其中一个实施例中,步骤S700A位于步骤S700b之后,即服务器进行过标签号对比后再判断同步数据包缓存到当前数据包队列中是否超出内存,避免数据包重复上传。较优的,在其中一个实施例中,预设数据包队列为总数据包队列的一半,其中,总数据包队列的个数为40个。较优的,在其中一个实施例中,预设队列内存为20MB。同步数据包的大小一般都很小,由几K到几十K。
作为一种可实施方式,参见图4,还包括步骤S600A,在客户端将同步数据组织成同步数据包上传服务器时,若接收到异常信号,则将同步数据包恢复到同步数据组包前的状态,以及步骤S800A,在服务器处理(进行标签对比、清理旧数据、插入新数据、修改标签号和回复确认消息)同步数据包时,若接收到异常信号,则将同步数据包返回到处理前的状态。
客户端收到异常信号时,将同步数据包恢复到组包前状态,等系统恢复正常后继续组包上传,服务器收到异常信号时,将同步数据包恢复到处理前的状态,当服务器恢复正常状态后,客户端会重新发送其缓存的数据包,确保数据不被破坏、不会丢失。
作为一种可实施方式,参见图1至图4,步骤S200和步骤S600之前,还包括以下步骤:
S100,获取客户端的第一预设表格信息,获取服务器的第二预设表格信息,将第一预设表格信息和第二预设表格信息进行交互,使得第一预设表格信息与第二预设表格信息相同,其中,预设表格信息包括表格类型。
在进行数据记录,同步之前,先将客户端和服务器对应数据库内的预设表格信息进行交互,确保两端的表格类型一致。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
基于同一发明构思,本发明还提供了一种数据记录和同步系统,由于此系统解决问题的原理与前述一种数据记录和同步方法相似,因此该系统的实施可以参见前述方法的实施,重复之处不再赘述。
本发明实施例提供的数据记录和同步系统,参见图5,包括适于配置在客户端的打包发送模块200,解析记录模块400和组包上传模块600以及适于配置在服务器的接收同步模块800。其中:打包发送模块200,被配置以将客户端运行过程中产生的运行数据打包为本地数据包,并将本地数据包发送至本地数据库,本地数据包包括数据格式。解析记录模块400,被配置以根据数据格式解析出表格类型及运行数据,并根据表格类型将运行数据记录至本地数据库中相应类型的表格中。组包上传模块600,被配置以若接收到日志上传消息,从本地数据库中获取各种类型的表格对应的统计计算型表格,从统计计算型表格的记录中获取需要同步到服务器的同步数据,并将同步数据组织成同步数据包后上传至所述服务器。接收同步模块800,被配置以接收同步数据包后,解析出同步数据包对应的表格类型及同步数据,并根据表格类型将同步数据同步至云端数据库中相应的云端表格中。
本发明的数据记录和同步系统,客户端的应用层可以直接将运行数据组织成数据包发送给本地数据库,为应用层提供一个统一的访问接口,解析记录模块400控制本地数据库自动进行分类记录,应用层不用关心数据存储的细节,简化应用层的使用,使得应用层访问变得简单高效。同时,将数据记录和数据同步改为异步执行,减少了等待数据操作的时间,最大程度减少对业务处理的耗时,提高了网络通信效率及服务器性能,使得数据的记录和同步变的高效可靠。
作为一种可实施例,解析记录模块400包括第一解析单元410,第二解析单元420和第三解析单元430,组包上传模块600包括第一组包上传单元610,第二组包上传单元620和第三组包上传单元630。其中:第一解析单元410,被配置以若根据所述数据格式解析出的表格类型为追加型,则将运行数据记录至追加型表格的末尾。第二解析单元420,被配置以若根据所述数据格式解析出的表格类型为覆盖型,判断运行数据的版本号是否大于覆盖型表格内的表格数据的版本号,若是,则将表格数据删除,并将运行数据记录至表格数据所在的位置;若否,则保持表格数据。第三解析单元430,被配置以若根据所述数据格式解析出的表格类型为覆盖追加型,则将允许重复的运行数据记录至覆盖追加型表格的末尾,将不允许重复的运行数据对应的覆盖追加型表格中的表格数据删除,并将不允许重复的运行数据记录至删除的表格数据所在的位置。
第一组包上传单元610,被配置以若表格为追加型表格,得到对应的统计计算型表格为游标表,从游标表的记录中获取同步数据,将同步户数组织成同步数据包缓存至数据包缓存表,并给每个同步数据包赋予一个同步数据包标签号,将同步数据包及其同步数据包标签号上传至服务器,其中,所述游标表记录每个追加型表格已同步的数据的位置。第二组包上传单元620,被配置以若表格为覆盖型表格,得到对应的统计计算型表格为数据版本表,从数据版本表的记录中获取同步数据,将同步数据组织成同步数据包缓存至数据包缓存表,并给每个同步数据包赋予一个同步数据包标签号,将同步数据包及其同步数据包标签号上传至所述服务器,其中,数据版本表记录当前数据的版本号及修改时间。第三组包上传单元630,被配置以若表格为覆盖追加型表格,得到对应的统计计算型表格为游标表和更新标记表,从游标表和更新标记表的记录中获取同步数据,将同步数据组织成同步数据包缓存至数据包缓存表,并给每个同步数据包赋予一个同步数据包标签号,将同步数据包及其同步数据包标签号上传至服务器,其中,游标表记录允许重复的运行数据已同步的数据的位置,更新标记表记录不允许重复的运行数据上次同步后修改的数据。
作为一种可实施方式,还包括适于配置在服务器的获取模块710,对比模块720,第一判断模块730,第二判断模块740和选取同步模块750。其中:获取模块710,被配置以接收同步数据包时,获取与同步数据包同步上传的同步数据包标签号。服务器对比模块720,被配置以将同步数据包标签号与服务器中的预设标签表中标签号进行对比;若预设标签表中有与同步数据包标签号相同的标签号,则向客户端发送同步数据包已上传成功信号,不接收同步数据包;若预设标签表中没有与同步数据包标签号相同的标签号,则接收同步数据包,并将同步数据包标签号添加至预设标签表中。
第一判断模块730,被配置以接收同步数据包时,判断将同步数据包缓存到当前数据包队列后是否超过预设队列内存,若是,则将同步数据包缓存到下一数据包队列中,若否,则将同步数据包缓存到当前数据包队列。第二判断模块740,被配置以将同步数据包缓存到数据包队列时,判断数据包队列中已满的队列是否超过预设数据包队列,若是,则向客户端发送延迟信息,并将同步数据包缓存至未满数据包队列中,若否,则不发送延迟信息,并将同步数据包缓存至未满数据包队列中。选取同步模块750,被配置以选取一个有同步数据包的数据包队列作为第一数据包队列,并将第一数据包队列中的所有同步数据包作为一个事务进行处理,处理成功后,将上传日志成功消息发送给同步数据包对应的客户端,并选取下一个第一数据包队列。
作为一种可实施方式,还包括适于配置在客户端和服务器的获取交互模块100,被配置以获取客户端的第一预设表格信息和服务器的第二预设表格信息,并将第一预设表格信息和第二预设表格信息进行交互,使得第一预设表格信息与第二预设表格信息相同,其中,预设表格信息包括表格类型。
组包上传模块600还包括第一异常单元640,接收同步模块800包括第二异常单元810。其中:第一异常单元640,被配置以若在将同步数据组织成同步数据包上传服务器时接收到异常信号,将同步数据包恢复到同步数据组包前的状态。第二异常单元810,被配置以若在处理同步数据包时接收到异常信号,将同步数据包返回到处理前的状态。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。