一种嵌入式设备配置文件同步比较的方法与流程

文档序号:12158079阅读:607来源:国知局
一种嵌入式设备配置文件同步比较的方法与流程

本发明涉嵌入式配置文件主动管理或变化分析等领域,具体涉及一种嵌入式设备配置文件同步比较的方法,特别适用于主备系统或者分布式同步系统,其需要实时同步或者多系统协作配置更新、文件实时跟踪分析。



背景技术:

随着通信技术的不断发展和通信规模的指数级扩张,信息系统间的同步或协作更新变的更为重要,对某些主备构架的嵌入式系统,或者分布式实时同步嵌入式系统来说尤为如此。目前对于嵌入式系统的管理,绝大部分嵌入式通信设备仍然以配置文件作为设备信息记录、保存、备份与同步、手段分析的主要方式。嵌入式系统由于CPU处理能力较弱,对于较大文件的比较方法,更多蕴含对实时性的要求,因而存在算法效率低、延时长的问题。



技术实现要素:

本发明要解决的技术问题是,针对现有嵌入式系统由于CPU处理能力较弱,对于较大文件的比较算法效率低、延时长的不足,提供一种嵌入式设备配置文件同步比较的方法,提升算法效率,减少处理延时方面,以较少的资源开销和时间延时来分析配置文件的差异,方便各个主备系统或同步系统以较少的代价完成同步更新或者感知分析。

本发明为解决上述技术问题所采用的技术方案是:

一种嵌入式设备配置文件同步比较的方法,包括以下步骤:

S1、将配置文件按逐行配置为最小单位,多行配置的合集形成数组块;

S2、通过算法分析出数组块的最大相似块单元,也即最长公共序列:在一次最长公共序列查找中,对一大块的数组块进行比较,对于相关或者相同的数组块(实质为对应行的配置相同),在内部记录中给予标记,对于未被标记的数列,则表示其数组块对应行的配置不同;

S3、通过逐次递归,逐步分析出各个相同的数组块并标记,剩余未标记的部分导出为差异性数组块(逐次递归方法将不同的数组块差异定位到具体的某特定配置行号)。

按上述方案,所述步骤S1中,配置文件内容按文本行模式逐行读取,并按特定算法形成数字化数组,多行文本进行数字化后的数组集合形成数组块。

按上述方案,所述特定算法是指:采用HASH算法将本行的字符HASH数字化,HASH算法具体为:设定第i行字符配置的HASH值为HS[i],第j行字符配置的HASH值为HS[j],以此类推,整个设备配置文件形成HASH数组块;多个配置文本文件,分别形成不同的HASH数组块;在完成各个配置文件的HASH数字化后,实际的配置文件同步比较,则变为两组HASH数组块的同步比较(本发明选择最长公共序列方法)。

按上述方案,步骤S2中,最长公共序列的算法具体为:

①对于两个HASH数组数列x[n],y[m],分别从数列x[]、数列y[]的0开始,n++,m++循环,相同结果记录为L[]:

如果x[i]==y[j],则L[i,j]=L[i-1,j-1]+1;

如果x[i]!=y[j],则L[i,j]=max{L[i,j-1],L[i-1,j]};

其中,i<n,j<m;

②第一次轮训完毕,L[i,j]中的数字就是x[n]与y[m]的最长公共序列,记录对应的i或者j编号,即检索到配置文件的行编号;

③从数列x[]和y[]中截取掉L[]后,数列x[]和y[]分别变为两段数据x1[]、x2[]和y1[]、y2[],再次比较x1[]和y1[],x2[]和y2[],以此类推,即可得出次级公共子序列L1[],L2[],…,Ln[],直至xn[]或ym[]数据为空;

④最后逐次完成对上述各级公共序列的分段递归,将不同的配置差异定位到具体的某行字符命令HASH值,最终生成差异性记录文件。

本发明的工作原理:本发明适用于基于文本行配置为基础的嵌入式设备,其需要实时或者动态对比新旧配置文件的差异情况,或者适用于在部署了主备或分布式系统,需要实时同步各个系统的配置变化情况。由于主备系统或者分布式同步系统中配置文件存在逐步叠加的特性(排除网络规划重新设计、配置重新部署的情况),相关设备不同时间段下的配置文件,相似度比较高,而差异性配置较少,因此本发明分析配置文件差异,实时监控及对比配置文件变化,实时感知各分布式系统配置命令,同步主备配置文件,最后导入设备差异性配置文件,先将配置命令数字化、块状化,再分块检测相似度,逐步缩小不同块的范围,最终定位到具体差异性的配置命令。

本发明产生的有益效果是:

1、嵌入式系统由于CPU处理能力较弱,对于较大文件的比较方法,更多蕴含的对实时性的要求,本发明着重在于提升算法效率,减少处理延时方面,特别适用在主备或者分布式嵌入系统中,以配置文件的差异来协从主备系统或者各个分布系统的实时配置同步更新工作,以减少配置同步的代价,其效率远比一般数据库同步要减少很多的资源消耗和时间开销,这对其自身处理能力和内存资源就比较有限的嵌入式设备来说更为可贵;

2、由于分布操作的特点,各系统需要保持配置的实时同步或者动态感知,以方便各个系统的灵活及准确协作,本发明在力求减少算法的时间复杂度和空间复杂度的情况下,基于最大相似块文件检查,并逐步递归检测出最小差异行,也即逐条命令行差异分析,以此迅速感知到各个分布端点配置的变化,协助本系统实时同步或更新,其同步比较的范畴包括实时同步、热备、冷备等;

3、本发明方法也适用于处理其它需要文本分析的嵌入式系统,譬如实时告警分析,日志文件跟踪等;对于以导入方式为配置下发方式的设备,也可以通过本方法提高分析效率;对于批量配置导入类型的系统,通过本方法,可以在减少差异性配置量的情况下,降低系统负担,减少对业务的影响时间;也可以用于系统分析配置差异,可最少量完成差异性配置更新,减少对系统运行的影响。

附图说明

图1为本发明嵌入式设备配置文件同步比较的方法流程图;

图2为本发明递归循环导出差异性配置文件集的结构流程图;

图3为本发明实施例字符按照ASCII编码的代码表;

图4为本发明实施例最长公共序列的算法思想示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。

参照图1所示,本发明所述的嵌入式设备配置文件同步比较的方法,包括以下步骤:

S1、将配置文件按逐行配置为最小单位,多行命令字的合集形成数组块;

S2、通过算法分析出数组块的最大相似块单元,也即最长公共序列:在一次最长公共序列查找中,对一大块的数组块进行比较,对于相关或者相同的数组块,在内部记录中给予标记,对于未被标记的数列,则表示为差异性数组块;

S3、通过逐次递归,逐步分析出各个相同的数组块并标记,剩余未标记的部分则导出为差异性数组块(逐次递归方法可将不同的数组块差异定位到具体的某特定配置行号)

采用HASH算法将本行的配置HASH数组化,HASH算法具体为:设定第i行配置的HASH值为HS[i],第j行配置的HASH值为HS[j],以此类推,一个配置文件形成HASH数组;多个配置文本文件,将形成不同的HASH数组。例如对本系统的配置文本HASH数组表名为HASH_1,对于备份端或者对端的系统配置文件HASH数组表名为HASH_2,以此类推;不同设备的配置文件同步比较,则变为两组HASH数组间的最长公共序列的对比过程。

以下对HASH部分、最大公共数列、递归及分类算法分别介绍。

HASH数列:由于常见的配置文件为文本类字符行组成,一般长度都有限,HASH数组化的要求必须是每行配置文件实例数组化后,其结果必须唯一且不重复。

以通信系统为例,配置文本文件一般选用的字符按照如图3所示的ASCII编码,有效字符范围一般为0x1E-0x7F(十六进制),一般一条配置行的长度也不会超过1K个字符,把逐行配置中的字符有序输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值HS[i]。这种转换是一种压缩映射,其算法需要保证不同的输入散列成不相同的输出。简单的说就是一种将任意内容的输入转换成相同长度输出的加密方这样,由于对应数组对应关系被实时记录下来,我们只要对比了HS[i]值,就可以快速确认其输入的字符序列是否一致。当然映射算法的不同,可能会导致不同的输入散列成了相同的输出,本方案选择了一种按位编码的方式,即按照文本字符的排序1,2.3….i,以此对本行命令进行编码HS[i]=str[1]+str[2]*i+str[3]*i…..+str[i]*i,其中str[3]代表对应ASCII字符的十进制编号。

例如:字符串的HASH算法,char*value="hello,world";

int key=(int)'h'+(int)'e'*2+(int)'l')*3++(int)'l')*4+(int)'o')*5+(int)'')*6+(int)',')*7+(int)'w')*8+(int)'o')*9+(int)'r')*10+(int)'l')*11+(int)'d')*12

最长公共序列:对于两个数组数列,如果是两个或多个已知序列的子序列,且是所有子序列中最长的,则为最长公共序列。本文吸取其思想,在以此对比基础上改造,除可以最大程度上提供准确性外,更重要的是:需要检测出所有相同的子序列、相似的子序列和完全不同的子序列,对应到实际应用,即:保持相同的配置、修改部分配置、添加或删除新的配置。在实际的文件配置中,可能一份文件中不同的位置均有修改,或者同一行文件中部分字段修改,因此也需要算法能对配置文件的解析能给予足够的信息。

图4介绍了一种最大公共序列,对于char x[]="abcbdacbdec",对于char y[]="bdacbadec",其最大公共序列为“bdac”,次级公共序列为“dec”,其余字段均不相同,基本算法思想为:

①i和j分别从0开始,对数列x[]、数列y[]进行m++、n++循环,相同结果记录如L[]:

如果x[i]==y[j],则L[i,j]=L[i-1,j-1]+1;

如果x[i]!=y[j],则L[i,j]=max{L[i,j-1],L[i-1,j]}

②第一次轮训完毕,L[i,l]中的数字就是最长公共子序列L[]=“bdac”,记录对应的i或者j编号,即可检索到配置文件的行编号;

③从数列x[]和y[]中截取掉L[]后,x[]和y[]会分别变为两段数据,分别为:

x1[]=”abc”,x2[]=”bdec”

y1[]=””,y2[]=”badec”

再次比较x1[]和y1[],x2[]和y2[],以此类推,即可得出次级公共子序列L1[],L2[],…,Ln[],直至xn[]或ym[]数据为空;

④最后参照图2所示的递归及分类算法流程,逐次完成对上述各级公共序列的分段递归,以及对内部xn[]、yn[]、Ln[]各个数列集进行具体编号,将不同的配置差异定位到具体的某行字符命令HASH值,最终生成差异性记录文件。

本发明并不仅仅限于说明书和实施方式中所列运用,对于本领域的技术人员来说,根据本发明作出各种相应的更改和变型,相应的更改和变型都属于本发明权利要求的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1