配置信息处理方法、装置、设备及存储介质
文献发布时间:2023-06-19 11:32:36
技术领域
本发明实施例涉及计算机技术领域,尤其涉及配置信息处理方法、装置、设备及存储介质。
背景技术
随着互联网技术的不断发展,出现了越来越多高度配置化的平台系统,配置化平台可以将企业业务模块化,抽象为允许接收外部参数的功能模块,系统通过预设的逻辑和录入的参数,完成业务的调度处理。其中,由系统外部录入的参数等相关信息可以被称为配置信息,一般以配置文件的形式存在。
目前,配置化系统的使用越来越广泛,配置信息也越来越多样化,且经常需要进行更新,然而,针对配置信息的管理方案仍不够完善,需要改进。
发明内容
本发明实施例提供了配置信息处理方法、装置、设备及存储介质,可以实现自动对配置信息进行差异比较。
第一方面,本发明实施例提供了一种配置信息处理方法,该方法包括:
将第一配置信息转换为第一描述数据,将第二配置信息转换为第二描述数据;
采用预设比较方式对所述第一描述数据和所述第二描述数据进行比较,并根据比较结果生成第一差异描述数据,其中,所述第一差异描述数据用于描述所述第一配置信息和所述第二配置信息之间的差异。
第二方面,本发明实施例提供了一种配置信息处理装置,该装置包括:
描述数据转换模块,用于将第一配置信息转换为第一描述数据,将第二配置信息转换为第二描述数据;
比较模块,用于采用预设比较方式对所述第一描述数据和所述第二描述数据进行比较,并根据比较结果生成第一差异描述数据,其中,所述第一差异描述数据用于描述所述第一配置信息和所述第二配置信息之间的差异。
第三方面,本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例提供的配置信息处理方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例提供的配置信息处理方法。
本发明实施例中提供的配置信息处理方案,将第一配置信息转换为第一描述数据,将第二配置信息转换为第二描述数据,采用预设比较方式对所述第一描述数据和所述第二描述数据进行比较,并根据比较结果生成第一差异描述数据,其中,第一差异描述数据用于描述所述第一配置信息和所述第二配置信息之间的差异。通过采用上述技术方案,先将需要进行比较的两种配置信息转换成相应的描述数据,再对描述数据进行比较,可以避免直接对配置信息进行比较时得到一些非实质性的干扰差异信息,从而得到更加准确的用于描述配置信息之间的实质性差异的描述数据,为配置信息的分析和管理提供更加精准的依据。
附图说明
图1为一种配置信息示意图;
图2为另一种配置信息示意图;
图3为本发明实施例提供的一种配置信息处理方法的流程示意图;
图4为本发明实施例提供的另一种配置信息处理方法的流程示意图;
图5为又一种配置信息示意图;
图6为本发明实施例提供的又一种配置信息处理方法的流程示意图;
图7为本发明实施例提供的一种配置信息处理装置的结构框图;
图8为本发明实施例提供的一种计算机设备的结构框图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
为了更好的理解本发明实施例的技术方案,下面对相关技术进行说明。目前,在进行版本管理时,多采用Git(分布式版本控制系统)或SVN(Subversion,一种开放源代码的版本控制系统)等工具,这些工具可以方便地管理代码或文档等文件,现有的配置信息的比较方案也都是基于上述版本管理工具实现的。然而,配置信息中所表示的各项目是无序的,也就是说两个项目之间的相对位置对配置信息的实质内容是不构成影响的,但上述版本管理工具在进行比较时,都是基于文本进行比较的,位置的不同也会被版本管理工具视为差异,从而会输出较多非实质性的干扰差异信息,尤其是当配置信息内容较多时,过多的干扰差异信息会对后续的管理产生较大影响,如大幅增加人工成本以及大幅降低管理效率等。
以JSON格式的配置文件为例进行说明,JSON全称为JavaScript ObjectNotation,也可称为JS对象简谱,JSON是一种数据交换格式,可以表示数值(Number)、布尔值(Boolean)、字符串(String)、空指针(Null)、数组(Array,即有序序列)、以及由这些值组成的对象(Object,字符串与值的映射,一般以键值对的形式存在)。图1为一种配置信息示意图,如图所示的配置文件可以认为是一个基础版本的配置文件,可称为基础版本;图2为另一种配置信息示意图,是基于基础版本修改之后的配置文件,可称为第一版本。比较图1和图2可以看出,第一版本相较于基础版本,调整了键值对a:1的位置,增加了键值对d:4,由于JSON所表示的对象中的键值对是无序的,因此,两者的实质性差异是新增了键值对d:4,也即期望得到的比对结果应该展示新增了键值对d:4。但是,通过Git等现有工具得到的比对结果会标记出3行改动,包括新增键值对d:4和a:1位置调整信息,显然,a:1位置调整的信息是多余的。本发明实施例提供的技术方案,基于配置信息对应的描述信息进行比较,可以避免输出上述类似的非实质性的差异信息。
图3为本发明实施例提供的一种配置信息处理方法的流程示意图,该方法可以由配置信息处理装置执行,其中该装置可由软件和/或硬件实现,一般可集成在计算机设备中。如图1所示,该方法包括:
步骤301、将第一配置信息转换为第一描述数据,将第二配置信息转换为第二描述数据。
本发明实施例中,对配置信息的具体格式不做限定,例如可以是上文举例的JSON格式,还可以是可扩展标记语言(eXtensible Markup Language,XML)格式或另一种标记语言(YAML)格式等,其中,YAML是“YAML Ain't a Markup Language”的递归缩写。
示例性的,第一配置信息和第二配置信息的来源不做限定,可以是开发人员(以下简称为用户)当前编写的,也可以是从网络或其他设备获取或导入的。可选的,在本步骤之前,还可包括:获取第一配置信息和第二配置信息。例如,在计算机设备中显示配置信息比较页面,由用户选择需要进行比对的第一配置信息和第二配置信息;又如,可设定自动比对流程,计算机设备在根据当前运行逻辑确定可启动自动比对流程时,自动获取需要进行比对的第一配置信息和第二配置信息。
描述数据可以理解为对配置信息进行解释或说明的数据,也即可以用来描述配置信息中包含了哪些内容。本发明实施例对描述数据的具体数据结构也不做限定,可以是现有格式的数据结构、自定义的新数据结构、或者在现有格式数据结构基础上进行改进后得到的数据结构等。JSON Schema(描述)是一种数据结构,可以清晰的描述JSON数据的结构,可以理解为是一种描述JSON数据的JSON数据。对于上述列举的XML和YAML等配置信息的格式,可以与JSON实现互相转换,因此,可以采用JSON Schema作为各种配置信息对应的描述数据。
如前文举例,图1所示的基础版本可认为是第一配置信息,图2所示的第一版本可认为是第二配置信息。第一配置信息对应的第一描述数据中可包括基础版本中包含a、b和c三个键,以及a对应的值为1,b对应的值为2,c对应的值为3;第二配置信息对应的第二描述数据中可包括第一版本中包含a、b、c和d四个键,以及a对应的值为1,b对应的值为2,c对应的值为3,d对应的值为4。
步骤302、采用预设比较方式对所述第一描述数据和所述第二描述数据进行比较,并根据比较结果生成第一差异描述数据,其中,所述第一差异描述数据用于描述所述第一配置信息和所述第二配置信息之间的差异。
示例性的,在将配置信息转换成对应的描述数据之后,描述数据中仅关注配置信息中包含哪些内容,而对各内容出现的位置并不关心,也就是说,在采用预设比较方式对第一描述数据和第二描述数据进行比较时,可以比较两者中各包含了哪些内容,是否发生了项目的增加或删除,对于同一个项目,该项目对应的具体内容是否发生了修改,随后,根据比较结果生成第一差异描述数据,第一差异描述数据可以体现第一配置信息和第二配置信息之间的差异。
如前文举例,通过对比第一描述数据和第二描述数据得到的第一差异描述数据中可以包括:第二描述数据相比于第一描述数据增加了键值d,以及d对应的值为4。可见,通过对描述数据进行比对,可以快速准确地得出两个配置信息之间的实质性的差异。
本发明实施例中提供的配置信息处理方案,将第一配置信息转换为第一描述数据,将第二配置信息转换为第二描述数据,采用预设比较方式对所述第一描述数据和所述第二描述数据进行比较,并根据比较结果生成第一差异描述数据,其中,第一差异描述数据用于描述所述第一配置信息和所述第二配置信息之间的差异。通过采用上述技术方案,先将需要进行比较的两种配置信息转换成相应的描述数据,再对描述数据进行比较,可以避免直接对配置信息进行比较时得到一些非实质性的干扰差异信息,从而得到更加准确的用于描述配置信息之间的实质性差异的描述数据,为配置信息的分析和管理提供更加精准的依据。
在一些实施例中,差异描述数据的数据结构为预设数据结构,所述预设数据结构中包含比较信息关键字,所述比较信息关键字包括数据类型、结果标识、源值和目标值。这样设置的好处在于,可以更加全面地描述配置信息之间的差异。
在一些实施例中,所述采用预设比较方式对所述第一描述数据和所述第二描述数据进行比较,并根据比较结果生成第一差异描述数据,包括:对于当前待比较的第一节点,确定所述第一描述数据和所述第二描述数据中对应于所述第一节点的数据类型的是否一致;若不一致,则将第一差异描述数据中对应所述第一节点的数据类型确定为所述第二描述数据中所述第一节点的数据类型、结果标识确定为更新、源值确定为所述第一描述数据中所述第一节点的值、以及目标值确定为所述第二描述数据中所述第一节点的值。这样设置的好处在于,数据格式的不同可以认为是实质性差异,当数据格式不同时,可以直接认为发生了更新,快速得到比对结果。
示例性的,对于配置信息而言,数据类型之间可能存在嵌套的情况。例如,对象类型中某个键对应的值可以是一个对象;也可以包括多个数据类型的数据,例如对象类型中某个键对应的值中包括对象、数组、空指针、数字、字符串和布尔值等多个类型的数据。因此,配置信息一般为多层结构,每层结构可以称为一个节点,某个节点对应的下一层可记为该节点(可理解为父节点)的子节点,一个节点下可能存在一个或多个子节点,子节点也可能成为父节点,也即子节点下还可能存在一个或多个子节点。本发明实施例中,在采用预设比较方式对第一描述数据和第二描述数据进行比较时,可以按照节点之间的父子关系逐层进行比对。存在子节点的通常为对象或数组,空指针、数字、字符串和布尔值等一般不存在对应的子节点,对于第一层来说,一般为对象或数组,另外,层数越大则对应的深度越大。
本发明实施例中,差异描述数据的数据结构为预设数据结构,预设数据结构中包含比较信息关键字,比较信息关键字可理解为用来表示比较结果的相关字段,可包括数据类型、结果标识、源值和目标值。其中,数据类型可以用来表示当前节点对应的数据类型,一般以目标配置信息为准,为了便于后续说明,可以将第一配置信息记为源配置信息,也即用来比较的基准,可以将第二配置信息记为目标配置信息,也即认为是在源配置信息基础上进行修改得到的配置信息。结果标识可以用来表示比较结果的类型,如可包括相等(equal)、增加(add)、删除(delete)和更新(update)。源值(_origin)可用来表示源配置信息中节点的取值。目标值(_target)可用来表示目标配置信息中节点的取值。此外,预设数据结构中除了比较信息关键字之外,还可包括数据内容,例如可以保留JSON Schema的约定,使用_properties标记对象类型的数据内容,使用_items标记数组类型的数据内容。
示例性的,在进行逐层比对的过程中,可以将当前进行对比的节点记为第一节点,先确定第一描述数据和第二描述数据中对应于第一节点的数据类型的是否一致,若不一致,则将第一差异描述数据中对应第一节点的数据类型确定为第二描述数据中第一节点的数据类型,将第一差异描述数据中对应第一节点的结果标识确定为更新,将第一差异描述数据中对应第一节点的源值确定为第一描述数据中第一节点的值、以及将第一差异描述数据中对应第一节点的目标值确定为第二描述数据中第一节点的值。
在一些实施例中,在所述确定所述第一描述数据和所述第二描述数据中对应于所述第一节点的数据类型的是否一致之后,还包括:若一致,则采用所述第一节点的数据类型对应的预设比较方法对所述第一描述数据和所述第二描述数据中的第一节点进行比较,并根据比较结果生成所述第一节点对应的第一差异描述数据。这样设置的好处在于,不同的数据类型具备各自的特点,可以根据数据类型的特点有针对性地设置不同的预设比较方法,使得比较结果更加准确,也能够提高比较效率。
在一些实施例中,当所述第一节点的数据类型为对象类型或数组类型时,所述预设比较方法为第一比较方法;其中,采用第一比较方法对所述第一描述数据和所述第二描述数据中的第一节点进行比较,并根据比较结果生成所述第一节点对应的第一差异描述数据,包括:依据预设对照维度指标确定所述第一节点中各子节点对应的第一集合和第二集合,其中,所述第一集合对应于所述第一描述数据,所述第二集合对应于所述第二描述数据;对所述第一集合和所述第二集合进行比较,并根据比较结果生成所述第一节点中各子节点对应的第一差异描述数据;根据所述第一节点中各子节点对应的第一差异描述数据确定所述第一节点对应的第一差异描述数据。这样设置的好处在于,对于对象和数组来说,其中包含的各子节点一般为并列关系,地位同等,采用集合运算的方式可以快速地对第一节点进行差异比较。
示例性的,求取集合运算的基础是每个元素具有判断相同或不同的依据,可将该依据称为对照维度指标,针对对象或数组,可以提前设置对照维度指标,称为预设对照维度指标。对于对象来说,一般为键值对,可以将键的名称作为预设对照维度指标,例如,{a:1,b:2}和{a:1,c:3},可以键名称a、b和c作为集合运算的依据。对于数组,可能存在多种形式,如[1,2]和[1,3]、[{name:“a”,value:1},{name:“b”,value:2}]和[{name:“a”,value:1},{name:“c”,value:3}]、[{id:“a”,value:1},{id:“b”,value:2}]和[{id:“a”,value:1},{id:“c”,value:3}],可以发现对于数组可能存在多种元素判定依据的期望。示例性的,可采用数组下标为判定依据,也即预设对照维度指标为数组中元素的下标,如上述的[1,2]和[3,1],[1,2]中的1和[3,1]中的3下标都是0,以此为判定依据。此外,还可以以如上述的name(名称)或id(身份标识)作为预设对照维度指标。
可选的,当所述第一节点的数据类型为数组类型时,在所述依据预设对照维度指标确定所述第一节点中各子节点对应的第一集合和第二集合之前,还包括:接收用户输入的对照维度指标的设置信息,并根据所述设置信息确定相应的预设对照维度指标。这样设置的好处在于,可以允许用户更加灵活地根据实际比对需求来设置预设对照维度指标,得到更加符合预期的差异描述数据。例如,针对上述的数组举例,计算机设备可以默认设置预设对照维度指标为数组中元素的下标,也可根据用户输入将上述的name或id作为预设对照维度指标。
在一些实施例中,所述对所述第一集合和所述第二集合进行比较,并根据比较结果生成所述第一节点中各子节点对应的第一差异描述数据,包括:将所述第一集合与所述第二集合的差集确定为第一子节点,将第一差异描述数据中对应所述第一子节点的数据类型确定为所述第一描述数据中所述第一子节点的数据类型、结果标识确定为删除、以及源值确定为所述第一描述数据中所述第一子节点的值。这样设置的好处在于,可以快速确定第一配置信息中存在但第二配置信息中不存在的第一子节点。其中,目标值可以为空。
在一些实施例中,所述对所述第一集合和所述第二集合进行比较,并根据比较结果生成所述第一节点中各子节点对应的第一差异描述数据,包括:将所述第二集合与所述第一集合的差集确定为第二子节点,将第一差异描述数据中对应所述第二子节点的数据类型确定为所述第二描述数据中所述第二子节点的数据类型、结果标识确定为增加、以及目标值确定为所述第二描述数据中所述第二子节点的值。这样设置的好处在于,可以快速确定第二配置信息中存在但第一配置信息中不存在的第二子节点。其中,源值可以为空。
在一些实施例中,当所述第一节点的数据类型为对象类型和数组类型之外的数据类型时,所述预设比较方法为第二比较方法;其中,所述对所述第一集合和所述第二集合进行比较,并根据比较结果生成所述第一节点中各子节点对应的第一差异描述数据,包括:将所述第一集合与所述第二集合的交集确定为第三子节点,若所述第三子节点的数据类型为对象类型或数组类型,则将所述第三子节点作为新的第一节点,并重复执行采用第一比较方法对所述第一描述数据和所述第二描述数据中的第一节点进行比较的相关步骤;否则,采用第二比较方法对所述第一描述数据和所述第二描述数据中的第三子节点进行比较,并根据比较结果生成所述第三子节点对应的第一差异描述数据。这样设置的好处在于,可以快速确定第一配置信息和第二配置信息中均存在的第三子节点,进而可以对第三子节点分别在第一配置信息和第二配置信息中的值进行比较。
示例性的,采用第二比较方法对所述第一描述数据和所述第二描述数据中的第三子节点进行比较,可以包括:将第一差异描述数据中对应所述第三子节点的数据类型确定为所述第二描述数据中所述第三子节点的数据类型;若所述第二描述数据中所述第三子节点的值与所述第一描述数据中所述第三子节点的值相同,则将第一差异描述数据中对应所述第三子节点的结果标识确定为相等,将第一差异描述数据中对应所述第三子节点的源值确定为所述第一描述数据中所述第三子节点的值,目标值可以为空;若所述第二描述数据中所述第三子节点的值与所述第一描述数据中所述第三子节点的值不同,则将第一差异描述数据中对应所述第三子节点的结果标识确定为更新,将第一差异描述数据中对应所述第三子节点的源值确定为所述第一描述数据中所述第三子节点的值,将第一差异描述数据中对应所述第三子节点的目标值确定为所述第二描述数据中所述第三子节点的值。
需要说明的是,第一节点对应的第一差异描述数据中,结果标识最终的取值与第一节点的各子节点对应的结果标识相关,若各子节点对应的结果标识均相同,则第一节点对应的第一差异描述数据中的结果标识与子节点对应的结果标识相同,若各子节点对应的结果标识存在至少两个取值时,则第一节点对应的第一差异描述数据中的结果标识为更新。此外,预设数据结构中还包括数据内容时,数据内容可以为第一节点中各子节点对应的第一差异描述数据。
示例性的,在对第一描述数据和第二描述数据中不同深度的节点逐一比较后,每个节点都可以返回相应的比较结果,得到相应的差异描述数据,将各节点对应的差异描述数据按照第一描述数据或第二描述数据的层级关系进行组装后,即可得到最终的第一差异描述数据。
图4为本发明实施例提供的另一种配置信息处理方法的流程示意图,如图4所示,该方法可包括:
步骤401、获取第一配置信息,并将第一配置信息转换为第一描述数据。
示例性的,以配置信息为JSON数据为例,第一配置信息可认为是参照版本,也即源配置信息,可以记为origin(源)。可将origin转换为JSON Schema格式的第一描述数据,例如可以采用将JSON数据转换为JSON Schema数据的转换工具进行转换,具体不做限定。
步骤402、获取第二配置信息,并将第二配置信息转换为第二描述数据。
示例性的,第一配置信息可认为是比对版本,也即目标配置信息,可以记为target(目标)。可将target转换为JSON Schema格式的第二描述数据,
步骤403、确定当前待比较的第一节点。
示例性的,在首次执行本步骤时,可以将第一层的第一个节点确定为当前待比较的第一节点,后续再执行本步骤时,可以逐层地顺序遍历不同深度的节点,按照遍历顺序确定当前待比较的第一节点。其中,遍历顺序可以根据实际需求设置。
步骤404、判断第一描述数据和第二描述数据中对应于第一节点的数据类型的是否一致,若是,则执行步骤405;否则,执行步骤406。
步骤405、采用第一节点的数据类型对应的预设比较方法对第一描述数据和第二描述数据中的第一节点进行比较,并根据比较结果生成第一节点对应的第一差异描述数据,执行步骤407。
示例性的,当origin和target的数据类型为对象时,此对象标记为:_type值为object;_status取值与该对象各键值的_status有关,若各键值的_status仅有一种值时,该对象取值与各键值的_status相同,若各键值的_status存在不只一种值时,则该对象取值为update;_properties取值为该对象各键值比对后的JSON Schema数据。其中,以键的名称作为预设对照维度指标。具体地:
获取origin和target的键组成的集合。
取origin的键与target的键的差集。此差集表明origin中含有这些键值对而target中没有,这些键值对应记录为:_type取origin数据类型,_status值为delete,_origin取origin的值,不返回_target。
取target的键与origin的键的差集。此差集表明target中含有这些键值对而origin中没有,这些键值对应记录:_type取target数据类型,_status值为add,不返回_origin,_target取target的值。
取origin的键与target的键的交集。此交集表明origin和target都含有这些键值对,需要对这些键值对逐一比对。遍历此交集,将origin中某键的值与target中相对应的键的值组成新的origin和target,返回步骤403进行递归比对,记录返回的JSON Schema数据。
示例性的,当origin和target的数据类型为数组时,此数组标记为:_type值为array;_status取值与该数组各值的_status有关,若各值的_status仅有一种值时,该数组取值与各值的_status相同,若各值的_status存在不只一种值时,则该数组取值为update;_items取值为该数组各值比对后的JSON Schema数据。其中,以数组的下标作为预设对照维度指标。具体地:
取origin与target的差集。此差集表明origin中含有这些值而target中没有,这些值应记录:_type取origin数据类型,_status值为delete,_origin取origin的值,不返回_target。
取target与origin的差集。此差集表明target中含有这些值而origin中没有,这些值应记录:_type取target数据类型,_status值为add,不返回_origin,_target取target的值。
取origin键与target的交集。此交集表明origin和target都含有这些值,需要对这些值逐一比对。遍历此交集,将origin的某值与target中相对应的值组成新的origin和target,返回步骤403进行递归比对,记录返回的JSON Schema数据。
示例性的,当origin和target的数据类型为对象和数组之外时,也即为空指针、数值、布尔值或字符串时,可以直接返回JSON Schema结构数据。其中,_type取target的数据类型。若origin和target相等,则_status值为equal,_origin取origin的值,不返回_target;若origin和target不相等,则_status值为update,_origin取origin的值,_target取target的值。
步骤406、将第一差异描述数据中对应第一节点的数据类型确定为第二描述数据中第一节点的数据类型、结果标识确定为更新、源值确定为第一描述数据中第一节点的值、以及目标值确定为第二描述数据中所述第一节点的值。
示例性的,对于第一节点,当origin和target的数据类型不同时,可直接返回JSONSchema结构数据,_type取target的数据类型,_status值为update,_origin取origin的值,_target取target的值。
步骤407、判断是否存在未比较的节点,若是,则返回执行步骤403;否则,执行步骤408。
步骤408、输出最终的第一差异描述数据。
本发明实施例提供的配置信息处理方法,将JSON格式的配置信息转换成JSONSchema结构数据,对不同深度的节点依次进行比较,在比较过程中,根据数据类型选择合适的比较方法,最终输出的第一差异描述数据能够更加准确的描述配置信息之间的实质性差异,为配置信息的分析和管理提供更加精准的依据。
在对配置信息进行管理的过程中,可能会存在一些合并的需求。例如,图5为又一种配置信息示意图,是基于基础版本修改之后的配置文件,可称为第二版本,比较图1和图5可以看出,第二版本相较于基础版本,调整了键值对a:1的位置,增加了键值对e:5,由于JSON所表示的对象中的键值对是无序的,因此,两者的实质性差异是新增了键值对e:5,但是,通过Git等现有工具得到的比对结果会包括新增键值对e:5和a:1位置调整信息,a:1位置调整的信息依然是多余的。在此基础上,当需要将第一版本和第二版本进行合并时,期望得到的结果应为包含了a:1、b:2、c:3、d:4和e:5的配置信息,各键值对的所在行可以是任意的,但Git等现有工具是基于文本进行计算的,此时可能无法按照期望合并,而是报告冲突,无法实现自动合并。
为了便于理解,下面提供一种更加具体的合并需求场景,某配置平台可以接收用户录入并生成用于记录用户的配置结果的配置信息,为了降低用户的操作难度,平台可以提供配置模板,由研发人员维护配置模板,由运营人员基于模板进行再配置。假设研发人员配置产生了template1(模板1),运营人员基于template1进行配置产生了config1(配置1),此时研发人员对模板进行迭代,产生了template2,且希望新的模板作用于config1,此时就产生了template2和config1合并的需求,现有工具无法满足上述合并需求。本发明实施例可以在上述各可选实施例基础上,进一步提供配置信息的合并方案,也即配置平台可以通过引入本发明实施例提供的方案来实现配置信息版本控制,即可将template2和config1合并,生成新的config2,从而可以解决新模板作用于旧配置的问题。
在一些实施例中,所述方法还可包括将第三配置信息转换为第三描述数据;采用所述预设比较方式对所述第一描述数据和所述第三描述数据进行比较,并根据比较结果生成第二差异描述数据,其中,所述第二差异描述数据用于描述所述第一配置信息和所述第三配置信息之间的差异;基于三路合并方法根据所述第一差异描述数据和所述第二差异描述数据生成融合描述数据;根据所述融合描述数据生成融合配置信息。这样设置的好处在于,可以提高配置信息自动合并的自动化程度,提高合并效率。
示例性的,第一配置信息相对于第三配置信息来说也可认为是源配置信息,第三配置信息可视为另一种目标配置信息,也即也可认为是在源配置信息基础上进行修改得到的配置信息,第三配置信息的获取方式可以与第二配置信息相同或不同,具体不做限定。在同样地采用预设比较方式对第一描述数据和第三描述数据进行比较后,可以得到第二差异描述数据。随后,采用三路合并方法根据第一差异描述数据和第二差异描述数据生成融合描述数据。其中,三路合并(three-way merge)方法的思想可以简单概括为,对文件A、文件B以及它们的共同祖先文件C(也即文件A和文件B是在文件C基础上进行修改得到的)做差异分析后,对于文件中的每节(sector),如果上述三个文件中有两个文件该节的内容一致,那么抛弃文件C中该节的内容,保留与文件C中不同的内容放到结果文件中,如果该节在三个文件中都不同,那么这个冲突需要手工合并。利用上述合并方法可以将三个配置信息的描述数据的部分节点或全部节点的内容进行融合,得到融合描述数据,最后转化成合并后的融合配置信息。
在一些实施例中,可以按照节点之间的父子关系逐层进行合并,对应当前待合并的节点,可以记为第二节点。对于待合并的第二节点,所述基于三路合并方法根据所述第一差异描述数据和所述第二差异描述数据生成融合描述数据,包括:若所述第一差异描述数据中对应的结果标识为修改标识,且所述第二差异描述数据中对应的结果标识为相等,则融合描述数据与第一差异描述数据相同,其中,所述修改标识包括增加、删除和更新。当第一差异描述数据中对应第二节点的结果标识为修改标识时,说明第二描述数据相比于第一描述数据发生了改动,当第二差异描述数据中对应第二节点的结果标识为相等,说明第三描述数据与第一描述数据相同,未发生改动,因此,可以以第一差异描述数据为准,也即第二节点对应的融合描述数据与第二节点对应的第一差异描述数据相同。
在一些实施例中,对于待合并的第二节点,所述基于三路合并方法根据所述第一差异描述数据和所述第二差异描述数据生成融合描述数据,可包括:若所述第一差异描述数据中对应的结果标识为相等,且所述第二差异描述数据中对应的结果标识为修改标识,则融合描述数据与第二差异描述数据相同。当第一差异描述数据中对应第二节点的结果标识为相等时,说明第二描述数据与第一描述数据相同,未发生改动,当第二差异描述数据中对应第二节点的结果标识为修改标识,说明第三描述数据相比于第一描述数据发生了改动,因此,可以以第二差异描述数据为准,也即第二节点对应的融合描述数据与第二节点对应的第二差异描述数据相同。
在一些实施例中,对于待合并的第二节点,所述基于三路合并方法根据所述第一差异描述数据和所述第二差异描述数据生成融合描述数据,可包括:若所述第一差异描述数据中和所述第二差异描述数据中对应的结果标识均为修改标识,且修改标识、数据类型、源值和目标值均一致,则融合描述数据与第一差异描述数据或第二差异描述数据相同。该情况表明,第二描述数据和第三描述数据相比于第一描述数据的改动是完全一致的,因此,可以以第一差异描述数据(或第二差异描述数据)为准,也即第二节点对应的融合描述数据与第二节点对应的第一差异描述数据或第二差异描述数据相同。
在一些实施例中,对于待合并的第二节点,所述基于三路合并方法根据所述第一差异描述数据和所述第二差异描述数据生成融合描述数据,可包括:若所述第一差异描述数据中对应的结果标识为相等,且所述第二差异描述数据中对应的结果标识为相等,则融合描述数据与第一差异描述数据或第二差异描述数据相同。这种情况下,说明第二描述数据和第三描述数据相比于第一描述数据均未发生改动,因此,可以以第一差异描述数据(或第二差异描述数据)为准,也即第二节点对应的融合描述数据与第二节点对应的第一差异描述数据或第二差异描述数据相同。
在一些实施例中,该方法还可包括:针对所述第二节点,若所述第一差异描述数据中和所述第二差异描述数据中对应的结果标识均为修改标识,且修改标识、数据类型、源值和目标值中任一项不一致,则输出冲突提示;接收用户针对所述冲突提示的输入信息,并根据所述输入信息确定所述第二节点对应的融合描述数据。这种情况下,说明三个描述数据均各不相同,为防止将不符合用户预期的描述数据自动确定为最终的融合描述数据,可以对用户进行有效提示,并根据用户的输入来确定第二节点对应的融合描述数据。
在一些实施例中,所述根据所述融合描述数据生成融合配置信息,包括:对于所述融合描述数据中的第三节点,若对应的结果标识为相等,则将所述第三节点的融合值确定为所述第三节点对应的源值;若对应的结果标识为删除,则将所述第三节点删除;若对应的结果标识为增加或更新,则将所述第三节点的融合值确定为所述第三节点对应的目标值;删除所述融合描述数据中的比较信息关键字,得到目标融合描述数据;将所述目标融合描述数据转换为融合配置信息。其中,第三节点可以是融合描述数据中的任意一个节点,融合值可以理解为目标融合描述数据中的节点对应的取值。经过上述处理,在依次确定各第三节点对应的取值之后,可以得到完整的目标融合描述数据,目标融合描述数据可以理解为预期合成的配置数据的描述数据,因此,将目标融合描述数据转换为对应的配置信息后,即可得到预期合成的融合配置信息。例如,目标融合描述数据为JSON Schema数据,可以将其转换成JSON格式的配置信息。
图6为本发明实施例提供的又一种配置信息处理方法的流程示意图,如图6所示,该方法包括:
步骤601、获取第一配置信息,第二配置信息和第三配置信息,并将第一配置信息转换为第一描述数据,将第二配置信息转换为第二描述数据,并将第三配置信息转换为第三描述数据。
示例性的,第一配置信息可视为第二配置信息和第三配置信息的共同对应的祖先版本,可记为base,第二配置信息可记为version1,第三配置信息可记为version2。
步骤602、采用预设比较方式对第一描述数据和第二描述数据进行比较,并根据比较结果生成第一差异描述数据。
示例性的,通过上述各可选实施例提供的比较方法可以得到第一差异描述数据,可记为diff1。
步骤603、采用预设比较方式对第一描述数据和第三描述数据进行比较,并根据比较结果生成第二差异描述数据。
示例性的,通过采用与不同602相同的比较方法可以得到第二差异描述数据,可记为diff2。
步骤604、确定当前待合并的第二节点。
步骤605、基于三路合并方法根据第二节点对应的第一差异描述数据和第二差异描述数据生成第二节点对应的融合描述数据。
示例性的,diff1和diff2可理解为2份标记了比对信息的JSON Schema数据,可以将diff1和diff2合并为一份同构(可理解为多层结构中各节点之间的父子关系相同)的JSON Schema数据,称为diffMerge(也即融合描述数据)。在合并时,可以遍历diff1和diff2中各节点,针对各个节点逐一进行比对,并根据三路合并算法进行合并,下表列出了逐一比对可能出现的情况,可参照下表对三路合并方式进行进一步理解。
表1、三路合并原理示意表
如上表所示,A1所在行表示version1相对于base没有任何修改,version2相对于base行没有任何修改,也即diff1和diff2均为_status:equal的情况。这种情况下,diffMerge可以标记为_status为equal,_type和_origin取diff1的值,不返回_target。
B1所在行表示version1相对于base有改动,可以包括add,delete和update三种情况,version2相对于base行没有任何修改,也即diff1的_status不为equal,diff2的_status为equal的情况。这种情况下,diffMerge的_status,_type,_origin和_target取值可以与diff1一致。
C1所在行表示version1相对于base没有任何修改,version2相对于base有改动,包括add,delete和update三种情况,也即diff1的_status为equal,diff2的_status不为equal的情况。这种情况下,diffMerge的_status,_type,_origin和_target取值可以与diff2一致。
D1所在行表示version1和version2相对于base都有改动,包括add,delete和update三种情况,也即diff1和diff2的_status,_type,_origin和_target完全一致的情况。这种情况下,diffMerge的_status,_type,_origin和_target取值可以与diff1一致。
E1所在行表示version1和version2相对于base都有改动,包括add,delete和update三种情况,也即diff1和diff2的_status,_type,_origin和_target不完全一致的情况。这种情况下,计算机设备可能无法判断应该取diff1的值还是diff2的值,可以标记冲突,_status标记为conflict,_conflict取值可以为一个长度为2的数组,分别记录diff1当前节点的值和diff2当前节点的值。
步骤606、判断是否存在未合并的第二节点,若是,则返回执行步骤604;否则,执行步骤607。
示例性的,对于_status标记为conflict的节点,可以将冲突报告给用户,如输出冲突提示,由用户手动解决。例如,用户可以针对每个标记为conflict的节点,依次根据实际需求修改为add、delete、equal或update的状态,并设置相应的_type、_origin和_target的值。
步骤607、确定融合描述数据中当前待处理的第三节点。
步骤608、根据第三节点对应的结果标识确定第三节点对应的融合值。
示例性的,对于第三节点,若diffMerge的_status为equal,value取_origin的值,若_status为delete,删除该节点,若_status为add或update,value取_target的值。
步骤609、判断是否存在未处理的第三节点,若是,则返回执行步骤607;否则,执行步骤610。
步骤610、删除融合描述数据中的比较信息关键字,得到目标融合描述数据,将目标融合描述数据转换为融合配置信息。
示例性的,删除diffMerge中的_status,_type,_origin和_targe,得到目标融合描述数据,用JSON Schema转JSON的一般方法处理目标融合描述数据,可得到融合配置信息,如记为merge。
本发明实施例提供的配置信息处理方法,可以应用于配置化平台,利用上述技术方案可以准确清晰地展示各版本配置文件之间的差异,将不同版本的配置文件轻松合并,降低了配置文件的维护难度,从而有效降低了线上因配置变更引发故障的频率。
图7为本发明实施例提供的一种配置信息处理装置的结构框图,该装置可由软件和/或硬件实现,一般可集成在计算机设备中,可通过执行配置信息处理方法来对配置信息进行处理。如图7所示,该装置包括:
描述数据转换模块701,用于将第一配置信息转换为第一描述数据,将第二配置信息转换为第二描述数据;
比较模块702,用于采用预设比较方式对所述第一描述数据和所述第二描述数据进行比较,并根据比较结果生成第一差异描述数据,其中,所述第一差异描述数据用于描述所述第一配置信息和所述第二配置信息之间的差异。
本发明实施例提供的配置信息处理装置,将第一配置信息转换为第一描述数据,将第二配置信息转换为第二描述数据,采用预设比较方式对所述第一描述数据和所述第二描述数据进行比较,并根据比较结果生成第一差异描述数据,其中,第一差异描述数据用于描述所述第一配置信息和所述第二配置信息之间的差异。通过采用上述技术方案,先将需要进行比较的两种配置信息转换成相应的描述数据,再对描述数据进行比较,可以避免直接对配置信息进行比较时得到一些非实质性的干扰差异信息,从而得到更加准确的用于描述配置信息之间的实质性差异的描述数据,为配置信息的分析和管理提供更加精准的依据。
本发明实施例提供了一种计算机设备,该计算机设备中可集成本发明实施例提供的配置信息处理装置。图8为本发明实施例提供的一种计算机设备的结构框图。计算机设备800包括存储器801、处理器802及存储在存储器801上并可在处理器802上运行的计算机程序,所述处理器802执行所述计算机程序时实现本发明实施例提供的配置信息处理方法。
本发明实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行本发明实施例提供的配置信息处理方法。
上述实施例中提供的配置信息处理装置、设备以及存储介质可执行本发明任意实施例所提供的配置信息处理方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的配置信息处理方法。
注意,上述仅为本发明的较佳实施例。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由权利要求范围决定。
- 配置信息处理方法、装置、计算机设备和存储介质
- 路由配置信息处理方法、装置、计算机设备和存储介质