本发明属于软件升级技术领域,具体涉及一种软件升级方法、设备和存储介质。
背景技术:
目前软件产品的升级方式主要分为两类:
第一类是采用新版本的完整安装包进行升级的方式。将历史版本未更新部分、历史版本更新部分和新版本新增部分一并打包为新版本的安装包,然后使用新版本的安装包全量覆盖现有版本的安装包内容进行升级。
由于升级方式使用包含全部功能的安装包进行整体升级,所以无法完成针对软件用户所使用功能的差异化升级。如果有用户需要升级新增一些特殊的功能点,需要将这部分特殊的功能点也打包到整体的安装包中进行升级。不但升级需要处理的数据量较大,升级速度变慢,而且让不需要这部分功能点的用户也进行了升级而新增了这些功能点。
第二类是通过比较软件组件(或模块)版本号增量更新版本号不同的组件(或模块)的升级方式。这种方式可以满足组件(或模块)级别的隔离更新,却无法解决组件(或模块)与组件(或模块)之间的依赖功能点独立安装的问题。由于组件(或模块)间存在依赖性,很有可能导致升级软件安装包中大部分组件(或模块)需要提高版本号来完成更新,从而降低了组件(或模块)级别更新的效果。
综合上述两种主要的升级方法可以看出,现有的软件升级方法在升级时都将影响整个组件或整个软件的现有功能而且升级需要处理的数据量较大,升级速度慢。
技术实现要素:
为了解决现有技术存在的升级需要处理的数据量较大,升级速度慢的问题,本发明提供了一种软件升级方法、设备和存储介质,其具有升级速度快、降低了升级所需的数据量和缩小了影响范围等特点。
根据本发明的具体实施方式的一种软件升级方法,包括:
将软件的模块信息以及软件运行所需的实体对象、实体对象的特征属性和软件接口分别对应使用模块信息表、模型表、模型字段表和动作表进行记录;
使用安装注册表分别记录所述模块信息表、所述模型表、所述模型字段表和所述动作表的关联标识;
基于新版本的所述安装注册表和目标待升级版本的所述安装注册表,对所述新版本和所述目标待升级版本进行差量比较;
基于差量比较结果中所述新版本比所述目标待升级版本多出的数据以及所述新版本和所述目标待升级版本都存在但存在差异的数据对所述目标待升级版本进行升级。
进一步地,基于所述新版本比所述目标待升级版本多出的数据以及所述新版本和所述目标待升级版本都存在但存在差异的数据进行升级包括:
使用新增队列记录所述新版本比所述目标待升级版本多出的数据;
使用更新队列记录所述新版本和所述目标待升级版本都存在但存在差异的数据;
基于所述新增队列中的模型和模型字段构建新的数据表;
基于所述新增队列中的动作构建新的软件接口;
基于所述更新队列中的模型更新所述新的数据表;
基于所述更新队列中的模型字段更新所述新的数据表中的数据表字段;
使用所述新的软件接口替换所述更新队列中的软件接口。
进一步地,所述软件升级方法还包括:
使用废弃队列记录所述目标待升级版本比所述新版本多出的数据,并标记为废弃数据;
限制用户使用所述废弃数据包含的模块、模型、模型字段和动作。
进一步地,在使用所述新的软件接口替换所述更新队列中的软件接口后还包括:
回收所述废弃数据包含的模块、模型、模型字段和动作所占用的系统资源。
进一步地,在对所述新版本和所述目标待升级版本进行差量比较时,省去所述新版本和所述目标待升级版本都存在但无差异的数据部分。
进一步地,所述使用更新队列记录所述新版本和所述目标待升级版本都存在但存在差异的数据的过程包括:
通过判断所述新版本和所述目标待升级版本的所述安装注册表中技术名称相同的数据的最后更新时间是否相同,确定存在差异的数据。
进一步地,所述模块信息表包括:
模块表、模块分类表以及模块依赖表用于描述软件所包含的模块和模块间的依赖关系。
进一步地,所述软件运行所需的实体对象包括:
模块、模块分类、模块依赖、模型、模型字段、动作及业务模型。
根据本发明的具体实施方式的一种软件升级设备,包括:处理器,以及与所述处理器相连接的存储器;
所述存储器用于存储计算机程序,所述计算机程序至少用于执行如上所述的软件升级方法;
所述处理器用于调用并执行所述存储器中的所述计算机程序。
根据本发明的具体实施方式的一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现如上所述的软件升级方法。
本发明的有益效果为:通过采用更小粒度的升级方式,基于新版本和现有版本的数据所包含的模块、模型、模型字段、动作使用安装注册表进行相应的关联,并通过安装注册表读取相应的数据可进行行列级别的差量比较,判断出需要升级的部分,在此过程中只需关注存在差异的部分即可,省去了现有版本和新版本都存在但是无差异的数据部分,解决了升级速度慢的问题;使用差量计算解决了平滑升级的问题从而极大地降低了升级所需的数据量和缩小了影响范围。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据一示例性实施例提供的软件升级方法的流程图;
图2是根据一示例性实施例提供的模块表的定义图;
图3是根据一示例性实施例提供的模块分类表的定义图;
图4是根据一示例性实施例提供的模块依赖表的定义图;
图5是根据一示例性实施例提供的模块表的具体应用图;
图6是根据一示例性实施例提供的模块分类表的具体应用图;
图7是根据一示例性实施例提供的模块依赖表的具体应用图;
图8是根据一示例性实施例提供的模型表的定义图;
图9是根据一示例性实施例提供的模型表的具体应用图;
图10是根据一示例性实施例提供的模型字段表的定义图;
图11是根据一示例性实施例提供的用户模型字段表;
图12是根据一示例性实施例提供的动作表的定义图;
图13是根据一示例性实施例提供的动作表的具体应用图;
图14是根据一示例性实施例提供的安装注册表的定义图;
图15是根据一示例性实施例提供的现有版本的安装注册表图;
图16是根据一示例性实施例提供的新版本的安装注册表图;
图17是根据一示例性实施例提供的原用户表;
图18是根据一示例性实施例提供的新的用户表;
图19是根据一示例性实施例提供的用户日志表;
图20是根据一示例性实施例提供的软件各部分间的关系图;
图21是根据一示例性实施例提供的升级过程中的差量描述图;
图22是根据一示例性实施例提供的根据差量比较结果进行更新软件的关系图;
图23是根据一示例性实施例提供的不同用户间的差量升级的方式图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。
参照图1所示,本发明的实施例提供了一种软件升级方法,包括以下步骤:
101、将软件的模块信息以及软件运行所需的实体对象、实体对象的特征属性和软件接口分别对应使用模块信息表、模型表、模型字段表和动作表进行记录;
102、使用安装注册表分别记录模块信息表、模型表、模型字段表和动作表的关联标识;
103、基于新版本的安装注册表和目标待升级版本的安装注册表,对新版本和目标待升级版本进行差量比较;
104、基于差量比较结果中新版本比目标待升级版本多出的数据以及新版本和目标待升级版本都存在但存在差异的数据对目标待升级版本进行升级。
具体的,针对软件的新版本和现有版本(目标待升级版本),对现有版本的软件升级包括:
201、使用模块信息表所包括的模块表、模块分类表及模块依赖表来描述新版本软件所包含的模块及模块间依赖关系。其中模块表、模块分类表及模块依赖表的定义如参照图2至图4所示。其中模块表的显示名称display_name为用户界面所展示的名称,技术名称name为软件运行所使用的模块唯一索引。例如,参照图5至图7所示某款软件包含三个模块:用户模块、会员模块和积分模块。使用模块表、模块分类表及模块依赖表对该软件的模块及模块间依赖关系进行描述,来表述跟组成部分间的关系。
202、使用模型表描述新版本软件运行所需要的实体对象,实体对象包括模块、模块分类、模块依赖、模型、模型字段、动作及业务模型。其中模型表参照图8所示,其中模型表中的技术名称name为软件运行所使用的模型唯一索引,模型实例表名cname为每一个模型在数据库中所建数据表的名称。例如,参照图9所示用户模块包含两个模型:用户模型和角色模型,分别对其功能进行描述和记录。
203、使用模型字段表描述新版本软件运行所需要的实体对象的特征属性。参照图10所示的模型字段表的定义图。其中模型字段表中的技术名称name为软件运行所使用的模型字段唯一索引,模型id为当前字段所属模型的id,模型实例表字段名cname为数据库中所建模型实例数据表的表字段名称。例如,用户模型包含五个模型字段:名称、登录账号、密码、邮箱、手机号。使用模型字段表对用户模型字段进行描述参照图11所示,其中名称包括用户标识和用户名称,用户标识和用户名称是一一对应的关系。
204、使用动作表描述新版本软件运行所需要的软件接口。参照图12所示。其中动作表中的模型idmodel_id记录了动作与模型的关联关系,入参名称列表arg_names、入参类型列表arg_types、出参类型列表return_type、动作逻辑codes共同描述了动作所对应接口定义。例如,用户模型具有一个用户登录动作。使用动作表对用户登录动作进行描述参照图13所示,其中codes一栏中记录的是用户登录动作的动作逻辑代码。
205、使用安装注册表注册软件安装的所有元数据(模块、模型、模型字段、动作)信息。参照图14所示,其中安装注册表的技术名称name为唯一索引、模型技术名称model_name是安装注册表数据与模型的关联关系、关联idrelation_id是模型对应数据表中的数据记录id,数据最后修改时间update_date是模型对应数据表中的数据记录的最近一次更新的发生时间。以上述步骤中用户模块的更新为例,安装注册表中的数据参照图15所示为原版本的安装注册表,图16所示为新版本的安装注册表。
安装时将模块信息、软件运行所需实体对象及特征属性、接口分别记录到模块表、模型表、模型字段表和动作表中,并使用安装注册表将本次安装的模块表、模型表、模型字段表、动作表的数据id记录下来,存储到安装注册表的关联idrelation_id字段。
用户在升级时,会通过安装注册表读取模块、模型、模型字段和动作表记录。因为有安装注册表,所以升级时,不会影响除模块、模型、模型字段和动作表以外的业务数据,保证其他模块的正常运行不受影响。
206、分别基于原版本的安装注册表和新版本的安装注册表,将读取到的现有模块、模型、模型字段和动作表记录数据与新版本的模块、模型、模型字段和动作数据进行行列级别的差量比较,以用户模块升级举例,新版本的安装注册表信息如图16所示,与图15所示的原版本的安装注册表相比较,其中新版本为用户模型增加“用户日志”模型,增加“性别”字段,增加“登出”动作,修改“密码”字段的长度为256个字符,删除“邮箱”字段。
在差量比较时,使用新增队列记录现有版本比新版本缺失的数据部分。如图16所示,新版本的安装注册表中第9条、第10条、第11条、第12条、第13条及第14条数据即为本次升级原版本缺失的数据部分。
在差量比较时,通过判断新版本和原版本安装注册表中技术名称相同的数据的最后更新时间是否存在差异,来找出存在差异的数据部分。使用更新队列记录现有版本和新版本都存在但是有差异的数据部分。如图15和图16所示,原版本的安装注册表中第5条数据即为本次升级存在差异的数据部分。
207、将新增队列中对应的模型与模型字段构建成新的数据表。如图17和图18所示,用户表会增加“性别”字段;如图19所示,软件会增加用户日志表,对相应的更新进行记录。
208、将新增队列中对应的动作构建成新的软件接口。
209、通过更新队列中对应的模型来更新现有的数据表。
210、通过更新队列中对应的模型字段来更新现有的数据表字段。
211、替换更新队列中对应的动作所构建的软件接口。
通过使用安装注册表解决了用户差异化升级的问题,相较于现有技术使用了更小粒度的升级方式,通过数据行列级别的差异来决定需要升级的部分,从而极大地降低了升级所需的数据量和缩小了影响范围,提高了升级的速度。
为进一步的优化该技术方案在本发明的另一具体实施例中,在差量比较时,使用废弃队列记录现有版本比新版本多出的数据部分。如图15和图16所示,原版本的安装注册表中第6条数据即为本次升级多出的数据部分;
忽略现有版本和新版本都存在但是无差异的数据部分;
将废弃队列中对应的模块、模型、模型字段、动作表记录标记为已废弃。
限制用户使用标记为已废弃的模块、模型、模型字段、动作。
通过上述使用废弃队列和省去现有版本和新版本都存在但无差异的数据部分进一步的提升了升级的速度。
并且在软件的软件接口更新完成后会执行回收已废弃的模块、模型、模型字段、动作所占用系统资源。其中模块所占用的系统资源包括cpu、数据库连接池和内存。模型、模型字段所占用的系统资源包括数据库存储、连接和内存。动作所占用系统资源包括cpu、内存。在限制了用户调用的情况下,软件占用的cpu和内存资源交由软件所运行的操作系统自动回收,数据库连接池与连接资源通过使用数据库连接组件的回收方法进行回收,进一步的减小了升级所需的数据量和占用的空间。
在本发明的一些具体实施例中,针对不同用户差异化升级的问题,在具体运用中只需将用户的软件作为目标待升级版本(原有版本)与新版本进行差量比较即可,具体的可包括以下步骤:
301、使用模块表、模块分类表及模块依赖表来描述该用户软件所包含的模块及模块依赖关系,参照图20所示;
302、使用模型描述该用户软件运行所需要的实体对象;
303、使用模型字段描述该用户软件运行所需要的实体对象的特征属性;
304、使用动作描述该用户软件运行所需要的软件接口;
305、使用安装注册表注册软件安装的所有元数据(模块、模型、模型字段、动作)信息,不同的用户使用不同的安装注册表进行记录。
306、安装时将模块信息、软件运行所需实体对象及特征属性、接口分别记录到模块表、模型表、模型字段表和动作表中。并使用安装注册表将本次安装的模块表、模型表、模型字段表、动作表的数据记录id进行记录,如图21所示。安装注册表如图15所示。
307、通过用户自有安装注册表读取模块、模型、模型字段和动作表记录。参照图23所示因为有用户独立的安装注册表,所以升级时,不会影响除模块、模型、模型字段和动作表以外的业务数据,同时用户之间也不会相互影响。
308、使用模块来描述新版本软件针对该用户软件所包含的模块;
309、使用模型描述新版本软件针对该用户软件运行所需要的实体对象;
310、使用模型字段描述新版本软件针对该用户软件运行所需要的实体对象的特征属性;
311、使用动作描述新版本软件针对该用户软件运行所需要的软件接口;
312、将读取到的现有模块、模型、模型字段和动作表记录数据与新版本的模块、模型、模型字段和动作数据进行差量比较;
313、在差量比较时,使用废弃队列记录现有版本比新版本多出的数据部分;
314、在差量比较时,使用新增队列记录现有版本比新版本缺失的数据部分;
315、在差量比较时,使用更新队列记录现有版本和新版本都存在但是有差异的数据部分;
316、在差量比较时,忽略现有版本和新版本都存在但是无差异的数据部分;
317、将废弃队列中对应的模块、模型、模型字段、动作表记录标记为已废弃;
318、限制用户使用标记为已废弃的模块、模型、模型字段、动作;
319、将新增队列中对应的模型与模型字段构建成新的数据表;
320、将新增队列中对应的动作构建成新的软件接口,参照图22所示;
321、通过更新队列中对应的模型来更新现有的数据表;
322、通过更新队列中对应的模型字段来更新现有的数据表字段;
323、替换更新队列中对应的动作所构建的软件接口;
324、软件在软件接口更新完成后执行回收已废弃的模块、模型、模型字段、动作所占用系统资源。
本发明的实施例还提供了一种软件升级设备,包括:处理器,以及与处理器相连接的存储器;
存储器用于存储计算机程序,计算机程序至少用于执行上述实施例所记载的软件升级方法;
处理器用于调用并执行存储器中的计算机程序。
本发明的实施例还提供了一种存储介质,存储介质存储有计算机程序,计算机程序被处理器执行时,实现如上述实施例所记载的软件升级方法。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。