一种SQL优化方法及设备技术领域
本申请涉及计算机领域,尤其涉及一种SQL优化方法及设备。
背景技术
随着大数据时代的到来,数据库应用越来越多,处理的数据量也越来越大,处理逻
辑也越来越复杂,通常的应用已经不再是几个简单的SQL(Structured Query Language,结
构化查询语言)语句的操作,大型应用往往包含成千上万个SQL操作,如何快速处理海量数
据已经成为业界的一个难题。
现有技术中的SQL优化技术主要聚焦在单个SQL语句的执行计划的优化,例如join
reorder(加入排序)和predicate pushdown(谓词下推)等;现有技术对单个SQL语句进行优
化都是通过对SQL语句中的多个表之间的可能出现的连接关系或聚集关系进行预先定义,
并预先计算定义好SQL语句下的各个表对应的操作结果,以待需要对有连接关系或聚集关
系的表进行相应的操作时,可以快速地得到预先定义好的操作结果,进而达到提高SQL的性
能的目的。但是预先计算无法覆盖所有SQL语句,只对单个SQL语句进行优化,且预先计算是
基于已过时的表进行的,当这些表被修改后,原来的预先定义好的操作结果就无法反应真
实状况,进而不能满足对实时的表的需求,可能出现预先计算优化好的表用不到或失效,从
而造成资源的浪费;又由于单个SQL语句没有与其他SQL语句之间的上下文衔接信息,导致
整体优化效果不佳。
因此,现有技术中通过对单个SQL语句进行预先优化,导致预先优化的SQL语句对
应的表用不到或优化失效,造成整体优化效果不佳且资源浪费。
发明内容
本申请的一个目的是提供一种SQL优化方法及设备,解决现有技术中通过对单个
SQL语句进行预先优化,导致预先优化的SQL语句对应的表用不到或优化失效的问题,同时
解决整体优化效果不佳且资源浪费的问题。
根据本申请的一个方面,提供了一种SQL优化方法,该方法包括:
对至少两条SQL语句进行分析并提取,得到SQL语句的基本信息、每一条所述SQL语
句对应的表及其表的列的对应关系;
基于所述SQL语句的基本信息、所述SQL语句对应的表及其表的列的对应关系,删
除所述SQL语句中的无用表得到初步过滤表后的SQL语句;
删除所述初步过滤表后的SQL语句中的无用列,得到优化后的SQL语句。
进一步地,上述方法中,所述对至少两条SQL语句进行分析并提取,得到SQL语句的
基本信息、每一条所述SQL语句对应的表及其表的列的对应关系,包括:
获取至少两条SQL语句;
通过词法、语法和语义分析对每一条SQL语句进行分析,得到包含有每一条SQL语
句的基本信息、SQL语句对应的表及其表的列的对应关系的中间表示信息;
对所述中间表示信息进行提取,得到每一条SQL语句的基本信息、SQL语句对应的
表及其表的列的对应关系。
进一步地,上述方法中,所述SQL语句对应的表及其表的列的对应关系包括:
所述SQL语句对应的表的基本信息;
所述表的列的基本信息。
进一步地,上述方法中,所述基于所述SQL语句的基本信息、所述SQL语句对应的表
及其表的列的对应关系,删除所述SQL语句中的无用表得到初步过滤表后的SQL语句,包括:
基于表的生命周期和所述SQL语句的基本信息、所述SQL语句对应的表及其表的列
的对应关系,将无引用关系的临时表和/或未预定义的全局表从所述SQL语句对应的所述表
中删除,得到初步过滤表后的SQL语句。
进一步地,上述方法中,所述基于所述SQL语句的基本信息、所述SQL语句对应的表
及其表的列的对应关系,删除所述SQL语句中的无用表得到初步过滤表后的SQL语句之后,
还包括:
基于数据流方程组对每一条SQL语句进行数据流分析,得到每一条SQL语句对应的
当前可用的所有表;
检测所述SQL语句对应的当前可用的所有表中的可内敛的表并将其内敛至唯一引
用点,得到进一步过滤表后的SQL语句。
进一步地,上述方法中,所述数据流方程组包括以下至少任一项:
前一个SQL语句的输出表集合对应的方程;
当前创建或修改的表集合对应的方程;
被修改前的表和当前删除的表的表集合对应的方程;
当前输出表集合对应的方程。
进一步地,上述方法中,所述检测所述SQL语句对应的当前可用的所有表中的可内
敛的表并将其内敛至唯一引用点,得到进一步过滤表后的SQL语句,包括将所述SQL语句对
应的当前可用的所有表中的只有一个引用点的表初始化在表工作列表中,重复如下步骤,
直至所述表工作列表为空后,将确定的所述标记的内敛表内敛至唯一的引用点之后,将所
述标记的内敛表删除得到进一步过滤表后的SQL语句:
每次从所述表工作列表中取出一个表并标记所述表为内敛表;
获取所述内敛表的引用点及其所述内敛表创建时对应的引用表集合;
若所述内敛表创建时对应的引用表集合中有至少一个引用表不存在所述内敛表
的引用点对应的前一个SQL语句的输入表集合中,则更新标记所述内敛表为不能被内敛的
表;
若所述内敛表创建时对应的引用表集合中的所有引用表都存在所述内敛表的引
用点对应的前一个SQL语句的输出表集合中,则确定所述标记的内敛表。
进一步地,上述方法中,所述删除所述初步过滤表后的SQL语句中的无用列,得到
优化后的SQL语句,包括:
将所述初步过滤表后或进一步过滤后的SQL语句对应的创建的表的所有未被引用
的列初始化在列工作列表中,重复如下步骤,直至所述列工作列表为空后,将标记的所述无
用列删除,得到优化后的SQL语句:
每次从所述列工作列表中取出一个列并标记所述列为无用列;
将所述无用列所引用的所有引用列的引用次数均减1之后,若所述引用列的引用
次数为零,则将所述引用次数为零时对应的引用列添加至所述列工作列表中。
根据本申请的另一方面,还提供了一种SQL优化设备,该设备包括:
分析提取装置,用于对至少两条SQL语句进行分析并提取,得到SQL语句的基本信
息、每一条所述SQL语句对应的表及其表的列的对应关系;
过滤表装置,用于基于所述SQL语句的基本信息、所述SQL语句对应的表及其表的
列的对应关系,删除所述SQL语句中的无用表得到初步过滤表后的SQL语句;
过滤列装置,用于删除所述初步过滤表后的SQL语句中的无用列,得到优化后的
SQL语句。
进一步地,上述设备中,所述分析提取装置用于:
获取至少两条SQL语句;
通过词法、语法和语义分析对每一条SQL语句进行分析,得到包含有每一条SQL语
句的基本信息、SQL语句对应的表及其表的列的对应关系的中间表示信息;
对所述中间表示信息进行提取,得到每一条SQL语句的基本信息、SQL语句对应的
表及其表的列的对应关系。
进一步地,上述设备中,所述SQL语句对应的表及其表的列的对应关系包括:
所述SQL语句对应的表的基本信息;
所述表的列的基本信息。
进一步地,上述设备中,所述过滤表装置用于:
基于表的生命周期和所述SQL语句的基本信息、所述SQL语句对应的表及其表的列
的对应关系,将无引用关系的临时表和/或未预定义的全局表从所述SQL语句对应的所述表
中删除,得到初步过滤表后的SQL语句。
进一步地,上述设备中,所述过滤表装置还用于:
基于数据流方程组对每一条SQL语句进行数据流分析,得到每一条SQL语句对应的
当前可用的所有表;
检测所述SQL语句对应的当前可用的所有表中的可内敛的表并将其内敛至唯一引
用点,得到进一步过滤表后的SQL语句。
进一步地,上述设备中,所述数据流方程组包括以下至少任一项:
前一个SQL语句的输出表集合对应的方程;
当前创建或修改的表集合对应的方程;
被修改前的表和当前删除的表的表集合对应的方程;
当前输出表集合对应的方程。
进一步地,上述设备中,所述过滤表装置用于:
将所述SQL语句对应的当前可用的所有表中的只有一个引用点的表初始化在表工
作列表中,重复如下步骤,直至所述表工作列表为空后,将确定的所述标记的内敛表内敛至
唯一的引用点之后,将所述标记的内敛表删除得到进一步过滤表后的SQL语句:
每次从所述表工作列表中取出一个表并标记所述表为内敛表;
获取所述内敛表的引用点及其所述内敛表创建时对应的引用表集合;
若所述内敛表创建时对应的引用表集合中有至少一个引用表不存在所述内敛表
的引用点对应的前一个SQL语句的输入表集合中,则更新标记所述内敛表为不能被内敛的
表;
若所述内敛表创建时对应的引用表集合中的所有引用表都存在所述内敛表的引
用点对应的前一个SQL语句的输出表集合中,则确定所述标记的内敛表。
进一步地,上述设备中,所述过滤列装置用于:
将所述初步过滤表后或进一步过滤后的SQL语句对应的创建的表的所有未被引用
的列初始化在列工作列表中,重复如下步骤,直至所述列工作列表为空后,将标记的所述无
用列删除,得到优化后的SQL语句:
每次从所述列工作列表中取出一个列并标记所述列为无用列;
将所述无用列所引用的所有引用列的引用次数均减1之后,若所述引用列的引用
次数为零,则将所述引用次数为零时对应的引用列添加至所述列工作列表中。
与现有技术相比,本申请首先获取至少两条SQL语句并对获取的该至少两条SQL语
句进行分析并提取,得到SQL语句的基本信息、每一条SQL语句对应的表及其表的列的对应
关系;然后,基于该SQL语句的基本信息、SQL语句对应的表及其表的列的对应关系,删除所
述SQL语句中的无用表,得到初步过滤表后的SQL语句;最后,删除初步过滤表后的SQL语句
中的表对应的无用列,得到优化后的SQL语句,实现了从至少两条SQL语句及SQL语句对应的
表及其表的列的对应关系的基础上,来对多条SQL语句进行预先优化,不仅达到了对每一条
SQL语句进行优化的目的,还提高了整体SQL优化效果,进而节省了现有技术中的预先计算
的资源额外开销。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它
特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种SQL优化方法的流程示意图;
图2示出根据本申请一个方面的一种SQL优化方法的整体流程示意图;
图3示出根据本申请一个方面的一种SQL优化设备的结构示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个
处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或
非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的
示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法
或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。
计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动
态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除
可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、
数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或
任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机
可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图1示出本申请一个方面的一种SQL优化方法的流程示意图,该方法应用于包含有
至少两条SQL语句的应用设备端,具体包括:步骤S11、步骤S12和步骤S13,其中,首先所述步
骤S11,对至少两条SQL语句进行分析并提取,得到SQL语句的基本信息、每一条所述SQL语句
对应的表及其表的列的对应关系;然后所述步骤S12,基于所述SQL语句的基本信息、所述
SQL语句对应的表及其表的列的对应关系,删除所述SQL语句中的无用表得到初步过滤表后
的SQL语句;最后所述步骤S13,删除所述初步过滤表后的SQL语句中的无用列,得到优化后
的SQL语句,实现了从至少两条SQL语句及SQL语句对应的表及其表的列的对应关系的基础
上,来对多条SQL语句进行预先优化,不仅达到了对每一条SQL语句进行优化的目的,还提高
了整体SQL优化效果,进而节省了现有技术中的预先计算的资源额外开销。
需要说明的是,所述SQL的基本信息可以包括SQL语句的编号、SQL语句类型、SQL语
句对应修改或者创建的表、SQL语句引用的表以及SQL语句引用的列;其中,所述SQL语句类
型包括创建类型、修改类型及查询类型等。当前,其他现有或者今后可能出现的所述SQL的
基本信息若能适用于本申请,也应包含在本申请内。
本申请一实施例中,为了对大型SQL应用进行分析、调试和维护的方便,现有技术
中往往会引入很多临时表用来保存处理的中间结果。在业务迁移过程中,因为人为因素(例
如,为了撰写代码方便,开发人员经常会从一张表中选择需要的列,但通常该表中只有部分
列是有用的,或在程序修改过程中一些不必要的中间临时表没有及时删除等)、SQL业务本
身未优化(例如为了调试而增加的临时表会导致不必要的数据写操作和/或读操作等)以及
由于缺乏全局所有SQL业务之间的全局信息而无法优化,会导致大量SQL对应的表的低效使
用。为了保证被预先优化后的表的高效使用,本申请在所述步骤S11中对至少两条SQL语句
进行分析并提取,以得到SQL语句的基本信息、每一条SQL语句对应的表及其表的列的对应
关系,进而能够从全局SQL语句的基础上对SQL语句进行全局优化。
进一步地,所述步骤S11对至少两条SQL语句进行分析并提取,得到SQL语句的基本
信息、每一条所述SQL语句对应的表及其表的列的对应关系,包括:
获取至少两条SQL语句;
通过词法、语法和语义分析对每一条SQL语句进行分析,得到包含有每一条SQL语
句的基本信息、SQL语句对应的表及其表的列的对应关系的中间表示信息;
对所述中间表示信息进行提取,得到每一条SQL语句的基本信息、SQL语句对应的
表及其表的列的对应关系。
本申请一实施例中,步骤S11首先获取反应整个SQL应用的至少两条SQL语句,接
着,通过词法、语法和语义分析对每一条SQL语句进行分析,得到方便应用程序操作的一中
间表示(Internal Representation)信息,其中,所述中间表示信息包含有SQL语句的原始
信息,例如SQL语句的基本信息、SQL语句对应的表及其表的列的对应关系等;由于所述中间
表示信息对多个SQL之间的优化并不友好,故需要进一步地对所述中间表示信息进行提取,
以得到每一条SQL语句的基本信息、SQL语句对应的表及其表的列的对应关系,用于后续对
多个SQL语句之间进行优化,实现了对至少两个SQL语句的分析和提取。
进一步地,所述SQL语句对应的表及其表的列的对应关系包括:
所述SQL语句对应的表的基本信息;
所述表的列的基本信息。
需要说明的是,所述SQL语句对应表的基本信息可以包括:表的类型(全局表或者
临时表)、表对应的所有列、表所在的数据库名、表名及表的别名、被其他SQL语句进行修改
操作以及;被其他SQL语句引用(查询操作)等。其中,所述表的类型包括预定义的全局表、未
预定义的全局表及临时表等,所述被其他SQL语句进行的修改操作包括创建(create)操作、
删除(drop)操作以及更新(update)操作等,被其他SQL语句引用包括查询操作。当然,其他
现有或者今后可能出现的所述SQL语句对应表的基本信息若能适用于本申请,也应包含在
本申请内。
需要说明的是,所述SQL语句对应的所述表的列的基本信息可以包括:属于哪个
表、在表中的索引(index)、被哪个SQL语句引用、列的别名以及列的引用信息(例如e.g.udf
(a,b,c)as id)等。当然,其他现有或者今后可能出现的所述表的列的基本信息若能适用于
本申请,也应包含在本申请内。
接着本申请的实施例,为了便于后续对SQL语句进行优化,在所述步骤S11得到所
述SQL语句的基本信息、每一条所述SQL语句对应的表及其表的列的对应关系之后,将SQL语
句对应的表抽象为结构(struct)类型的变量,同时将所述表的列抽象为结构的域
(fields),以便后续对多个SQL进行优化。当然,所述结构(struct)类型的变量仅为本申请
的实施例中的所述SQL语句对应的表的一种表现形式,所述结构的域(fields)仅为本申请
的实施例中的所述表的列的一种表现形式,其他,其他现有或者今后可能出现的所述SQL语
句对应的表的表现形式和所述表的列的表现形式若能适用于本申请,也应包含在本申请
内。
进一步地,在所述步骤S11中通过词法、语法和语义分析对获取的至少两条SQL语
句进行了分析和提取,得到所述SQL语句的基本信息、所述SQL语句对应的表及其表的列的
对应关系之后,所述步骤S12基于所述SQL语句的基本信息、所述SQL语句对应的表及其表的
列的对应关系,删除所述SQL语句中的无用表得到初步过滤表后的SQL语句,包括:
基于表的生命周期和所述SQL语句的基本信息、所述SQL语句对应的表及其表的列
的对应关系,将无引用关系的临时表和/或未预定义的全局表从所述SQL语句对应的所述表
中删除,得到初步过滤表后的SQL语句。
本申请一实施例中,所述表的生命周期始于创建表(create table)终于删除表
(drop table)。对于临时表只要能够找到create table和drop table,便可确定该临时表
的生命周期,例如,若从create table abc起,中间被多个SQL语句:SQL1、SQL2、……、Sn所
引用,直至drop table abc的整个过程,则该整个过程用于表示该临时表abc的生命周期。
在优化阶段的临时表abc的生命周期内,如果没有SQL语句用到该临时表abc,那么该临时表
abc就是死的,没必要创建,即本申请的实施例在基于在表的生命周期和所述SQL语句的基
本信息、所述SQL语句对应的表及其表的列的对应关系对SAL语句进行优化的过程中,
create table abc直至drop table abc的整个过程都没有任何一个SQL语句引用到该临时
表abc,则说明我们的这个表abc是死的,则在SQL优化的过程中将无引用关系的临时表从所
述SQL语句对应的所述表中删除得到初步过滤表后的SQL语句之后,在实际执行SQL语句的
过程中则不需要创建该临时表abc以节约创建该临时表abc的时间。
接着本申请的上述实施例,对于全局表,在分析型应用中,SQL语句是动态输入的,
故无法分析所有的SQL语句,进而不能直接判断全局表是否有用。由于通常的应用中有对外
提供接口的接口表是固定的,故可以通过预定义的方式定义活的预定义全局表,而未预定
义的全局表由于在SQL语句执行结束后,不会被其他SQL语句、其他SQL语句对应的表及其列
用到当前SQL语句执行的结果信息,则未预定义的全局表的生命周期始于创建全局表止于
分析当前的SQL语句的结尾处,即在SQL语句对应的结尾处加上drop table,以达到基于在
表的生命周期和所述SQL语句的基本信息、所述SQL语句对应的表及其表的列的对应关系,
删除所述SQL语句对应的所述表中的未预定义的全局表的目的,得到初步过滤表后的SQL语
句。
接着本申请的上述实施例,若在至少两条SQL语句的优化阶段,不仅存在无引用关
系的临时表,还存在未预定义的全局表,则会基于在表的生命周期和所述SQL语句的基本信
息、所述SQL语句对应的表及其表的列的对应关系,将无引用关系的临时表和未预定义的全
局表从所述SQL语句对应的所述表中的删除,以得到初步过滤表后的SQL语句,实现对SQL语
句之间的初步过滤表的目的。
进一步地,所述步骤S12基于所述SQL语句的基本信息、所述SQL语句对应的表及其
表的列的对应关系,删除所述SQL语句中的无用表得到初步过滤表后的SQL语句之后,还包
括:
基于数据流方程组对每一条SQL语句进行数据流分析,得到每一条SQL语句对应的
当前可用的所有表;
检测所述SQL语句对应的当前可用的所有表中的可内敛的表并将其内敛至唯一引
用点,得到进一步过滤表后的SQL语句。
需要说明的是,所述数据流方程组包括以下至少任一项:前一个SQL语句的输出表
集合对应的方程;当前创建或修改的表集合对应的方程;被修改前的表和当前删除的表的
表集合对应的方程;当前输出表集合对应的方程。例如,所述前一个SQL语句的输出表集合
对应的方程为:IN(s)={前一个SQL语句对应表的out},其中,s表示至少两条SQL语句中的
SQL语句s的编号,基于该方程IN(s)对每一条SQL语句进行分析得到前一个SQL语句的输出
表集合;所述当前创建或修改的表集合对应的方程为:GEN(s)={创建或修改的表},基于该
方程GEN(s)对每一条SQL语句进行分析得到当前所述SQL对应的当前创建或修改的表集合;
所述被修改前的表和当前删除的表的表集合对应的方程为:KILL(s)={{被修改前的表}+
{drop的表}},基于该方程KILL(s)对每一条SQL语句进行分析得到当前所述SQL对应的被修
改前的表和当前删除的表的表集合;所述当前输出表集合对应的方程为:OUT(s)=IN(s)-
KILL(s)+GEN(s),基于该方程OUT(s)对每一条SQL语句进行分析得到每一条SQL语句对应的
当前可用的所有表。
本申请一实施例中,为了对SQL语句进行优化,所述步骤S12之后还需基于构造的
数据流方程组对每一条SQL语句进行数据流分析,以得到每一条SQL语句对应的当前可用的
所有表。例如,基于构造的数据流方程组对SQL语句S1、S2以及S3进行数据流分析,其中,第
一个SQL语句S1的方程IN(s)包含所有用到的预定义的全局表,通过对每一条SQL语句基于
数据流方程组分析一遍便可计算出数据流方程组对应的集合,下面以预定义的接口表G和
对SQL语句S1、S2以及S3分别做如下操作为例进行说明。
例如,SQL语句S1:CREATE TABLE A...;
SQL语句S2:CREATE TABLE B...;
SQL语句S3:UPDATE TABLE A...;
基于数据流方程组对上述SQL语句S1、S2以及S3进行数据流分析如下:
IN(S1)={G.v0},其中,G.v0表示前一个SQL语句的输出表集合中的接口表G的当
前版本为v0;
GEN(S1)={A.v0},用于指示当前SQL语句S1创建的表为A,其版本号为v0;
KILL(S1}={},用于指示当前SQL语句S1被修改前的表和当前删除的表均为空;
OUT(S1)={G.v0,A.v0},用于指示当前SQL语句S1输出表集合包括接口表G.v0和
创建的表A.v0;
IN(S2)={G.v0,A.v0},用于指示当前SQL语句S2的输入表集合为前一个SQL语句
S1的输出表集合OUT(S1);
GEN(S2)={B.v0},用于指示当前SQL语句S2创建的表为B,其版本号为v0;
KILL(S2}={},用于指示当前SQL语句S2被修改前的表和当前删除的表均为空;
OUT(S2)={G.v0,A.v0,B.v0},用于指示当前SQL语句S2的输出表集合包括接口表
G.v0、表A.v0和创建的表B.v0;
IN(S3)={G.v0,A.v0,B.v0},用于指示当前SQL语句S3的输入表集合为前一个SQL
语句S2的输出表集合OUT(S2);
GEN(S3)={A.v1},用于指示当前SQL语句S3修改的表为A,其版本号为v1;
KILL(S3}={A.v0},用于指示当前SQL语句S3被修改前的表为A.v0;
OUT(S3)={G.v0,A.v1,B.v0},用于指示当前SQL语句S3的输出表集合包括接口表
G.v0、表A.v1和创建的表B.v0。
接着本申请的上述实施例,在得到每一条SQL语句对应的当前可用的所有表之后,
所述步骤S12接着检测所述SQL语句对应的当前可用的所有表中的可内敛的表并将其内敛
至唯一引用点,得到进一步过滤表后的SQL语句,实现了将多条SQL语句中的可以内敛的表
进行内敛,以减少创建表时增加的IO(输入输出)负载,提高处理SQL语句的并发度。
进一步地,所述步骤S12中的检测所述SQL语句对应的当前可用的所有表中的可内
敛的表并将其内敛至唯一引用点,得到进一步过滤表后的SQL语句,包括将所述SQL语句对
应的当前可用的所有表中的只有一个引用点的表初始化在表工作列表中,重复如下步骤,
直至所述表工作列表为空后,将确定的所述标记的内敛表内敛至唯一的引用点之后,将所
述标记的内敛表删除得到进一步过滤表后的SQL语句:
每次从所述表工作列表中取出一个表并标记所述表为内敛表;
获取所述内敛表的引用点及其所述内敛表创建时对应的引用表集合;
若所述内敛表创建时对应的引用表集合中有至少一个引用表不存在所述内敛表
的引用点对应的前一个SQL语句的输入表集合中,则更新标记所述内敛表为不能被内敛的
表;
若所述内敛表创建时对应的引用表集合中的所有引用表都存在所述内敛表的引
用点对应的前一个SQL语句的输出表集合中,则确定所述标记的内敛表。
本申请一实施例中,内敛前的表对应的SQL语句为以下两条SQL与:create
temporary table abc as select*from XYZ;select*from abc;内敛之后对应的SQL语句
为:select*from(select*from XYZ),实现对表abc的内敛。
例如,创建SQL语句对应的表会增加额外的IO负载,降低并发度。如果一个表只有
一个引用点,则没必要创建这个表,但该表在引用点不一定能够inline(内敛)SQL。检测只
有一个引用点的表是否可以inline(内敛)需要利用上述数据流方程组对应的集合。检测
SQL中的可以内敛的表方法如下:
初始化:找到所述SQL语句对应的当前可用的所有表中的只有一个引用点的表,并
将该所有表初始化在一个表工作列表(Tworklist)中;
对上述表工作列表(Tworklist)依次进行表的取出并检测,直至所述表工作列表
为空后,将表集合{sclist}中的任意一个表rb都存在所述内敛表tab的引用点sr对应的前
一个SQL语句的输入表集合IN(sr)中,则确定内敛表tab为标记的内敛表tab,然后将确定的
所述标记的内敛表内敛至唯一的引用点之后,将所述标记的内敛表删除得到进一步过滤表
后的SQL语句,实现对SQL语句中的可内敛的表的优化。
例如:对SQL语句S4、S5、S6和S7做如下分析:
S4:a=1;
S5:x=a+b;//将表x标记为内敛表,当前SQL语句S5对应的创建时引用的表集合
{sclist}为{av1,b},其中av1表示表a的当前版本为v1
S6:a=4;//此时a被修改,则OUT(S3)={av2,b},其中av2表示表a被修改后的当前
版本为v2
S7:y=x+1;//当前SQL语句S7的输入表集合为前一个SQL语句S6的输出表集合,即
IN(S6)=IN(y)={av2,b}
由于所述内敛表x创建时对应的引用表集合{sclist}={av1,b}中有一个引用表
av1不存在所述内敛表x的引用点y对应的前一个SQL语句的输入表集合IN(y)={av2,b}中,
则更新标记所述内敛表x为不能被内敛的表。
本申请一实施例中,由于无用列是指没有任何代码使用的列,况且无用列会增加
创建表的时间,增加磁盘IO(输入输出)和网络的负担,严重影响SQL语句的执行效率。现有
技术中只对单条SQL语句进行优化,无法优化识别出无用列,故在本申请实施例中通过对至
少两条SQL语句分析检测出这些无用列,以得到优化后的SQL语句,具体如所述步骤S13删除
初步过滤表后的所述SQL语句中的无用列,得到优化后的SQL语句,包括:
将所述初步过滤表后或进一步过滤后的SQL语句对应的创建的表的所有未被引用
的列初始化在列工作列表中,重复如下步骤,直至所述列工作列表为空后,将标记的所述无
用列删除,得到优化后的SQL语句:
每次从所述列工作列表中取出一个列并标记所述列为无用列;
将所述无用列所引用的所有引用列的引用次数均减1之后,若所述引用列的引用
次数为零,则将所述引用次数为零时对应的引用列添加至所述列工作列表中。
本申请一实施例中,所述步骤S13中查找至少两条SQL语句中的无用列是个递归的
过程,具体过程如下:
初始化:查找所述初步过滤表后或进一步过滤后的SQL语句对应的创建的表
(create table)中的所有未被引用的列初始化到列工作列表(Cworklist)中
对上述列工作列表(Cworklist)依次进行无用列的取出并检测,直至所述列工作
列表为空后,将标记的所述无用列删除,得到优化后的SQL语句,实现了对SQL语句中当前可
用的表的列的优化。
例如,列q=a+b;//将列q标记为无用列,其中无用列q所引用的所有引用列为a和b
当列x没有被任何代码使用时,则将无用列q所引用的所有引用列a和b的引用次数
均减1;
若无用列q所引用的所有引用列中的列(a和/或b)的引用次数为0,则将a和/或b添
加至列工作列表中,并重复执行从列工作列表中取出一个列进行上述操作,直至列工作列
表为空之后,将无用列删除,得到优化后的SQL语句,实现了对至少两条SQL语句的优化,进
而提高了整体SQL优化效果,同时还节省了现有技术中的预先计算和创建无用列的资源的
额外开销。
需要说明的是,本申请的实施例中不仅能够对所述至少两条SQL语句做删除无引
用的临时表和/或未预定义的临时表、将可以内敛的表内敛至唯一引用点并删除内敛表以
及删除无用列的优化,还可以实现对所述至少两条SQL语句进行的公共子查询删除(CSE)及
SQL执行并行化等优化。
在本申请一实施例中,图2示出本申请的一个方面的一种SQL优化方法的整体流程
示意图,该方法包括步骤S21、步骤S22、步骤S23、步骤S24和步骤S25,其中,
所述步骤S21,获取原始的至少两条SQL语句(SQLs);
所述步骤S22,对获取的至少两条SQL语句(SQLs)进行此法、语法和语义分析和提
取,得到每一条SQL语句的基本信息、每一条所述SQL语句对应的表及其表的列的对应关系;
所述步骤S23,基于所述SQL语句的基本信息、所述SQL语句对应的表及其表的列的
对应关系,对至少两条SQL语句(SQLs)进行跨SQL的分析,删除所述SQL语句中的无用表得到
初步过滤表后的SQL语句;
所述步骤S24,对初步过滤表或进一步过滤后的SQL语句进行跨SQL优化,删除所述
初步过滤表后的SQL语句中的无用列,得到优化后的SQL语句;
所述步骤S25,输出优化后的至少两条SQL语句(SQLs)。
图3示出本申请一个方面的一种SQL优化设备的结构示意图,该设备应用于包含有
至少两条SQL语句的应用设备端,该设备1具体包括:分析提取装置11、过滤表装置12和过滤
列装置13,其中,首先所述分析提取装置11,用于对至少两条SQL语句进行分析并提取,得到
SQL语句的基本信息、每一条所述SQL语句对应的表及其表的列的对应关系;然后所述过滤
表装置12,用于基于所述SQL语句的基本信息、所述SQL语句对应的表及其表的列的对应关
系,删除所述SQL语句中的无用表得到初步过滤表后的SQL语句;最后所述过滤列装置13,用
于删除所述初步过滤表后的SQL语句中的无用列,得到优化后的SQL语句,实现了从至少两
条SQL语句及SQL语句对应的表及其表的列的对应关系的基础上,来对多条SQL语句进行预
先优化,不仅达到了对每一条SQL语句进行优化的目的,还提高了整体SQL优化效果,进而节
省了现有技术中的预先计算的资源额外开销。
需要说明的是,所述SQL的基本信息可以包括SQL语句的编号、SQL语句类型、SQL语
句对应修改或者创建的表、SQL语句引用的表以及SQL语句引用的列;其中,所述SQL语句类
型包括创建类型、修改类型及查询类型等。当前,其他现有或者今后可能出现的所述SQL的
基本信息若能适用于本申请,也应包含在本申请内。
本申请一实施例中,为了对大型SQL应用进行分析、调试和维护的方便,现有技术
中往往会引入很多临时表用来保存处理的中间结果。在业务迁移过程中,因为人为因素(例
如,为了撰写代码方便,开发人员经常会从一张表中选择需要的列,但通常该表中只有部分
列是有用的,或在程序修改过程中一些不必要的中间临时表没有及时删除等)、SQL业务本
身未优化(例如为了调试而增加的临时表会导致不必要的数据写操作和/或读操作等)以及
由于缺乏全局所有SQL业务之间的全局信息而无法优化,会导致大量SQL对应的表的低效使
用。为了保证被预先优化后的表的高效使用,本申请在所述分析提取装置11中对至少两条
SQL语句进行分析并提取,以得到SQL语句的基本信息、每一条SQL语句对应的表及其表的列
的对应关系,进而能够从全局SQL语句的基础上对SQL语句进行全局优化。
进一步地,所述分析提取装置11用于:
获取至少两条SQL语句;
通过词法、语法和语义分析对每一条SQL语句进行分析,得到包含有每一条SQL语
句的基本信息、SQL语句对应的表及其表的列的对应关系的中间表示信息;
对所述中间表示信息进行提取,得到每一条SQL语句的基本信息、SQL语句对应的
表及其表的列的对应关系。
本申请一实施例中,分析提取装置11首先获取反应整个SQL应用的至少两条SQL语
句,接着,通过词法、语法和语义分析对每一条SQL语句进行分析,得到方便应用程序操作的
一中间表示(Internal Representation)信息,其中,所述中间表示信息包含有SQL语句的
原始信息,例如SQL语句的基本信息、SQL语句对应的表及其表的列的对应关系等;由于所述
中间表示信息对多个SQL之间的优化并不友好,故需要进一步地对所述中间表示信息进行
提取,以得到每一条SQL语句的基本信息、SQL语句对应的表及其表的列的对应关系,用于后
续对多个SQL语句之间进行优化,实现了对至少两个SQL语句的分析和提取。
进一步地,所述SQL语句对应的表及其表的列的对应关系包括:
所述SQL语句对应的表的基本信息;
所述表的列的基本信息。
需要说明的是,所述SQL语句对应表的基本信息可以包括:表的类型(全局表或者
临时表)、表对应的所有列、表所在的数据库名、表名及表的别名、被其他SQL语句进行修改
操作以及;被其他SQL语句引用(查询操作)等。其中,所述表的类型包括预定义的全局表、未
预定义的全局表及临时表等,所述被其他SQL语句进行的修改操作包括创建(create)操作、
删除(drop)操作以及更新(update)操作等,被其他SQL语句引用包括查询操作。当然,其他
现有或者今后可能出现的所述SQL语句对应表的基本信息若能适用于本申请,也应包含在
本申请内。
需要说明的是,所述SQL语句对应的所述表的列的基本信息可以包括:属于哪个
表、在表中的索引(index)、被哪个SQL语句引用、列的别名以及列的引用信息(例如e.g.udf
(a,b,c)as id)等。当然,其他现有或者今后可能出现的所述表的列的基本信息若能适用于
本申请,也应包含在本申请内。
接着本申请的实施例,为了便于后续对SQL语句进行优化,在所述分析提取装置11
得到所述SQL语句的基本信息、每一条所述SQL语句对应的表及其表的列的对应关系之后,
将SQL语句对应的表抽象为结构(struct)类型的变量,同时将所述表的列抽象为结构的域
(fields),以便后续对多个SQL进行优化。当然,所述结构(struct)类型的变量仅为本申请
的实施例中的所述SQL语句对应的表的一种表现形式,所述结构的域(fields)仅为本申请
的实施例中的所述表的列的一种表现形式,其他,其他现有或者今后可能出现的所述SQL语
句对应的表的表现形式和所述表的列的表现形式若能适用于本申请,也应包含在本申请
内。
进一步地,所述分析提取装置11用于通过词法、语法和语义分析对获取的至少两
条SQL语句进行了分析和提取,得到所述SQL语句的基本信息、所述SQL语句对应的表及其表
的列的对应关系之后,所述过滤表装置12用于:
基于表的生命周期和所述SQL语句的基本信息、所述SQL语句对应的表及其表的列
的对应关系,将无引用关系的临时表和/或未预定义的全局表从所述SQL语句对应的所述表
中删除,得到初步过滤表后的SQL语句。
本申请一实施例中,所述表的生命周期始于创建表(create table)终于删除表
(drop table)。对于临时表只要能够找到create table和drop table,便可确定该临时表
的生命周期,例如,若从create table abc起,中间被多个SQL语句:SQL1、SQL2、……、Sn所
引用,直至drop table abc的整个过程,则该整个过程用于表示该临时表abc的生命周期。
在优化阶段的临时表abc的生命周期内,如果没有SQL语句用到该临时表abc,那么该临时表
abc就是死的,没必要创建,即本申请的实施例在基于在表的生命周期和所述SQL语句的基
本信息、所述SQL语句对应的表及其表的列的对应关系对SAL语句进行优化的过程中,
create table abc直至drop table abc的整个过程都没有任何一个SQL语句引用到该临时
表abc,则说明我们的这个表abc是死的,则在SQL优化的过程中将无引用关系的临时表从所
述SQL语句对应的所述表中删除得到初步过滤表后的SQL语句之后,在实际执行SQL语句的
过程中则不需要创建该临时表abc以节约创建该临时表abc的时间。
接着本申请的上述实施例,对于全局表,在分析型应用中,SQL语句是动态输入的,
故无法分析所有的SQL语句,进而不能直接判断全局表是否有用。由于通常的应用中有对外
提供接口的接口表是固定的,故可以通过预定义的方式定义活的预定义全局表,而未预定
义的全局表由于在SQL语句执行结束后,不会被其他SQL语句、其他SQL语句对应的表及其列
用到当前SQL语句执行的结果信息,则未预定义的全局表的生命周期始于创建全局表止于
分析当前的SQL语句的结尾处,即在SQL语句对应的结尾处加上drop table,以达到基于在
表的生命周期和所述SQL语句的基本信息、所述SQL语句对应的表及其表的列的对应关系,
删除所述SQL语句对应的所述表中的未预定义的全局表的目的,得到初步过滤表后的SQL语
句。
接着本申请的上述实施例,若在至少两条SQL语句的优化阶段,不仅存在无引用关
系的临时表,还存在未预定义的全局表,则会基于在表的生命周期和所述SQL语句的基本信
息、所述SQL语句对应的表及其表的列的对应关系,将无引用关系的临时表和未预定义的全
局表从所述SQL语句对应的所述表中的删除,以得到初步过滤表后的SQL语句,实现对SQL语
句之间的初步过滤表的目的。
进一步地,所述过滤表装置12还用于:
基于数据流方程组对每一条SQL语句进行数据流分析,得到每一条SQL语句对应的
当前可用的所有表;
检测所述SQL语句对应的当前可用的所有表中的可内敛的表并将其内敛至唯一引
用点,得到进一步过滤表后的SQL语句。
需要说明的是,所述数据流方程组包括以下至少任一项:前一个SQL语句的输出表
集合对应的方程;当前创建或修改的表集合对应的方程;被修改前的表和当前删除的表的
表集合对应的方程;当前输出表集合对应的方程。例如,所述前一个SQL语句的输出表集合
对应的方程为:IN(s)={前一个SQL语句对应表的out},其中,s表示至少两条SQL语句中的
SQL语句s的编号,基于该方程IN(s)对每一条SQL语句进行分析得到前一个SQL语句的输出
表集合;所述当前创建或修改的表集合对应的方程为:GEN(s)={创建或修改的表},基于该
方程GEN(s)对每一条SQL语句进行分析得到当前所述SQL对应的当前创建或修改的表集合;
所述被修改前的表和当前删除的表的表集合对应的方程为:KILL(s)={{被修改前的表}+
{drop的表}},基于该方程KILL(s)对每一条SQL语句进行分析得到当前所述SQL对应的被修
改前的表和当前删除的表的表集合;所述当前输出表集合对应的方程为:OUT(s)=IN(s)-
KILL(s)+GEN(s),基于该方程OUT(s)对每一条SQL语句进行分析得到每一条SQL语句对应的
当前可用的所有表。
本申请一实施例中,为了对SQL语句进行优化,所述过滤表装置12之后还需基于构
造的数据流方程组对每一条SQL语句进行数据流分析,以得到每一条SQL语句对应的当前可
用的所有表。例如,基于构造的数据流方程组对SQL语句S1、S2以及S3进行数据流分析,其
中,第一个SQL语句S1的方程IN(s)包含所有用到的预定义的全局表,通过对每一条SQL语句
基于数据流方程组分析一遍便可计算出数据流方程组对应的集合,下面以预定义的接口表
G和对SQL语句S1、S2以及S3分别做如下操作为例进行说明。
例如,SQL语句S1:CREATE TABLE A...;
SQL语句S2:CREATE TABLE B...;
SQL语句S3:UPDATE TABLE A...;
基于数据流方程组对上述SQL语句S1、S2以及S3进行数据流分析如下:
IN(S1)={G.v0},其中,G.v0表示前一个SQL语句的输出表集合中的接口表G的当
前版本为v0;
GEN(S1)={A.v0},用于指示当前SQL语句S1创建的表为A,其版本号为v0;
KILL(S1}={},用于指示当前SQL语句S1被修改前的表和当前删除的表均为空;
OUT(S1)={G.v0,A.v0},用于指示当前SQL语句S1输出表集合包括接口表G.v0和
创建的表A.v0;
IN(S2)={G.v0,A.v0},用于指示当前SQL语句S2的输入表集合为前一个SQL语句
S1的输出表集合OUT(S1);
GEN(S2)={B.v0},用于指示当前SQL语句S2创建的表为B,其版本号为v0;
KILL(S2}={},用于指示当前SQL语句S2被修改前的表和当前删除的表均为空;
OUT(S2)={G.v0,A.v0,B.v0},用于指示当前SQL语句S2的输出表集合包括接口表
G.v0、表A.v0和创建的表B.v0;
IN(S3)={G.v0,A.v0,B.v0},用于指示当前SQL语句S3的输入表集合为前一个SQL
语句S2的输出表集合OUT(S2);
GEN(S3)={A.v1},用于指示当前SQL语句S3修改的表为A,其版本号为v1;
KILL(S3}={A.v0},用于指示当前SQL语句S3被修改前的表为A.v0;
OUT(S3)={G.v0,A.v1,B.v0},用于指示当前SQL语句S3的输出表集合包括接口表
G.v0、表A.v1和创建的表B.v0。
接着本申请的上述实施例,在得到每一条SQL语句对应的当前可用的所有表之后,
所述过滤表装置12接着检测所述SQL语句对应的当前可用的所有表中的可内敛的表并将其
内敛至唯一引用点,得到进一步过滤表后的SQL语句,实现了将多条SQL语句中的可以内敛
的表进行内敛,以减少创建表时增加的IO(输入输出)负载,提高处理SQL语句的并发度。
进一步地,所述过滤表装置12用于:将所述SQL语句对应的当前可用的所有表中的
只有一个引用点的表初始化在表工作列表中,重复如下步骤,直至所述表工作列表为空后,
将确定的所述标记的内敛表内敛至唯一的引用点之后,将所述标记的内敛表删除得到进一
步过滤表后的SQL语句:
每次从所述表工作列表中取出一个表并标记所述表为内敛表;
获取所述内敛表的引用点及其所述内敛表创建时对应的引用表集合;
若所述内敛表创建时对应的引用表集合中有至少一个引用表不存在所述内敛表
的引用点对应的前一个SQL语句的输入表集合中,则更新标记所述内敛表为不能被内敛的
表;
若所述内敛表创建时对应的引用表集合中的所有引用表都存在所述内敛表的引
用点对应的前一个SQL语句的输出表集合中,则确定所述标记的内敛表。
本申请一实施例中,内敛前的表对应的SQL语句为以下两条SQL与:create
temporary table abc as select*from XYZ;select*from abc;内敛之后对应的SQL语句
为:select*from(select*from XYZ),实现对表abc的内敛。
例如,创建SQL语句对应的表会增加额外的IO负载,降低并发度。如果一个表只有
一个引用点,则没必要创建这个表,但该表在引用点不一定能够inline(内敛)SQL。检测只
有一个引用点的表是否可以inline(内敛)需要利用上述数据流方程组对应的集合。检测
SQL中的可以内敛的表方法如下:
初始化:找到所述SQL语句对应的当前可用的所有表中的只有一个引用点的表,并
将该所有表初始化在一个表工作列表(Tworklist)中;
对上述表工作列表(Tworklist)依次进行表的取出并检测,直至所述表工作列表
为空后,将表集合{sclist}中的任意一个表rb都存在所述内敛表tab的引用点sr对应的前
一个SQL语句的输入表集合IN(sr)中,则确定内敛表tab为标记的内敛表tab,然后将确定的
所述标记的内敛表内敛至唯一的引用点之后,将所述标记的内敛表删除得到进一步过滤表
后的SQL语句,实现对SQL语句中的可内敛的表的优化。
例如:对SQL语句S4、S5、S6和S7做如下分析:
S4:a=1;
S5:x=a+b;//将表x标记为内敛表,当前SQL语句S5对应的创建时引用的表集合
{sclist}为{av1,b},其中av1表示表a的当前版本为v1
S6:a=4;//此时a被修改,则OUT(S3)={av2,b},其中av2表示表a被修改后的当前
版本为v2
S7:y=x+1;//当前SQL语句S7的输入表集合为前一个SQL语句S6的输出表集合,即
IN(S6)=IN(y)={av2,b}
由于所述内敛表x创建时对应的引用表集合{sclist}={av1,b}中有一个引用表
av1不存在所述内敛表x的引用点y对应的前一个SQL语句的输入表集合IN(y)={av2,b}中,
则更新标记所述内敛表x为不能被内敛的表。
本申请一实施例中,由于无用列是指没有任何代码使用的列,况且无用列会增加
创建表的时间,增加磁盘IO(输入输出)和网络的负担,严重影响SQL语句的执行效率。现有
技术中只对单条SQL语句进行优化,无法优化识别出无用列,故在本申请实施例中通过对至
少两条SQL语句分析检测出这些无用列,以得到优化后的SQL语句,具体所述过滤列装置13
用于:
将所述初步过滤表后或进一步过滤后的SQL语句对应的创建的表的所有未被引用
的列初始化在列工作列表中,重复如下步骤,直至所述列工作列表为空后,将标记的所述无
用列删除,得到优化后的SQL语句:
每次从所述列工作列表中取出一个列并标记所述列为无用列;
将所述无用列所引用的所有引用列的引用次数均减1之后,若所述引用列的引用
次数为零,则将所述引用次数为零时对应的引用列添加至所述列工作列表中。
本申请一实施例中,所述过滤列装置13中查找至少两条SQL语句中的无用列是个
递归的过程,具体过程如下:
初始化:查找所述初步过滤表后或进一步过滤后的SQL语句对应的创建的表
(create table)中的所有未被引用的列初始化到列工作列表(Cworklist)中
对上述列工作列表(Cworklist)依次进行无用列的取出并检测,直至所述列工作
列表为空后,将标记的所述无用列删除,得到优化后的SQL语句,实现了对SQL语句中当前可
用的表的列的优化。
例如,列q=a+b;//将列q标记为无用列,其中无用列q所引用的所有引用列为a和b
当列x没有被任何代码使用时,则将无用列q所引用的所有引用列a和b的引用次数
均减1;
若无用列q所引用的所有引用列中的列(a和/或b)的引用次数为0,则将a和/或b添
加至列工作列表中,并重复执行从列工作列表中取出一个列进行上述操作,直至列工作列
表为空之后,将无用列删除,得到优化后的SQL语句,实现了对至少两条SQL语句的优化,进
而提高了整体SQL优化效果,同时还节省了现有技术中的预先计算和创建无用列的资源的
额外开销。
需要说明的是,本申请的实施例中不仅能够对所述至少两条SQL语句做删除无引
用的临时表和/或未预定义的临时表、将可以内敛的表内敛至唯一引用点并删除内敛表以
及删除无用列的优化,还可以实现对所述至少两条SQL语句进行的公共子查询删除(CSE)及
SQL执行并行化等优化。
综上所述,本申请通过首先获取至少两条SQL语句并对获取的该至少两条SQL语句
进行分析并提取,得到SQL语句的基本信息、每一条SQL语句对应的表及其表的列的对应关
系;然后,基于该SQL语句的基本信息、SQL语句对应的表及其表的列的对应关系,删除所述
SQL语句中的无用表,得到初步过滤表后的SQL语句;最后,删除初步过滤表后的SQL语句中
的表对应的无用列,得到优化后的SQL语句,实现了从至少两条SQL语句及SQL语句对应的表
及其表的列的对应关系的基础上,来对多条SQL语句进行预先优化,不仅达到了对每一条
SQL语句进行优化的目的,还提高了整体SQL优化效果,进而节省了现有技术中的预先计算
的资源额外开销。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精
神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围
之内,则本申请也意图包含这些改动和变型在内。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采
用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例
中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的
软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,
磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例
如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被
计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。
而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过
广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的
计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用
于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指
令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技
术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在
不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论
从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权
利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有
变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此
外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个
单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表
示名称,而并不表示任何特定的顺序。