一种SQL语句转换的方法及装置
技术领域
本申请涉及信息技术领域,尤其涉及一种SQL语句转换的方法及装置。
背景技术
关系型数据库,是指将复杂的数据结构归结为简单的二元关系(如,二维表格形式),并进行存储的数据库。结构化查询语言(Structured Query Language,SQL),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。其中,美国国家标准协会对SQL进行规范后,以此作为关系型数据库管理系统的标准语言(ANSIX3.135-1986),并成为了国际标准。
目前,随着各种商业数据库系统的出现,不同的数据库管理系统中使用的SQL,均在不同程度上对SQL规范作了某些编改和扩充,形成了多种存在差异的SQL,通常对于这种基于SQL规范作了某些编改和扩充的结构化查询语言,也称作SQL方言。例如,oracle、mysql、spark sql等数据库管理系统中使用的SQL就不完全相同,同时对于标准的SQL的支持程度也不相同。
这就使得不同数据库管理系统之间的SQL语句并不通用,于是当需要从多个数据源获取数据时,需要针对每类数据库管理系统,将SQL语句翻译成适用该数据库管理系统的SQL方言。
具体的,通常需要先确定标准的SQL以及需要转换的SQL方言的类型,之后将该标准的SQL文本转换为对应的抽象语法树(Abstract Syntax Tree,AST),如图1所示,然后从AST的根节点开始依次遍历AST的各节点,并针对每个节点,判断该节点是否需要翻译,若是则根据标准的SQL语句与SQL方言的区别,进行改写,若否则继续判断下一个节点是否需要翻译。图1中,select、from、where可为标准的SQL中的词,Fields表示SQL语句中的字段(可包含不同的函数function和名称name),Tables表示SQL语句包含的表(可包含表的名称TableName以及SQL中与表相关的文本),Condition可表示该标准的SQL使用规则(如,可包括ExpA和ExpB两种)等等,图1仅为示意图。
其中,由于SQL方言在多个方面都可能存在与标准SQL的区别,因此在判断是否需要对节点进行翻译时,需要判断多种因素也较多。例如,字段类型方言(考虑精确度、位数等)、函数方言、数据库sequence方言、limit方言等等。
并且,当出现数据库管理系统支持的功能不同时(例如,oracle支持分页显示的SQL方言,但是odps中则需要通过在SQL中定义窗口函数来实现分页显示),还可能需要对AST的树结构进行变动。
可见,现有对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语句的转换方式,减少了复杂的遍历AST树的过程,使得SQL语句在向SQL方言转换时的效率提高。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为标准的SQL文本转换为对应的抽象语法树的示意图;
图2为本说明书提供的一种SQL语句转换的过程;
图3为本说明书提供的生成第一关系计算模型的示意图;
图4为本说明书提供的根据第一关系计算模型生成第二关系计算模型的示意图;
图5为本说明书实施例提供的一种SQL语句转换的装置的结构示意图;
图6为本说明书实施例提供的一种服务器的结构示意图。
具体实施方式
为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图2为说明书实施例提供的一种SQL语句转换的过程,具体可包括以下步骤:
S100:确定待转换的SQL语句,以及确定需转换至的SQL方言格式。
在本说明书一个或多个实施例中,由于通常对于提供数据服务的服务提供方来说,存在从多个数据源获取数据的需要,于是,以数据查询平台进行SQL语句转换的过程为例进行后续说明。其中,该数据查询平台可以是通过单个服务器提供服务的,或者也可以是通过多个服务器组成提供服务的(如,分布式服务器)。为了方便描述,后续以服务器为执行主体进行说明。
并且,由于不同的数据源所采用的数据库管理系统可能不完全一致,因此,通常该数据查询平台的服务器需要针对每个数据源,通过适用的SQL语句从该数据源的数据库中获取数据的需求。
具体的,该服务器可接收针对数据的查询请求(例如,查询某个人从1月至4月在各个银行的流水记录),之后该服务器可根据预设的SQL语句生成规则,根据该查询请求,生成待转换的SQL语句。该SQL语句可作为基准的语句,用于根据该SQL语句转换为其他格式的SQL方言。
其中,具体根据该查询请求生成何种格式的SQL语句,本说明书不做限定,可根据需要进行设置。也就是说,该生成的SQL语句具体可由那种数据库管理系统执行,本说明书不做限定。例如,服务器可根据该查询请求生成mysql格式的SQL语句,或者也可以根据ANSIX3.135-1986标准生成标准格式的SQL语句,等等。
另外,由于该服务器需要根据该SQL语句,从多个数据源中获取数据,而不同的数据源采用的数据库管理系统可能不完全一致,因此服务器还可根据该查询请求,确定需要从哪些类型的数据库中获取数据,并根据数据库的类型,确定该SQL语句需要转换至的SQL方言格式。
S102:根据所述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语句确定出算子的特征,即,在根据算子执行计算时采用的参数。例如,假设“and”可作为一种求和算子类型,则“and(1,2)”这个算子中的数字“1”以及“2”便是算子的特征,对应的数学公式可为“1+2”。其中,算子的特征也包含在SQL语句中。例如,基于标识(即,id)进行选择时,假设可确定SQL语句中的“select id”部分对应的算子类型为“project()”,特征为“id”,进而确定算子为“project(id)”。在本说明书中,服务器在根据关键词与算子的映射关系确定算子时,确定的是算子的类型以及算子的特征。
例如,假设SQL语句为“slecet id from t1 limit 10,90”,则首先服务器可通过语法分析确定该SQL语句的关键词分别为:“slecet”“from”“limit”。之后服务器可根据于是的映射关系,如表1所示,确定各关键词分别对应的算子类型。
关键词 |
算子类型 |
Select |
Project() |
From |
Scan() |
Limit |
Sort(fetch offset) |
…… |
…… |
表1
通过表1所示的映射关系,服务器可确定该SQL语句对应的各算子类型。并且,服务器可通过词法分析,确定各算子的特征。进而确定算子具体为Project(id)、Scan(t1)和Sort(fetch 10offset 90)。
之后,服务器可根据计算过程中各计算步骤的顺序,确定各算子的顺序,并将按顺序计算的各算子作为第一关系计算模型,如图3所示。图3为本说明书提供的,服务器根据SQL语句确定第一关系计算模型的示意图,其中左侧为SQL语句,右侧为与该SQL语句对应的第一关系计算模型。其中,以树结构看待该第一关系计算模型时,算子“Sort(fetch10offset 90)”作为树结构的根节点,算子“Project(id)”作为树结构的叶子节点,计算过程为从叶子节点逐步至根节点,如图3中各算子的间的箭头指向。
因此SQL语句可视为对应一系列的计算过程。于是,在本说明书中,该服务器可确定该SQL语句对应的第一关系计算模型,该第一关系计算模型由若干算子组成。也就是说,该服务器可先将该SQL语句解析为若干计算过程,并根据各计算过程对应的算子,确定第一关系计算模型。
需要说明的是,在本说明书中的算子,包括广义上的算子,即,对任何函数进行某一项操作都可以认为是一个算子。在关系型数据库场景中,关系计算模型对应的计算操作都可视为对应于一个算子。
S104:根据所述SQL方言格式对应的转换规则,对所述第一关系计算模型中的各算子进行转换。
由于该第一关系计算模型中的各算子,仅能保证在该SQL语句对应的数据库管理系统中可执行,但是在SQL方言对应的数据库管理系统中并不一定存在对应第一关系计算模型中的各算子的计算规则,或者相同的计算步骤对应的算子不完全相同。例如,在mysql数据库管理系统中,支持通过fetch/offset等句子执行分页显示,但是在spark sql数据库管理系统中,则不存在相应的分页显示语句。则spark sql数据库管理系统无法根据在mysql中实现分页显示的算子,执行相应的计算过程。
因此,在本说明书中,服务器在确定出第一关系计算模型之后,还可根据预设的转换规则,将第一关系计算模型转换为可在SQL方言对应的数据库管理系统中运行的第二关系计算模型。其中,由于无论是SQL语句还是需转化至的SQL方言,都可视为是一系列的计算过程,因此只要计算是等价的,SQL语句与SQL方言的效果便是相同的。
具体的,服务器可按照第一关系计算模型中各计算步骤的倒叙,依次针对第一关系计算模型中的每个算子,根据该算子、该算子在第一关系计算模型中的父算子以及转换规则,生成在第二关系计算模型中与该算子等价的算子。并根据生成的各算子,确定该第二关系计算模型。
其中,首先,服务器可确定SQL方言对应的转换规则,该转换规则可以预先确定。例如,可根据SQL方言与SQL语句的区别,确定SQL语句中包含的各算子对应的在SQL方言中的算子,或者,也可根据SQL方言的语句规则(如,SQL方言支持的算子,算子的格式等等),确定SQL语句中各算子等价的SQL方言的算子。当然,不同的SQL方言之间也存在差异,因此不同的SQL方言对应不完全相同的转换规则,服务器可确定与步骤S100确定出的SQL方言对应的转换规则。本说明书不做限定,具体确定转换规则的方法,以及转换规则的具体内容,可根据需要进行设置。
其次,算子具体对应的计算过程与该算子类型以及算子的特征相关,当算子的特征不同时,同类型的算子执行的计算过程也可不同。因此,在本说明书中,当针对每个算子,生成在第二关系计算模型中与该算子等价的算子时,服务器具体可以是根据该算子的类型、该算子的特征,以及父算子的类型、父算子的特征,通过该SQL方言对应的转换规则,确定新算子。
最后,根据得到的各新算子,按照第一关系计算模型的计算顺序,生成第二关系计算模型。
继续沿用上例,以图3所示的第一关系计算模型为例,服务器可从根节点开始,逐一转换第一关系计算模型中的算子。如假设SQL语句为mysql的语句,需转换至的SQL方言为spark sql,则根节点的算子“Sort(fetch 10offset 90)”是执行分页显示的排行算子,但是spark sql中没有等价的算子,因此根据转换规则,可生成“Fiter(row id>90and row id<=100)”其中,将算子类型由Sort转换为Fiter,并将算子特征中添加row id特征。然后继续对下一个节点对应的算子“Project(id)”,可根据父算子Sort(fetch 10offset 90)的类型以及特征,以及该节点自身的类型以及特征,生成算子“Project(id,row number())”,其中,由于前述的父算子的特征在spark sql中没有相应的替代,因此添加了row id这一特征,因此其Project类型的子算子中可见加入相应的特征row number。继续,对于叶子节点的算子Scan(t1),服务器可确定该算子的在mysql与spark sql中功能一致,因此可生成相同的算子。最后,服务器可根据生成的各算子,确定第二关系计算模型,如图4所示。
图4为本说明书提供的根据第一关系计算模型生成第二关系计算模型的示意图。
另外,在本说明书中,在转换得到新算子时,服务器可以先根据转换规则,判断该算子的类型、该算子的特征、父算子的类型、父算子的特征是否符合转换规则进行转换的条件,若是,则根据转换规则进行生成新算子,若否,则可不进行转换,该算子作为转换得到的新算子。如上例中fetch/offset特征符合转换的条件(即,spark sql中不支持),则根据转换条件如,当出现fetch/offset特征时,替换为row id特征,算子类型转换为Fiter,等等。而Scan(t1)无论是其父算子还是该算子本身,都不符合进行转换的条件,则服务器可将Scan(t1)直接作为新算子。
S106:根据转换后的算子,生成SQL方言。
在本说明书中,在确定出第二关系计算模型之后,由于该关系计算模型就是该SQL方言等价的计算过程,因此与步骤S102过程类似,采用预先编译好的编写类工具,根据该第二关系计算模型,生成与该SQL语句等价的SQL方言。
具体的,服务器可根据所述第二关系计算模型中各算子,以及预先配置的该SQL方言的各关键词与算子的映射关系,生成SQL方言,作为与SQL语句等价的SQL方言。当然,对于具体的编译方法和采用的工具本说明书不做限定,可根据需要进行设置。
继续沿用上里,以图4所示的第二关系计算模型为例,该服务器可通过编译工具,根据该第二关系计算模型生成SQL方言为:“select k.*(select row_number()over(partition by 1order by id)as rowid,id from t1)k where rowed>90and rowid<=100;”。
基于图2所述的SQL语句转换过程,基于SQL语句的本质是对应一系列的计算过程这一前提,通过对SQL语句进行语法分析,生成对应该计算过程的第一关系计算模型,之后再通过预设的转换规则,将第一关系计算模型中的各算子转换,得到对应SQL方言的第二关系计算模型,最终通过第二关系计算模型,生成SQL方言。避免了现有技术需要遍历AST树的繁琐过程,而是基于计算过程进行不同算子之间的转换,使得SQL语句转换效率提高。
需要说明的是,由于SQL语句(以及SQL方言)本质上对应于一系列的计算过程,而确定该计算过程所需的参数都包含在SQL语句中,因此确定SQL语句对应的关系计算模型,或者通过关系计算模型还原SQL语句,都可通过编译语句的工具完成,不存在技术上的障碍。
另外,通常当针对多个存在差异数据源(如,数据库管理系统不相同的数据库)进行查询时,接收查询请求的服务器需要对SQL语句进行转换,以使发送给各数据源的SQL语句使用与相应的数据源。于是,在本说明书一个或多个实施例中,服务器在执行步骤S100时,可接收包含待转换的SQL语句的查询请求,先根据该查询请求,确定若干数据源(如,需要从中获取数据的若干数据库),之后针对每个确定出的数据源,确定该数据源支持的SQL格式,作为需要转换至的SQL方言。
当然,在本说明书一个或多个实施例中,该查询请求中也可仅包含用于确定该SQL语句的查询参数,则当该服务器接收到该查询请求后,可先根据该查询参数,生成SQL语句,之后再根据该查询请求,确定数据源,最后根据数据支持的SQL格式,确定需转换至的SQL方言。
进一步地,在本说明书一个或多个实施例中,在步骤S104中,服务器在依次针对每个算子进行判断时,可根据该算子的类型、该算子的特征、该算子的父算子的类型、该算子的父算子的特征中的至少一种,基于转换规则判断该算子是否需要进行转换,若是,则转换生成新算子,否则将该算子作为新算子(如,不进行转换)。如,图4例中的算子Project(id),服务器可根据其父算子Sort(fetch 10offset 90)的特征fetch/offset,确定该算子需要转换。进而再根据转换规则,进行转换。可见在本说明书中,该转换规则一方面可作为是否需要进行转换的判断规则,另一方面也可作为具体如何对算子进行调整或者替换的规则。
当然,本说明书中也可将该转换规则拆分为判断条件,以及调整替换规则的形式,对各算子,先根据判断条件进行判断,当确定需要转换时,则根据调整替换规则进行调整或者替换,本说明书对此不做限定。
需要说明的是,通常SQL语句对应的计算过程,除了可以通过算子表示以外,对于某些常用的但是没有对应算子来表示的计算,通常还习惯采用人工设置函数的形式来表示。但是,由于基于函数执行的计算过程可以视为若干计算,因此在本说明书中将该函数也视为一种算子,因此在本说明书中对于通常所称的算子以及函数,统一以算子称呼。也就是说,上述图2所示的过程中的算子,也可是某些函数。
更进一步地,在本说明书中,当步骤S104中,服务器在针对任一算子,无法根据转换规则,确定该算子在第二关系计算模型中的新算子时,则可确定该SQL语句无法进行转换,并返回提示信息,以提示出现无法转换的错误。
需要说明的是,本说明书实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤S100和步骤S102的执行主体可以为设备1,步骤S102的执行主体可以为设备2;或者,步骤S100的执行主体可以为设备1,步骤S102和步骤S104的执行主体可以为设备2;等等。上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于图2所示的SQL语句转换的方法,本说明书实施例还提供一种SQL语句转换的装置,如图5所示。
图5为本说明书实施例提供的一种SQL语句转换的装置的结构示意图,包括:
确定模块200,确定待转换的SQL语句,以及确定需转换至的SQL方言;
第一转换模块202,根据所述SQL语句对应的计算过程,确定所述SQL语句对应的第一关系计算模型;
第二转换模块204,根据所述SQL方言所属的数据库对应的转换规则对所述第一关系计算模型中的各算子进行转换;
生成模块206,根据转换后的算子,生成SQL方言根据转换后的算子,生成SQL方言。
所述第一转换模块202,对所述SQL语句进行词法分析,确定所述SQL语句中的若干关键词,针对每个关键词,根据预设的关键词与算子的映射关系,确定该关键词对应的算子,根据所述SQL语句对应的各计算步骤的顺序,以及确定出的算子,生成所述第一关系计算模型,其中,每个算子对应至少一个计算步骤。
所述第二转换模块204,所述第二转换模块,按照所述第一关系计算模型中计算步骤的倒叙,依次针对所述第一关系计算模型中的每个算子,根据该算子、该算子在所述第一关系计算模型中的父算子以及所述转换规则,生成在所述SQL方言格式中与该算子作用等价的算子。
所述第二转换模块204,根据该算子的类型、该算子的变量、所述父算子的类型、所述父算子的变量以及所述转换规则,生成在所述SQL方言格式中与该算子作用等价的算子。
所述第二转换模块204,根据该算子的类型、该算子的变量、所述父算子的类型、所述父算子的变量以及所述转换规则,生成在所述第二关系计算模型中与该算子作用等价的算子。
所述第二转换模块204,根据所述SQL方言所属的数据库对应的转换规则,转换所述第一关系计算模型,得到第二关系计算模型之前,确定可根据所述SQL方言执行业务的数据库管理系统,根据预设的各数据库管理系统与各转换规则的对应关系,确定转换规则。
所述生成模块206根据转换后的算子,生成第二关系计算模型,根据所述第二关系计算模型,以及运行所述SQL方言的数据库管理系统的各关键词与算子的映射关系,生成SQL方言,作为与所述SQL语句等价的SQL方言。
基于图2所示的SQL语句转换的方法,本说明书实施例还提供一种服务器,如图6所示,其中,所述服务器包括:一个或多个处理器及存储器,存储器存储有程序,并且被配置成由一个或多个处理器执行以下步骤:
确定待转换的结构化查询语言SQL语句,以及确定需转换至的SQL方言格式;
根据所述SQL语句对应的计算过程,确定所述SQL语句对应的第一关系计算模型;
根据所述SQL方言格式对应的转换规则,对所述第一关系计算模型中的各算子进行转换;
根据转换后的算子,生成SQL方言。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。