发明内容
为了解决上述背景技术中存在的至少一项技术问题,本发明提供一种数字孪生信息同步方法、系统、可读存储介质及设备,其将Merkle Tree变形为所有子树均为完全二叉树的形式实现对Merkle Tree的改进,在对数据分块的基础上为数字孪生技术的批量仿真电表数据和计量装置数据分别构建改进Merkle Tree,通过对Merkle Root及其各个子节点差异比对实现快速一致性检验,并提出了应用该方法的最优数据分块策略和多线程优化方法,大幅度提升了电力系统海量数据一致性比对和差异数据的定位速度,定位差异数据块后,仅需要该块即实现数据的快速同步,大幅度降低同步所需时间和传输数据量。
为了实现上述目的,本发明采用如下技术方案:
本发明的第一个方面提供一种数字孪生信息同步方法。
在一个或多个实施例中,一种数字孪生信息同步方法,其包括:
将被测试数据分块,基于每块数据所包含的数据内容,生成从仿真系统和测试系统接口获取数据的请求指令集;
依据数据请求指令集,以多线程的方式向仿真系统和测试系统接口对应请求分块数字孪生仿真数据和分块测试数据;
基于请求获取的数字孪生仿真数据和测试数据分别构建Merkle Tree;其中Merkle Tree的所有子树均为完全二叉树;
差异比对数字孪生仿真数据的Merkle Tree和测试数据的Merkle Tree的根节点及其各个子节点,以实现数字孪生信息的快速一致性检验。
本发明的第二个方面提供一种数字孪生信息同步系统。
在一个或多个实施例中,一种数字孪生信息同步系统,其包括:
数据请求生成模块,其用于将被测试数据分块,基于每块数据所包含的数据内容,生成从仿真系统和测试系统接口获取数据的请求指令集;
分块数据请求模块,其用于依据数据请求指令集,以多线程的方式向仿真系统和测试系统接口对应请求分块数字孪生仿真数据和分块测试数据;
Merkle Tree构建模块,其用于基于请求获取的数字孪生仿真数据和测试数据分别构建Merkle Tree;其中Merkle Tree的所有子树均为完全二叉树;
数据比对检索模块,其用于差异比对数字孪生仿真数据的Merkle Tree和测试数据的Merkle Tree的根节点及其各个子节点,以实现数字孪生信息的快速一致性检验。
本发明的第三个方面提供一种计算机可读存储介质。
在一个或多个实施例中,一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述所述的数字孪生信息同步方法中的步骤。
本发明的第四个方面提供一种计算机设备。
在一个或多个实施例中,一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的数字孪生信息同步方法中的步骤。
与现有技术相比,本发明的有益效果是:
(1)本发明基于改进Merkle Tree进行数字孪生数据比对时,如建立深度为d的Merkle Tree,当最后一个分块数据下载完成后,仅需要进行d次哈希运算即可构建完整的Merkle Tree,从而获得用于比对的Merkle Root,其比对效率远超过逐个数据元比对。
(2)本发明进行数据比对,与使用未改进Merkle Tree相比,需要遍历的总结点数减少,原先位于最右侧的单身哈希需要经过一次或者多次自身哈希用于维持树的平衡,但同样增加了检索的成本;改进后的算法不再进行自身哈希,而是直接将叶子节点作为上层节点,使得总hash(哈希)次数降低。
(3)本发明基于改进Merkle Tree进行数字孪生数据比对,自根节点之下的所有子树均为完全二叉树,完全二叉树具有非常良好的搜索性能,因此能够提升差异数据的检索性能;尤其当开启多线程搜索时,每个线程所搜索的子树均为完全二叉树搜索,因此单个线程的搜索效率相对接近,在相同的资源条件下,进一步提高了整体搜索性能。
(4)本发明不仅实现了海量数据的快速比对,还能够实现差异数据的精准定位;执行效率远远高于传统的一一比对的方式,并可通过多线程的方式进一步优化差异比对效率,解决了单纯哈希算法仅可用于验证一致性无法进行差异定位的问题,能够有效的提升海量数据条件下数字孪生数据与计量装置数据一致性检验和差异数据定位效率,为二者数据的实时同步提供技术支撑。
本发明附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
应该指出,以下详细说明都是例示性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
实施例一
参照图1和图11,为了提高数字孪生设备同计量设备之间数据和参数、状态量的同步实时性,本实施例的数字孪生信息同步方法,其包括:
S101:将被测试数据分块,基于每块数据所包含的数据内容,生成从仿真系统和测试系统接口获取数据的请求指令集。
在一些实施例中,对被测数据依据数据分块策略进行分块,并且对划分完成的数据块进行编号,并编号完成的数据块依序号排列。
针对每块数据所包含的数据内容,生成符合仿真系统和测试系统接口要求的数据请求指令,最终形成需要从仿真系统和测试系统接口获取数据的请求指令集,以及指令集和数据块的映射关系。
由于全量同步的数据量太过巨大,本实施例对数据内容进行分块的基础上,通过对分块内容快速比对的方式,迅速发现两者之间的差异比对,从而保障数字孪生仿真数据和计量设备数据的一致性。
在具体分块的过程中,当所构建的Merkle Tree深度越大,其相对检索定位的效率越低;在等量数据条件下,单个数据块内包含的数据项数越多,即数据块总数越少,定位数据块后比对差异数据的时间越长。因此,要提高检索效率,必须要提高数据块-深度比,即二叉树叶子节点-深度比。
S102:依据数据请求指令集,以多线程的方式向仿真系统和测试系统接口对应请求分块数字孪生仿真数据和分块测试数据。
S103:基于请求获取的数字孪生仿真数据和测试数据分别构建Merkle Tree;其中Merkle Tree的所有子树均为完全二叉树。
具体地,对编号完成的数据块进行哈希运算,获得具有序号的哈希值列表。针对哈希值列表,构建数字孪生仿真数据和测试数据的Merkle Tree。以多线程的方式向仿真系统和测试系统接口平台请求分块数据,当一个分块数据下载完成后,根据指令集和数据块的映射关系对该分块进行标识。对下载完成的分块进行哈希运算,获得其对应的哈希值;当序号相邻的两个数据分块下载完成并计算完成哈希值后,将其哈希值合并哈希得到其子哈希,不断重复哈希值合并步骤,最终建立数字孪生仿真数据和测试数据的Merkle Tree。
针对一定条件下树的构建和遍历成本急剧上升问题,本实施例对Merkle Tree的构建方法进行改进,并对改进的Merkle Tree进行了多线程优化。
本实施例采用多线程,使得当子树通过多线程的方式进行差异搜索时,每个线程的搜索效率相对最优。同时,通过线程独立搜索的方式,有效的解决了改进Merkle Tree不平衡的问题,将一个不平衡树的搜索问题转化为多个平衡树的搜索问题,并通过线程池的控制对搜索效率和资源进行有效的平衡。
S104:差异比对数字孪生仿真数据的Merkle Tree和测试数据的Merkle Tree的根节点及其各个子节点,以实现数字孪生信息的快速一致性检验。
在具体实施中,比对数字孪生仿真数据的Merkle Root和测试数据的MerkleRoot,如两者相等,则说明测试通过;否则为测试不通过。
当测试不通过时,以多线程的方式对数字孪生仿真数据的Merkle Tree和测试数据的Merkle Tree进行检索比对,发现差异数据,其具体过程为:
A、比较子节点哈希值差异:比对数字孪生仿真数据和测试数据Merkle Root下两个子节点的哈希值差异:若某节点两个哈希值相同,则结束比较过程;若某节点两个哈希值不同,则继续比对该节点的子节点,直到所有叶子节点比对完成。
B、定位差异节点:定位所有哈希值存在差异的叶子节点,取出该叶子节点对应的数字孪生仿真数据分块和测试数据分块。
C、确定差异数据:对数字孪生仿真数据分块和测试数据分块中的数据项进行一一比对,发现差异数据。
本实施例中,比对数据的来源取自某省电力公司电力系统基于数字孪生技术的批量仿真电表数据和模拟计量装置数据;这里只展示部分实验示例,实际应用中,可以根据项目需求指定数据来源,本实施例未对数据来源做出限制。
本实施例的Merkle Tree构建的具体实施步骤如下:
假设下层节点数为m,m>1,其节点分别为p1,p2,…,pm。
当m=2时,上层节点数n=1,其节点为q1,有
q1=H(p1,p2) (1)
当mod(m,4)=0时,上层节点数n=m/2,其节点为q1,q2,…,qn,有
qi=H(p2i-1,p2i),1≤i≤n (2)
当mod(m,4)=3时,上层节点数n=(m-1)/2+1,其节点q1,q2,…,qn,有:
当mod(m,4)=2时,上层节点数n=(m-2)/2+1,其节点为q1,q2,…,qn,有:
当mod(m,4)=1时,上层节点数n=(m-3)/2+1,其节点q1,q2,…,qn有:
本实施例中Merkle Tree左子树为完全二叉树,若整个树的深度为d,则左子树深度必定为dl=d-1,右子树的深度为1≤dr≤d-1。
例如:叶子节点数为2时的Merkle Tree,如图2所示;叶子节点数为5时的MerkleTree,如图3所示;叶子节点数为6时的Merkle Tree,如图4所示;叶子节点数为7时的MerkleTree,如图5所示;叶子节点数为8时的Merkle Tree,如图6所示。
由于该树非平衡树,因此如果采用单线程搜索,其非平衡性会影响其搜索效率,故本实施例提出使用多线程的方式对树的差异节点进行搜索比对。其主要流程为:
步骤(1):检验Merkle Root是否一致。当Merkle Root不一致时,针对左、右子树分别开启两线程进行比对。两个子树的搜索过程相同。
步骤(2):检查根节点是否一致;如果根节点一致,则返回;否则分别检查左、右子树的一致性。
步骤(3):当左、右子树均一致时,返回。
步骤(4):当左、右子树仅有一个子树存在差异时,将该子树的根节点作为根节点继续检索,返回步骤(2)。
步骤(5):当左、右子树均存在差异时。开启独立线程,将左子树根节点作为根节点进行检索;当前线程将右子树的根节点作为根节点进行检索。子树的方法同步骤(2)及其后续方法。
步骤(6):线程采用线程池的方式进行管理,最大活动线程数量可以根据测试用的机器资源情况确定。当线程超过最大活动线程数时,会进入等待队列,直到某一个线程运算完成后,依据队列顺序逐个运行。
为了验证基于改进Merkle Tree的数字孪生仿真数据与计量装置数据比对方法的有效性,本实施例采用取自某省级电力公司电力系统的基于数字孪生技术的批量仿真电表的仿真数据,开展模拟实验。实验采用模拟生成计量装置数据的方式。在测试过程中,模拟数据同数字孪生仿真数据通过XML格式的文件进行存储和交互。
测试数据共包含数据项约3660万,数据量约1.57G,具体数据情况参见表1:
表1测试数据集数据量表
数据子类 |
测试总数据量 |
日冻结电能示值 |
3,150,625 |
日冻结电能量 |
3,150,625 |
负荷曲线 |
7,008,000 |
电压曲线 |
2,628,000 |
电流曲线 |
2,628,000 |
实验一:根据测试实验数据量,构建深度为9的Merkle Tree,数据分块大小为6.3M,共计构建256个分块。测试使用传统一一比对的方式进行差异数据的查找差异数据消耗时间和使用Merkle Tree进行数据验证和寻找差异时间。实验进行10次,每次测试前在测试数据中,随机加入150个差异数据,并使其随机分布于32个数据分块中,最后求10次实验的平均消耗时间,测试结果如图7所示。
依据实验可发现,由于一一比对必须将所有数据都比对完成后方可确认完成验证,因此其验证时间和差异定位耗时相同。使用改进Merkle Tree仅需比对所构建树的Merkle Root,因此效率远远超过一一比对。在数据验证过程中,Merkle Tree为满二叉树,共计511个节点,其中叶子节点256个。依据本文所提出的数据检索方法,在搜索过程中,实际搜索节点192个,最终定位32个存在差异的数据块,单个数据块检索耗时仅为一一对应的1/256,差异数据定位总耗时仅为一一比对方式的14.3%。由此可见,采用Merkle Tree进行数据比对能够有效的提升数据验证和差异定位的效率。
实验二:构建深度为9的改进Merkle Tree,数据分块大小为6.3M,构建256个分块。每个实验进行10次。每次测试前在测试数据中,随机加入10、50、100、150个差异数据,并使其随机分布于1、8、16、32个数据分块中,分别测试在不同的差异数据分布条件下,多线程同单线程的差异数据定位效率。最后求10次实验的平均消耗时间,测试结果如图8所示:
由图8可以看出,当差异数据分布于一个数据块时,多线程和单线程的检索效率几乎相同,当分块数量较多,且相对均分在多个数据块中时,多线程的搜索效率的优势较为明显。
实验三:针对测试数据分别采用不同的数据块分块方法。其一为构建深度为9的改进Merkle Tree,该树为满二叉树,数据分块大小为6.3M,共计构建256个分块;其二为深度为10的改进Merkle Tree,数据分块大小为5M,共计319个数据块,此时,所构建的MerkleTree的左子树为深度为9的满二叉树,右子树为深度为7的非满完全二叉树。针对两种构建方法,随机加入20个差异数据,分别位于两个数据块中,其中一个数据块位于左子树,另一个位于右子树。分别测试该条件下多线程同单线程的差异数据定位效率。实验进行10次,最后求10次实验的平均消耗时间,测试结果如图9所示:
由图9可以看出,当差异数据当数据块数量大于2n时,所构建的Merkle Tree左右子树深度差异较大。此时,如果少量差异数据相距较远,采用多线程的处理方式同样能够有效的提升差异比对的处理效率,尤其是当左、右子树平衡性较差时,通过多线程处理能够获得更为显著的提升效果。
实验四:将测试数据按照11.8M分块,共计133个数据块,分别构建原始MerkleTree和改进Merkle Tree。所构建的原始Merkle Tree深度为8,其左子树为深度为7的满二叉树,右子树为通过深度7的非完全二叉树,共计273个节点;所构建的改进Merkle Tree深度为8,其左子树为深度为7的满二叉树,右子树为深度为3的非满完全二叉树,共计265个节点。将差异数据置于第133数据块。分别测试该条件下两种Merkle Tree的构建时间和在多线程条件下的差异数据定位效率。实验进行10次,最后求10次实验的平均消耗时间,测试结果如图10所示:
由图10可以看出,使用改进Merkle Tree构建方法所构建的树相比原始MerkleTree构建方法具有更少的节点数,因此其树的构建速度更快。
在差异定位过程中,定位差异数据块需要遍历的节点数与该块所在子树的深度相同。原始Merkle Tree构建方法所构建树平衡性较差时,其非完全的右子树深度同满二叉树的左子树相同;改进Merkle Tree在同样条件下所构建的右子树为深度较小的完全二叉树。因此,当差异数据块位于非完全子树时,使用改进Merkle Tree构建方法需要遍历的节点数更少,具有更短的差异数据定位时间。
实施例二
本实施例提供了一种数字孪生信息同步系统,其包括:
数据请求生成模块,其用于将被测试数据分块,基于每块数据所包含的数据内容,生成从仿真系统和测试系统接口获取数据的请求指令集;
分块数据请求模块,其用于依据数据请求指令集,以多线程的方式向仿真系统和测试系统接口对应请求分块数字孪生仿真数据和分块测试数据;
Merkle Tree构建模块,其用于基于请求获取的数字孪生仿真数据和测试数据分别构建Merkle Tree;其中Merkle Tree的所有子树均为完全二叉树;
数据比对检索模块,其用于差异比对数字孪生仿真数据的Merkle Tree和测试数据的Merkle Tree的根节点及其各个子节点,以实现数字孪生信息的快速一致性检验。
本实施例的数字孪生信息同步系统中的各个模块,与实施例一中的数字孪生信息同步方法中的各个步骤一一对应,其具体实施过程也相同,此处不再累述。
实施例三
本实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述实施例一所述的数字孪生信息同步方法中的步骤。
实施例四
本实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述实施例一所述的数字孪生信息同步方法中的步骤。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。