发明内容
本申请的目的在于提供一种时序数据同步方法、装置、设备及存储介质,可以提高数据同步的效果,保证数据的完整性。
本申请的实施例是这样实现的:
本申请实施例的一方面,提供一种时序数据同步方法,包括:
从服务器获取至少一段待同步数据的信息,每段待同步数据的信息包括如下至少一项:待同步数据的饱满情况、待同步数据的开始时间、待同步数据的结束时间;
根据待同步数据的饱满情况确定待同步数据的数据状态,数据状态包括:已有数据、无数据、缺失数据,已有数据用于标识待同步数据中包括实际数据的状态,无数据用于标识待同步数据不包括实际数据的状态,缺失数据用于标识待同步数据在服务器中包括实际数据而获取后不包括实际数据的状态;
根据待同步数据的开始时间、待同步数据的结束时间、待同步数据的数据状态以及本地数据的同步状态日志,将待同步数据插入至本地数据的同步状态日志中,得到新的本地数据的同步状态日志;
其中,本地数据的同步状态日志中包括多个时间段,每个时间段包括开始时间、结束时间、开始时间的数据状态以及结束时间的数据状态。
可选地,本地数据的同步状态日志以二叉树结构存储,二叉树结构中的每个节点表示一个时间点,两个相邻节点之间的连线表示两个相邻节点所表示时间所组成的时间段,且二叉树结构中每个节点具有一键值,键值表示节点所表示的时间点的数据状态;
根据待同步数据的开始时间、待同步数据的结束时间、待同步数据的数据状态以及本地数据的同步状态日志,将待同步数据插入至本地数据的同步状态日志中,得到新的本地数据的同步状态日志,包括:
根据至少一段待同步数据的开始时间、待同步数据的结束时间以及待同步数据的数据状态,生成至少一段待同步数据的二叉树结构;
分别将每段待同步数据的二叉树结构插入至本地数据的二叉树结构中,得到插入后的二叉树结构;
根据待同步数据的二叉树结构在插入后的二叉树结构中的位置,将待同步数据插入本地数据的同步状态日志中。
可选地,根据至少一段待同步数据的开始时间、待同步数据的结束时间以及待同步数据的数据状态,生成至少一段待同步数据的二叉树结构,包括:
根据至少一段待同步数据的开始时间、待同步数据的结束时间以及待同步数据的数据状态,确定待同步数据对应的信息编组表达格式;
根据待同步数据对应的信息编组表达格式确定待同步数据的二叉树结构。
可选地,分别将每段待同步数据的二叉树结构插入至本地数据的二叉树结构中,得到插入后的二叉树结构之前,该方法还包括:
分别判定待同步数据的开始时间与本地数据的同步状态日志中第一个时间段的开始时间,以及待同步数据的结束时间与本地数据的同步状态日志中最后一个时间段的结束时间的先后关系。
可选地,分别将每段待同步数据的二叉树结构插入至本地数据的二叉树结构中,得到插入后的二叉树结构,包括:
若待同步数据的开始时间小于或者等于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间小于本地数据的同步状态日志中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有时间戳小于或者等于待同步数据的结束时间的节点并记录其中时间戳最大节点的数据状态;
判断时间戳最大节点的数据状态与待同步数据的数据状态是否一致;
若一致,则根据待同步数据的开始时间以及待同步数据的数据状态确定插入后的二叉树结构;
若不一致,则根据待同步数据的开始时间以及待同步数据的数据状态、待同步数据的结束时间以及时间戳最大节点的数据状态确定插入后的二叉树结构。
可选地,分别将每段待同步数据的二叉树结构插入至本地数据的二叉树结构中,得到插入后的二叉树结构,包括:
若待同步数据的开始时间小于或者等于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间大于或者等于本地数据的同步状态日志中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有节点,并根据待同步数据的开始时间、结束时间、数据状态确定插入后的二叉树结构。
可选地,分别将每段待同步数据的二叉树结构插入至本地数据的二叉树结构中,得到插入后的二叉树结构,包括:
若待同步数据的开始时间大于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间小于本地数据的同步状态日志中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有时间戳小于或者等于待同步数据的结束时间且大于或者等于待同步数据的开始时间的节点并记录其中时间戳最大节点的数据状态以及时间戳最小节点的数据状态;
根据时间戳最大节点的数据状态、时间戳最小节点的数据状态以及待同步数据的数据状态,得到插入后的二叉树结构。
可选地,根据时间戳最大节点的数据状态、时间戳最小节点的数据状态以及待同步数据的数据状态,得到插入后的二叉树结构,包括:
分别判断时间戳最大节点的数据状态以及时间戳最小节点的数据状态与待同步数据的数据状态是否一致;
若时间戳最大节点的数据状态与待同步数据的数据状态一致,且时间戳最小节点的数据状态与待同步数据的数据状态一致,则确定本地数据的同步状态日志为插入后的二叉树结构;
若时间戳最大节点的数据状态与待同步数据的数据状态不一致,且时间戳最小节点的数据状态与待同步数据的数据状态一致,则根据待同步数据的开始时间、时间戳最大节点的数据状态确定插入的二叉树结构;
若时间戳最大节点的数据状态与待同步数据的数据状态一致,且时间戳最小节点的数据状态与待同步数据的数据状态不一致,则根据待同步数据的结束时间、时间戳最小节点的数据状态确定插入后的二叉树结构;
若时间戳最大节点的数据状态与待同步数据的数据状态不一致,且时间戳最小节点的数据状态与待同步数据的数据状态不一致,则根据待同步数据的开始时间以及时间戳最大节点的数据状态、待同步数据的结束时间以及时间戳最小节点的数据状态确定插入后的二叉树结构。
可选地,分别将每段待同步数据的二叉树结构插入至待同步数据的二叉树结构中,得到插入后的二叉树结构,包括:
若待同步数据的开始时间大于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间大于或者等于待同步数据的数据结构中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有时间戳大于或者等于待同步数据的开始时间的节点并记录其中时间戳最小节点的数据状态;
判定时间戳最小节点的数据状态与待同步数据的数据状态是否一致;
若一致,则根据待同步数据的结束时间以及数据状态确定插入后的二叉树结构;
若不一致,则根据待同步数据的结束时间以及待同步数据的数据状态、待同步数据的开始时间以及时间戳最小节点的数据状态确定插入后的二叉树结构。
本申请实施例的另一方面,提供一种时序数据同步装置,包括:接收模块、插入模块;
接收模块,用于从服务器获取至少一段待同步数据的信息,每段待同步数据的信息包括如下至少一项:待同步数据的饱满情况、待同步数据的开始时间、待同步数据的结束时间;
插入模块,用于根据待同步数据的饱满情况确定待同步数据的数据状态,数据状态包括:已有数据、无数据、缺失数据,已有数据用于标识待同步数据中包括实际数据的状态,无数据用于标识待同步数据不包括实际数据的状态,缺失数据用于标识待同步数据在服务器中包括实际数据而获取后不包括实际数据的状态;其中,本地数据的同步状态日志中包括多个时间段,每个时间段包括开始时间、结束时间、开始时间的数据状态以及结束时间的数据状态。
可选地,插入模块,具体用于根据至少一段待同步数据的开始时间、待同步数据的结束时间以及待同步数据的数据状态,确定待同步数据对应的信息编组表达格式;根据待同步数据对应的信息编组表达格式确定待同步数据的二叉树结构。
可选地,该装置还包括判定模块;判定模块,用于分别判定待同步数据的开始时间与本地数据的同步状态日志中第一个时间段的开始时间,以及待同步数据的结束时间与本地数据的同步状态日志中最后一个时间段的结束时间的先后关系。
可选地,插入模块,具体用于若待同步数据的开始时间小于或者等于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间小于本地数据的同步状态日志中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有时间戳小于或者等于待同步数据的结束时间的节点并记录其中时间戳最大节点的数据状态;判断时间戳最大节点的数据状态与待同步数据的数据状态是否一致;若一致,则根据待同步数据的开始时间以及待同步数据的数据状态确定插入后的二叉树结构;若不一致,则根据待同步数据的开始时间以及待同步数据的数据状态、待同步数据的结束时间以及时间戳最大节点的数据状态确定插入后的二叉树结构。
可选地,插入模块,具体用于若待同步数据的开始时间小于或者等于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间大于或者等于本地数据的同步状态日志中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有节点,并根据待同步数据的开始时间、结束时间、数据状态确定插入后的二叉树结构。
可选地,插入模块,具体用于若待同步数据的开始时间大于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间小于本地数据的同步状态日志中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有时间戳小于或者等于待同步数据的结束时间且大于或者等于待同步数据的开始时间的节点并记录其中时间戳最大节点的数据状态以及时间戳最小节点的数据状态;根据时间戳最大节点的数据状态、时间戳最小节点的数据状态以及待同步数据的数据状态,得到插入后的二叉树结构。
可选地,插入模块,具体用于分别判断时间戳最大节点的数据状态以及时间戳最小节点的数据状态与待同步数据的数据状态是否一致;若时间戳最大节点的数据状态与待同步数据的数据状态一致,且时间戳最小节点的数据状态与待同步数据的数据状态一致,则确定本地数据的同步状态日志为插入后的二叉树结构;若时间戳最大节点的数据状态与待同步数据的数据状态不一致,且时间戳最小节点的数据状态与待同步数据的数据状态一致,则根据待同步数据的开始时间、时间戳最大节点的数据状态确定插入的二叉树结构;若时间戳最大节点的数据状态与待同步数据的数据状态一致,且时间戳最小节点的数据状态与待同步数据的数据状态不一致,则根据待同步数据的结束时间、时间戳最小节点的数据状态确定插入后的二叉树结构;若时间戳最大节点的数据状态与待同步数据的数据状态不一致,且时间戳最小节点的数据状态与待同步数据的数据状态不一致,则根据待同步数据的开始时间以及时间戳最大节点的数据状态、待同步数据的结束时间以及时间戳最小节点的数据状态确定插入后的二叉树结构。
可选地,插入模块,具体用于若待同步数据的开始时间大于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间大于或者等于待同步数据的数据结构中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有时间戳大于或者等于待同步数据的开始时间的节点并记录其中时间戳最小节点的数据状态;判定时间戳最小节点的数据状态与待同步数据的数据状态是否一致;若一致,则根据待同步数据的结束时间以及数据状态确定插入后的二叉树结构;若不一致,则根据待同步数据的结束时间以及待同步数据的数据状态、待同步数据的开始时间以及时间戳最小节点的数据状态确定插入后的二叉树结构。
本申请实施例的另一方面,提供一种计算机设备,包括:存储器、处理器,存储器中存储有可在处理器上运行的计算机程序,处理器执行计算机程序时,实现上述数据同步方法的步骤。
本申请实施例的另一方面,提供一种存储介质,存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现上述数据同步方法的步骤。
本申请实施例的有益效果包括:
本申请实施例提供的时序数据同步方法、装置、设备及存储介质中,接收服务器发送的至少一段待同步数据的信息,根据待同步数据的开始时间、待同步数据的结束时间、待同步数据的数据状态以及本地数据的同步状态日志,将待同步数据插入至本地数据的同步状态日志中,得到新的本地数据的同步状态日志,由于本地数据的同步状态日志能够记录当前时间之前数据从服务器同步至终端设备时的同步情况,因此,通过待同步数据的开始时间、待同步数据的结束时间、待同步数据的数据状态以及本地数据的同步状态日志可以更加准确完整地将待同步数据插入至本地数据的同步状态日志中,进而可以提高新的本地数据的同步状态日志的完整性,提高数据同步的效果。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本申请的描述中,需要说明的是,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
本申请实施例中提供的数据同步方法可以应用于终端设备,终端设备可以是客户端的计算机设备、手机、平板电脑等,在此不作限制,终端设备可以与远端服务器通信连接,远端服务器可以向终端设备发送待同步数据的信息,这些待同步数据的信息可以是生产生活中的相关数据信息,例如:工况数据信息。
下面来解释本申请实施例中提供的数据同步方法的具体实施过程。
图1为本申请实施例提供的时序数据同步方法的流程示意图一,请参照图1,数据同步方法包括:
S110:从服务器获取至少一段待同步数据的信息。
其中,每段待同步数据的信息包括:待同步数据的饱满情况、待同步数据的开始时间、待同步数据的结束时间。
S120:根据待同步数据的饱满情况确定待同步数据的数据状态。
其中,数据状态包括:已有数据、无数据、缺失数据。
可选地,待同步数据可以是用于表征一个时间段内的数据饱满情况的虚拟数据段,待同步数据的饱满情况可以用于表示该虚拟数据段中是否具有实际数据,待同步数据的开始时间可以是待同步数据发送至终端设备的时间,待同步数据的结束时间可以是待同步数据发送完毕的时间,
终端设备接收到待同步数据的信息后,可以根据其中的待同步数据的饱满情况来确定待同步数据的数据状态,待同步数据的数据状态可以用于表示该待同步数据中是否具有实际数据以及终端设备获取的待同步数据与服务器所具有的待同步数据中的饱满情况是否一致;具体可以用于状态标识的方式来表示数据状态,例如:已有数据用于标识待同步数据中包括实际数据的状态,无数据用于标识待同步数据不包括实际数据的状态,缺失数据用于标识待同步数据在服务器中包括实际数据而获取后不包括实际数据的状态。也即是说,已有数据和无数据均是终端设备与服务器中的待同步数据饱满情况相同时,根据是否具有实际数据来确定的两种状态,而缺失数据是终端设备与服务器中的待同步数据饱满情况不同时,终端设备中不具有实际数据而服务器中具有实际数据的状态。
S130:根据待同步数据的开始时间、待同步数据的结束时间、待同步数据的数据状态以及本地数据的同步状态日志,将待同步数据插入至本地数据的同步状态日志中,得到新的本地数据的同步状态日志。
其中,本地数据的同步状态日志中包括多个时间段,每个时间段包括开始时间、结束时间、开始时间的数据状态以及结束时间的数据状态。
本申请实施例中,本地数据的同步状态日志可以指已经同步至终端设备上的数据,本地数据的同步状态日志可以用来记录当前时间之前数据从服务器同步至终端设备时的同步情况,例如在某个时间段数据成功同步至终端设备,或者在某个时间段数据没有被成功同步至终端设备。
可选地,每个时间段的开始时间的数据状态可以是在该开始时间时本地数据的同步状态日志的状态,相应地,每个时间段的结束时间的数据状态可以是在该结束时间时本地数据的同步状态日志的状态,本地数据的同步状态日志的数据状态具体可以包括:已有数据、无数据、缺失数据,与前述待同步数据的数据状态相类似,在此不加赘述。
需要说明的是,对于连续的本地数据来说,第二个时间段的开始时间即为第一个时间段的结束时间,相应地,第二个时间段的开始时间对应的数据状态也即是第一个时间段的结束时间对应的数据状态。
图2为本申请实施例提供的本地数据的同步状态日志的示例图,如图2所示,本地数据的同步状态日志中包括连续的多个时间段,例如,由时间点t1和时间点t2组成的时间段,由时间点t2和时间点t3组成的时间段等,直到tn为止。以时间点t1和时间点t2组成的时间段为例,时间点t1的数据状态为有数据,时间点t2的数据状态为缺失数据,则表明t1-t2这一时间段的数据被成功同步到终端设备,而t2时间之后的一个时间段数据没有被成功到终端设备。
本申请实施例提供的时序数据同步方法中,接收服务器发送的至少一段待同步数据的信息,根据待同步数据的开始时间、待同步数据的结束时间、待同步数据的数据状态以及本地数据的同步状态日志,将待同步数据插入至本地数据的同步状态日志中,得到新的本地数据的同步状态日志,由于本地数据的同步状态日志能够记录当前时间之前数据从服务器同步至终端设备时的同步情况,因此,通过待同步数据的开始时间、待同步数据的结束时间、待同步数据的数据状态以及本地数据的同步状态日志可以更加准确完整地将待同步数据插入至本地数据的同步状态日志中,进而可以提高新的本地数据的同步状态日志的完整性,提高数据同步的效果。
下面来解释本申请实施例中提供的数据同步方法的另一具体实施过程。
图3为本申请实施例提供的时序数据同步方法的流程示意图二,请参照图3,本地数据的同步状态日志以二叉树结构存储,二叉树结构中的每个节点表示一个时间点,两个相邻节点之间的连线表示两个相邻节点所表示时间所组成的时间段,且二叉树结构中每个节点具有一键值,键值表示节点所表示的时间点的数据状态;根据待同步数据的开始时间、待同步数据的结束时间、待同步数据的数据状态以及本地数据的同步状态日志,将待同步数据插入至本地数据的同步状态日志中,得到新的本地数据的同步状态日志,包括:
S210:根据至少一段待同步数据的开始时间、待同步数据的结束时间以及待同步数据的数据状态,生成至少一段待同步数据的二叉树结构。
可选地,可以将一段待同步数据的开始时间作为第一个节点、结束时间作为第二个节点、待同步数据的数据状态作为第一个节点的键值、零值作为第二个节点的键值,以此生成该段待同步数据的二叉树结构。相应地,若包括多个待同步数据,则可以将每个待同步数据按照上述方式转换为二叉树结构进行存储。
S220:分别将每段待同步数据的二叉树结构插入至本地数据的同步状态日志的二叉树结构中,得到插入后的二叉树结构。
可选地,可以按照二叉树结构的运算规则,将上述每段待同步数据对应的二叉树结构插入至本地数据的同步状态日志的二叉树结构中,然后得到插入后的二叉树结构。
S230:根据待同步数据的二叉树结构在插入后的二叉树结构中的位置,将待同步数据插入本地数据的同步状态日志中。
可选地,可以根据待同步数据的二叉树结构在插入后的二叉树结构中的位置确定待同步数据的插入位置,进而在对应的插入位置将待同步数据插入至本地数据的同步状态日志中。
下面来解释本申请实施例中提供的数据同步方法的又一具体实施过程。
图4为本申请实施例提供的时序数据同步方法的流程示意图三,请参照图4,根据至少一段待同步数据的开始时间、待同步数据的结束时间以及待同步数据的数据状态,生成至少一段待同步数据的二叉树结构,包括:
S310:根据至少一段待同步数据的开始时间、待同步数据的结束时间以及待同步数据的数据状态,确定待同步数据对应的信息编组表达格式。
例如,信息编组表达格式(MAP格式)可以进行如下形式表达:
{
时间点1:已有数据,
时间点2:null
}
其中,“时间点1”即为待同步数据的开始时间、“已有数据”即为待同步数据的数据状态;“时间点2”即为待同步数据的结束时间、“null”即为零值(该点之后的数据不存在数据状态)。
S320:根据待同步数据对应的信息编组表达格式确定待同步数据的二叉树结构。
可以根据上述信息编组表达格式进行二叉树结构的构建,进而确定待同步数据的二叉树结构。
可选地,分别将每段待同步数据的二叉树结构插入至待同步数据的二叉树结构中,得到插入后的二叉树结构之前,该方法还包括:
分别判定待同步数据的开始时间与本地数据的同步状态日志中第一个时间段的开始时间,以及待同步数据的结束时间与本地数据的同步状态日志中最后一个时间段的结束时间的先后关系。
可选地,开始时间、结束时间都可以通过时间戳的方式来表示,例如,可以用具体的年、月、日、时、分、秒进行表示。根据时间的先后顺序,确定上述先后关系。
下面来具体解释本申请实施例中提供的数据同步方法的具体实施过程。
图5为本申请实施例提供的时序数据同步方法的流程示意图四,请参照图5,分别将每段待同步数据的二叉树结构插入至待同步数据的二叉树结构中,得到插入后的二叉树结构,包括:
S410:若待同步数据的开始时间小于或者等于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间小于本地数据的同步状态日志中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有时间戳小于或者等于待同步数据的结束时间的节点并记录其中时间戳最大节点的数据状态。
可选地,当待同步数据的开始时间小于或者等于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间小于本地数据的同步状态日志中最后一个时间段的结束时间时,也即是说,待同步数据开始时间和结束时间都比本地数据早,可以将本地数据的同步状态日志中所有时间戳小于或者等于待同步数据的结束时间的节点删除,然后记录其中时间戳最大节点的数据状态。
S420:判断时间戳最大节点的数据状态与待同步数据的数据状态是否一致。
可选地,可以比较时间戳最大节点的数据状态与待同步数据的数据状态是否一致,例如,若时间戳最大节点的数据状态与待同步数据的数据状态均为已有数据,则一致;若其中任意一个为已有数据,另一个为无数据或者缺失数据,则不一致。
S430:若一致,则根据待同步数据的开始时间以及待同步数据的数据状态确定插入后的二叉树结构。
可选地,若一致,则可以将待同步数据的开始时间作为新的节点,待同步数据的数据状态作为新的节点的键值,构建插入后的二叉树结构。
S440:若不一致,则根据待同步数据的开始时间以及待同步数据的数据状态、待同步数据的结束时间以及时间戳最大节点的数据状态确定插入后的二叉树结构。
可选地,若不一致,则可以将待同步数据的开始时间作为一个新的节点,待同步数据的数据状态作为该新的节点的键值;将待同步数据的结束时间作为另一个新的节点,时间戳最大节点的数据状态作为另一个新的节点的键值,构建插入后的二叉树结构。
可选地,分别将每段待同步数据的二叉树结构插入至待同步数据的二叉树结构中,得到插入后的二叉树结构,包括:
若待同步数据的开始时间小于或者等于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间大于或者等于本地数据的同步状态日志中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有节点,并根据待同步数据的开始时间、结束时间、数据状态确定插入后的二叉树结构。
可选地,当待同步数据的开始时间小于或者等于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间大于或者等于本地数据的同步状态日志中最后一个时间段的结束时间时,也即是说,待同步数据开始时间比本地数据早、结束时间比本地数据晚,可以将本地数据的同步状态日志中所有节点删除,然后可以根据待同步数据的开始时间、结束时间、数据状态确定插入后的二叉树结构。
具体为,将待同步数据的开始时间作为新的节点,将待同步数据的数据状态作为新的节点的键值;将待同步数据的结束时间作为另一新的节点,将零值作为另一新的节点的键值。
下面来具体解释本申请实施例中提供的数据同步方法的具体实施过程。
图6为本申请实施例提供的时序数据同步方法的流程示意图五,请参照图6,分别将每段待同步数据的二叉树结构插入至待同步数据的二叉树结构中,得到插入后的二叉树结构,包括:
S510:若待同步数据的开始时间大于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间小于本地数据的同步状态日志中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有时间戳小于或者等于待同步数据的结束时间且大于或者等于待同步数据的开始时间的节点并记录其中时间戳最大节点的数据状态以及时间戳最小节点的数据状态。
可选地,当待同步数据的开始时间大于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间小于本地数据的同步状态日志中最后一个时间段的结束时间时,也即是说,待同步数据开始时间比本地数据晚、结束时间比本地数据早,可以将本地数据的同步状态日志中所有时间戳小于或者等于待同步数据的结束时间且大于或者等于待同步数据的开始时间的节点删除并记录其中时间戳最大节点的数据状态以及时间戳最小节点的数据状态。
S520:根据时间戳最大节点的数据状态、时间戳最小节点的数据状态以及待同步数据的数据状态,得到插入后的二叉树结构。
可选地,可以分别根据时间戳最大节点的数据状态与待同步数据的数据状态是否一致以及时间戳最小节点的数据状态与待同步数据的数据状态是否一致以进行判定得到插入后的二叉树结构,具体方式如下:
图7为本申请实施例提供的时序数据同步方法的流程示意图六,请参照图7,根据时间戳最大节点的数据状态、时间戳最小节点的数据状态以及待同步数据的数据状态,得到插入后的二叉树结构,包括:
S610:分别判断时间戳最大节点的数据状态以及时间戳最小节点的数据状态与待同步数据的数据状态是否一致。
可选地,可以分别判断时间戳最大节点的数据状态以及时间戳最小节点的数据状态与待同步数据的数据状态是否一致,具体判定方式与前述S410类似,在此不加赘述。
S620:若时间戳最大节点的数据状态与待同步数据的数据状态一致,且时间戳最小节点的数据状态与待同步数据的数据状态一致,则确定本地数据的同步状态日志为插入后的二叉树结构。
可选地,若时间戳最大节点的数据状态与待同步数据的数据状态一致,且时间戳最小节点的数据状态与待同步数据的数据状态一致,可以将上述删除本地数据的同步状态日志中所有时间戳小于或者等于待同步数据的结束时间且大于或者等于待同步数据的开始时间的节点后的本地数据的同步状态日志作为插入后的二叉树结构。
S630:若时间戳最大节点的数据状态与待同步数据的数据状态不一致,且时间戳最小节点的数据状态与待同步数据的数据状态一致,则根据待同步数据的开始时间、时间戳最大节点的数据状态确定插入的二叉树结构。
可选地,若时间戳最大节点的数据状态与待同步数据的数据状态不一致,且时间戳最小节点的数据状态与待同步数据的数据状态一致,可以将待同步数据的开始时间作为新的节点,将时间戳最大节点的数据状态作为该新的节点的键值,进而确定插入的二叉树结构。
S640:若时间戳最大节点的数据状态与待同步数据的数据状态一致,且时间戳最小节点的数据状态与待同步数据的数据状态不一致,则根据待同步数据的结束时间、时间戳最小节点的数据状态确定插入后的二叉树结构。
可选地,若时间戳最大节点的数据状态与待同步数据的数据状态一致,且时间戳最小节点的数据状态与待同步数据的数据状态不一致,可以将待同步数据的结束时间作为新的节点,将时间戳最小节点的数据状态作为该新的节点的键值,进而确定插入后的二叉树结构。
S650:若时间戳最大节点的数据状态与待同步数据的数据状态不一致,且时间戳最小节点的数据状态与待同步数据的数据状态不一致,则根据待同步数据的开始时间以及时间戳最大节点的数据状态、待同步数据的结束时间以及时间戳最小节点的数据状态确定插入后的二叉树结构。
可选地,若时间戳最大节点的数据状态与待同步数据的数据状态不一致,且时间戳最小节点的数据状态与待同步数据的数据状态不一致,可以将待同步数据的开始时间作为新的节点,将时间戳最大节点的数据状态作为该新的节点的键值;将待同步数据的结束时间作为另一新的节点,将时间戳最小节点的数据状态作为另一新的节点的键值,进而确定插入后的二叉树结构。
下面来具体解释本申请实施例中提供的数据同步方法的具体实施过程。
图8为本申请实施例提供的时序数据同步方法的流程示意图七,请参照图8,分别将每段待同步数据的二叉树结构插入至待同步数据的二叉树结构中,得到插入后的二叉树结构,包括:
S710:若待同步数据的开始时间大于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间大于或者等于待同步数据的数据结构中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有时间戳大于或者等于待同步数据的开始时间的节点并记录其中时间戳最小节点的数据状态。
可选地,当待同步数据的开始时间大于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间大于或者等于待同步数据的数据结构中最后一个时间段的结束时间时,也即是说,待同步数据开始时间和结束时间均比本地数据晚,可以将本地数据的同步状态日志中所有时间戳大于或者等于待同步数据的开始时间的节点删除,并记录其中时间戳最小节点的数据状态。
S720:判定时间戳最小节点的数据状态与待同步数据的数据状态是否一致。
可选地,可以判定时间戳最小节点的数据状态与待同步数据的数据状态是否一致,具体判定方式与前述S410类似,在此不加赘述。
S730:若一致,则根据待同步数据的结束时间以及数据状态确定插入后的二叉树结构。
可选地,若一致,可以将待同步数据的结束时间作为新的节点,将待同步数据的数据状态作为该新的节点的键值,进而确定插入后的二叉树结构。
S740:若不一致,则根据待同步数据的结束时间以及待同步数据的数据状态、待同步数据的开始时间以及时间戳最小节点的数据状态确定插入后的二叉树结构。
可选地,若不一致,可以将待同步数据的结束时间作为新的节点,将同步数据的数据状态作为该新的节点的键值;将待同步数据的开始时间作为另一新的节点,将时间戳最小节点的数据状态作为该另一新的节点的键值,进而确定插入后的二叉树结构。
可选地,除了上述四种的待同步数据的开始时间与本地数据的同步状态日志中第一个时间段的开始时间,以及待同步数据的结束时间与本地数据的同步状态日志中最后一个时间段的结束时间的先后关系之外,还可能出现以下两种情况:
(1)待同步数据的结束时间比本地数据的同步状态日志中第一个时间段的开始时间早。
可选地,在该情况下,可以将待同步数据的开始时间作为新的节点,将待同步数据的数据状态作为该新的节点的键值;将待同步数据的结束时间作为另一新的节点,将键值设置为“缺失数据”,进而构造二叉树结构。
(2)待同步数据的开始时间比本地数据的同步状态日志中最后一个时间段的结束时间晚这两种情况,在这两种情况下,可以将待同步数据的开始时间作为新的节点,将待同步数据的数据状态作为该新的节点的键值;将待同步数据的结束时间作为另一新的节点,将键值设置为零值,然后可以将本地数据的同步状态日志的最后一个时间段的结束时间对应的节点的键值改为“缺失数据”,进而构造二叉树结构。
下面通过具体的实施例来解释本申请实施例中提供的一数据结构的具体示例。
图9为本申请实施例提供的数据结构的示意图,请参照图9,图9中所示的第一数据段810为本地数据的同步状态日志,第二数据段820为待同步数据的数据结构;其中,该本地数据的同步状态日志包括:第一时间点、第二时间点、第三时间点、第四时间点、第五时间点、第六时间点、第七时间点;第一时间点到第二时间点之间的数据状态为已有数据、第二时间点到第三时间点的数据状态为缺失数据、第三时间点到第四时间点的数据状态为已有数据、第四时间点到第五时间点的数据状态为缺失数据、第五时间点到第六时间点的数据状态为无数据,第六时间点到第七时间点的数据状态为已有数据,该待同步数据的数据结构包括:第八时间点和第九时间点,第八时间点到第九时间点之间的数据状态为已有数据。
下面通过具体的实施例来解释上述图9中所示的第一数据段810和第二数据段820对应的二叉树结构:
图10为本申请实施例提供的数据结构对应的二叉树结构的示意图,请参照图10,其中,第一二叉树结构910对应图9中的第一数据段810;第二二叉树结构920对应图9中的第二数据段820。
可选地,第一二叉树结构910包括第一节点至第七节点,每个节点对应第一数据段810中的一个时间点(例如:第一节点对应第一时间点,其余同理),第一节点的键值为已有数据、第二节点的键值为缺失数据、第三节点的键值为已有数据、第四节点的键值为缺失数据、第五节点的键值为无数据、第六节点的键值为已有数据、第七节点的键值为零值;相应地。第二二叉树结构920包括第八节点和第九节点,分别对应第二数据段820中的第八时间点和第九时间点,第八节点的键值为已有数据、第九节点的键值为零值。
下面通过多个具体的实施例来分别解释本申请实施例中提供的插入后的二叉树结构。
图11为本申请实施例提供的插入后的二叉树结构的示意图一,请参照图11,图11中对应的本地数据和待同步数据的二叉树结构为图10中的二叉树结构,当第八节点的时间小于第一节点的时间且第九节点的时间小于第七节点的时间时,可以得到图11中对应的插入后的二叉树结构。需要说明的是,该实施例中的第八节点的时间在第一节点之前,第九节点的时间在第四节点和第五节点之间。
其中,图11左侧的二叉树结构即为插入后的二叉树结构;右侧的二叉树结构为左侧的二叉树结构进行深度处理后分支旋转得到的等效二叉树结构,所表达的含义相同。
图12为本申请实施例提供的插入后的二叉树结构的示意图二,请参照图12,图12中对应的本地数据和待同步数据的二叉树结构为图10中的二叉树结构,当第八节点的时间小于第一节点的时间且第九节点的时间大于第七节点的时间时,可以得到图12中对应的插入后的二叉树结构。
图13为本申请实施例提供的插入后的二叉树结构的示意图三,请参照图13,图13中对应的本地数据和待同步数据的二叉树结构为图10中的二叉树结构,当第八节点的时间大于第一节点的时间且第九节点的时间小于第七节点的时间时,可以得到图13中对应的插入后的二叉树结构。需要说明的是,该实施例中的第八节点的时间在第二节点和第三节点之间,第九节点的时间在第五节点和第六节点之间。
需要说明的是,上述实施例仅为插入时的其中一种或者多种可能的情况,具体的插入结果可以根据前述方法进行判定,在此不加赘述。
下述对用以执行的本申请所提供的数据同步方法对应的装置、设备及存储介质等进行说明,其具体的实现过程以及技术效果参见上述,下述不再赘述。
图14为本申请实施例提供的时序数据同步装置的结构示意图,请参照图14,数据同步装置,包括:接收模块100、插入模块200;
接收模块100,用于接收服务器发送的至少一段待同步数据的信息,每段待同步数据的信息包括:待同步数据、开始时间、结束时间以及数据状态,数据状态包括:已有数据、无数据、缺失数据;
插入模块200,用于根据待同步数据的开始时间、待同步数据的结束时间、待同步数据的数据状态以及本地数据的同步状态日志,将待同步数据插入至本地数据的同步状态日志中,得到新的本地数据的同步状态日志;其中,本地数据的同步状态日志中包括多个时间段,每个时间段包括开始时间、结束时间、开始时间的数据状态以及结束时间的数据状态。
可选地,插入模块200,具体用于根据至少一段待同步数据的开始时间、待同步数据的结束时间以及待同步数据的数据状态,确定待同步数据对应的信息编组表达格式;根据待同步数据对应的信息编组表达格式确定待同步数据的二叉树结构。
可选地,该装置还包括判定模块300;判定模块300,用于分别判定待同步数据的开始时间与本地数据的同步状态日志中第一个时间段的开始时间,以及待同步数据的结束时间与本地数据的同步状态日志中最后一个时间段的结束时间的先后关系。
可选地,插入模块200,具体用于若待同步数据的开始时间小于或者等于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间小于本地数据的同步状态日志中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有时间戳小于或者等于待同步数据的结束时间的节点并记录其中时间戳最大节点的数据状态;判断时间戳最大节点的数据状态与待同步数据的数据状态是否一致;若一致,则根据待同步数据的开始时间以及待同步数据的数据状态确定插入后的二叉树结构;若不一致,则根据待同步数据的开始时间以及待同步数据的数据状态、待同步数据的结束时间以及时间戳最大节点的数据状态确定插入后的二叉树结构。
可选地,插入模块200,具体用于若待同步数据的开始时间小于或者等于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间大于或者等于本地数据的同步状态日志中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有节点,并根据待同步数据的开始时间、结束时间、数据状态确定插入后的二叉树结构。
可选地,插入模块200,具体用于若待同步数据的开始时间大于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间小于本地数据的同步状态日志中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有时间戳小于或者等于待同步数据的结束时间且大于或者等于待同步数据的开始时间的节点并记录其中时间戳最大节点的数据状态以及时间戳最小节点的数据状态;根据时间戳最大节点的数据状态、时间戳最小节点的数据状态以及待同步数据的数据状态,得到插入后的二叉树结构。
可选地,插入模块200,具体用于分别判断时间戳最大节点的数据状态以及时间戳最小节点的数据状态与待同步数据的数据状态是否一致;若时间戳最大节点的数据状态与待同步数据的数据状态一致,且时间戳最小节点的数据状态与待同步数据的数据状态一致,则确定本地数据的同步状态日志为插入后的二叉树结构;若时间戳最大节点的数据状态与待同步数据的数据状态不一致,且时间戳最小节点的数据状态与待同步数据的数据状态一致,则根据待同步数据的开始时间、时间戳最大节点的数据状态确定插入的二叉树结构;若时间戳最大节点的数据状态与待同步数据的数据状态一致,且时间戳最小节点的数据状态与待同步数据的数据状态不一致,则根据待同步数据的结束时间、时间戳最小节点的数据状态确定插入后的二叉树结构;若时间戳最大节点的数据状态与待同步数据的数据状态不一致,且时间戳最小节点的数据状态与待同步数据的数据状态不一致,则根据待同步数据的开始时间以及时间戳最大节点的数据状态、待同步数据的结束时间以及时间戳最小节点的数据状态确定插入后的二叉树结构。
可选地,插入模块200,具体用于若待同步数据的开始时间大于本地数据的同步状态日志中第一个时间段的开始时间且待同步数据的结束时间大于或者等于待同步数据的数据结构中最后一个时间段的结束时间,则删除本地数据的同步状态日志中所有时间戳大于或者等于待同步数据的开始时间的节点并记录其中时间戳最小节点的数据状态;判定时间戳最小节点的数据状态与待同步数据的数据状态是否一致;若一致,则根据待同步数据的结束时间以及数据状态确定插入后的二叉树结构;若不一致,则根据待同步数据的结束时间以及待同步数据的数据状态、待同步数据的开始时间以及时间戳最小节点的数据状态确定插入后的二叉树结构。
上述装置用于执行前述实施例提供的方法,其实现原理和技术效果类似,在此不再赘述。
以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器(digital singnal processor,简称DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(CentralProcessing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。
图15为本申请实施例提供的计算机设备的结构示意图,请参照图15,计算机设备,包括:存储器400、处理器500,存储器400中存储有可在处理器500上运行的计算机程序,处理器500执行计算机程序时,实现上述数据同步方法的步骤。
本申请实施例的另一方面,还提供一种存储介质,存储介质上存储有计算机程序,该计算机程序被处理器执行时,实现上述数据同步方法的步骤。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。