发明内容
有鉴于此,本说明书实施例提供了一种数据查询方法及装置,用于解决现有技术中的问题。
本说明书实施例采用下述技术方案:
本说明书实施例提供一种数据查询方法,包括:
根据结构化查询语言文本获得对应的抽象语法树;遍历所述抽象语法树,标记与目标表相关联的逻辑处理阶段,获得与所述目标表相关联的逻辑语法树;其中,所述逻辑处理阶段包含至少一个所述抽象语法树的节点;根据所述逻辑语法树生成计算文本并执行数据查询,获得与所述目标表相关联的查询结果。
优选的,标记与目标表相关联的逻辑处理阶段进一步包括:
利用唯一标识标记与目标表相关联的逻辑处理阶段;所述查询结果包括在所述逻辑处理阶段涉及的与所述唯一标识相关联的直接查询结果和/或间接查询结果。
优选的,所述唯一标识还包括与业务需求相关联的标志信息;所述查询结果包括在所述逻辑处理阶段涉及的与所述标志信息相关联的直接查询结果和/或间接查询结果。
优选的,遍历所述抽象语法树进一步包括:根据业务需求,执行针对所述逻辑运算阶段包括的运算条件的处理。
优选的,执行针对所述逻辑运算阶段包括的运算条件的处理进一步包括:截取部分逻辑表达式;所述逻辑表达式包括“and”、“or”和嵌套组合逻辑中的至少一种。
优选的,遍历所述抽象语法树进一步包括:根据业务需求识别聚合函数,并针对所述聚合函数执行展开处理,再标记与所述目标表相关联的所述展开结果。
本说明书实施例提供一种资金数据核对方法,包括:
读取根据资金核对规则编写的SQL文本,并获得对应的抽象语法树;遍历所述抽象语法树,标记与所述资金核对规则的规则类型相关联的逻辑处理阶段,获得与所述规则类型相关联的逻辑语法树;根据所述逻辑语法树生成SQL计算文本并执行针对资金数据的核对,获得与所述规则类型相关联的核对结果。
优选的,所述核对结果包括覆盖率;其中,所述覆盖率是指已被所述核对规则覆盖的所述资金数据占所述总资金数据的百分比例;
根据所述逻辑语法树生成SQL计算文本并执行针对资金数据的核对,获得与所述规则类型相关联的核对结果进一步包括:利用所述SQL计算文本筛选已被所述核对规则覆盖的所述资金数据,并计算所述覆盖率。
优选的,所述核对结果包括未覆盖率;其中,所述未覆盖率是指未被所述核对规则覆盖的所述资金数据占所述总资金数据的百分比例;
根据所述逻辑语法树生成SQL计算文本并执行针对资金数据的核对,获得与所述规则类型相关联的核对结果进一步包括:利用所述SQL计算文本筛选未被所述核对规则覆盖的所述资金数据,并计算未覆盖率。
优选的,所述资金核对方法进一步包括:
根据所述未被核对规则覆盖的所述资金数据和所述根据核对规则编写的SQL文本生成更新SQL文本。
优选的,遍历所述抽象语法树进一步包括:计算所述覆盖率和/或所述未覆盖率时,去除所述总资金数据逻辑表达式中除日期宏之外的表达式。
优选的,标记与所述资金核对规则的规则类型相关联的逻辑处理阶段进一步包括:
利用唯一标识标记与所述资金核对规则的规则类型相关联的逻辑处理阶段;所述标识包括用于表示所述核对规则对应的业务部门的唯一标志信息;所述查询结果包括在所述逻辑处理阶段涉及的所述业务部门的所述资金数据。
优选的,所述标识还包括分别用于表示待付款和已支付的标志信息;所述核对结果包括在所述逻辑处理阶段涉及的所述待付款资金数据和所述已支付资金数据。
本说明书实施例提供一种数据查询装置,包括:
解析模块,读取SQL文本并解析为AST语法树;处理模块,遍历AST语法树,标记与目标表相关联的逻辑处理阶段,获得与所述目标表相关联的逻辑语法树;其中,所述逻辑处理阶段包含至少一个所述抽象语法树的节点;查询模块,根据该逻辑语法树生成SQL计算文本并执行查询,获得与该目标表相关联的查询结果。
本说明书实施例提供一种资金核对装置,包括:
规则解析模块,用于读取并解析根据核对规则编写的SQL文本,并获得AST语法树;逻辑处理模块,用于遍历所述抽象语法树,标记与所述资金核对规则的规则类型相关联的逻辑处理阶段,获得与所述规则类型相关联的逻辑语法树;查询模块,根据所述逻辑语法树生成SQL计算文本并执行针对资金数据的核对,获得与所述规则类型相关联的核对结果。
优选的,所述资金核对装置还包括:
文本更新模块,用于根据所述未被核对规则覆盖的所述资金数据和所述根据核对规则编写的SQL文本生成更新SQL文本。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:
本说明书一个或多个实施例提供了一种数据查询、资金核对方法及装置,将包含逻辑条件的SQL文本解析为AST语法树,遍历AST语法树时,通过在各逻辑处理阶段中添加与目标表相关联的标识,使获得的查询结果能够与目标表相关联,解决了查询结果无法直观的表示出与数据集合中的数据表之间的关联性的相关问题,提高了SQL查询功能的实用性,满足用户对进一步分析数据表与查询结果的需求,大幅度提高了用户查询的便利性和可扩展性;并且在遍历AST语法树时,根据业务需求对逻辑表达式进行了处理,提高了运算效率和准确度,节约了计算资源;同时针对SQL中的聚合函数进行了展开,提高了查询的完整性和准确性。
具体实施方式
SQL作为一种用于访问和处理数据库的标准计算机语言,可以利用SQL语句执行面向数据库的查询功能。通常情况下,一个数据库可以包含一个或多个表,表中包含有带有数据的行和/或列,以“SELECT”、“FROM”和“WHERE”SQL语句为例,图1是本说明书一个或多个实施例的人员信息表(Persons表),为了选取图1的表“Persons”中居住在城市"Beijing"的人,可以利用如下SQL语句执行查询:
SELECT*FROM Persons WHERE City=′Beijing′
其中,SELECT语句用于从表中选取数据,星号(*)是选取所有列的快捷方式;FROM语句用于表示数据来源;WHERE语句用于规定选择的标准。
图2是本说明书一个或多个实施例的人员信息查询结果表,从图2所示的查询结果可知,在实际应用场景中,可以将SQL的查询功能视为针对数据结合的过滤、加工、剪裁、转换和/或嵌套组合,最终获得符合SQL查询语句文本中所包含逻辑条件的查询结果,但是,上述查询结果通常并不能清晰的表示出完整的查询过程,例如,当SQL文本中所包含的逻辑条件具有多个逻辑层次,待查询的数据集合中的数据表之间具有复杂的交叉关系时,获得的查询结果无法直观的表示出与数据集合中的数据表之间的关联性,这在实际应用场景中,带来了极大的困扰,影响了SQL查询功能的实用性。
针对上述问题,本说明书一个或多个实施例提供了一种数据查询、资金核对方法及装置,通过在SQL查询的逻辑处理阶段中添加标识,使获得的查询结果能够与不同的数据表相关联,满足用户对进一步分析数据表与查询结果的需求。
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图3是本说明书一个或多个实施例的数据查询方法流程图,如图1所示,该评估方法具体包括以下步骤:
S101:读取SQL文本,获得对应的抽象语法树;
SQL文本中包含了若干SQL语句,这些语句是根据实际应用场景需求编写的符合标准的计算机程序语言。以资金核对的应用场景为例,SQL文本可以是根据各业务部门制定的资金核对规则编写的若干SQL语句的集合。
在一个或多个实施例中,利用Druid的SQL解析模块进行解析时,可以利用语法分析器(Parser)和词法分析器(Lexer)将输入的SQL文本转换为抽象语法树(AbstractSyntax Tree,AST),以树状形式表现SQL文本中的语法结构。
在一个或多个实施例中,Druid来自于一个开源项目,主要为了扩展JDBC的限制。Druid是一个结合了ProxyDriver、JDBC组件以及SQL Parser的数据库连接池,其中,数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个,也就是说,数据库连接池可用于在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。Druid支持所有JDBC兼容的数据库,例如,Oracle、MySql、Derby、Postgresql、SQL Server、H2等等,其中,Druid还针对Oracle和MySql做了特别优化。相比于其它数据库连接池,Druid在监控、可扩展性、稳定性和性能方面都有明显的优势。
具体的,在监控功能方面,Druid能够监控SQL的执行时间、ResultSet持有时间、返回行数、更新行数、错误次数、错误堆栈信息等;并且还能监控SQL执行的耗时区间分布,例如,一个SQL执行了N次,耗时区间分布是指在各时间区间各执行了多少次;另外,Druid还能够监控连接池的物理连接创建和销毁次数、逻辑连接的申请和关闭次数、非空等待次数、PSCache命中率等。在可扩展性方面,Druid提供了Filter-Chain模式的扩展API,能够兼容自己编写的Filter,例如,性能监控、SQL审计、用户名密码加密、日志等。
在稳定性和性能优化方面,Druid不仅集合了开源和商业数据库连接池的优秀特性,还具有很多独特的优化特性,例如,在SQL注入防御中,Druid在JDBC最低层进行拦截做判断,不会遗漏。
特别的,在SQL解析功能方面,Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL完整支持,其中的SQL Parser能够支持Visitor模式,其较高的性能使得分析SQL的抽象语法树更加简单便捷。经试验证明,利用Druid执行SQL解析时,简单SQL语句用时大约在10微秒以内,复杂SQL用时约为30微秒。另外,通过Druid提供的SQL Parser,还能够在JDBC层拦截SQL做相应处理,例如分库分表、审计等。
在一个或多个实施例中,语法分析器(Parser)是用于分析判断输入的单词序列(例如,句子)的构成是否合乎给定的语法,并通过构造语法树来确定句子的结构以及各层次语法成分之间的关系,即确定一个句子中的哪些词构成一个短语,哪些词是动词的主语或宾语等问题。
在一个或多个实施例中,词法分析器(Lexer)是用于将计算机语言的高层指令翻译成物理机器或虚拟机能够运行的指令。具体的,词法分析器(Lexer)能够分析量化那些本来毫无意义的字符流,将他们翻译成离散的字符组(例如,单个的单词Token),也就是说,词法分析器(Lexer)能够从输入字符流中分离出一个个的“单词”以供语法分析器使用。
在一个或多个实施例中,抽象语法树(Abstract Syntax Tree,AST)是源代码的抽象语法结构的树状表现形式,AST利用树状的形式表现编程语言的语法结构,其中,语法树上的每个节点都可以用于表示源代码中的一种结构;但是,AST并不会表示出真实语法中出现的每一个细节,例如,在语法树的结构中会将嵌套括号隐含其中,并不会以节点的形式呈现。一般来说,AST的构造并不依赖于源语言的语法。这是为了防止在语法分析阶段采用的上下文无文文法导致的多余引入,例如,在语法分析时进行的等价转换,即,消除左递归,回溯,二义性等。这种多余引入常会对后续阶段造成不利影响,甚至会使合个阶段变得混乱。
S102:遍历抽象语法树;
获得AST语法树后,可以根据实际应用场景需求,在AST的数据结构上继续计算,生成与符合需求的逻辑语法树,并在遍历AST时,标记与目标表相关联的逻辑处理阶段,获得与所述目标表相关联的逻辑语法树;其中,所述逻辑处理阶段包含至少一个AST的节点;将待查询数据库中所包含的各数据表定义为具体表;将与获得的查询结果相关联的具体表定义为目标表。
在一个或多个实施例中,可以利用唯一标识标记与目标表相关联的逻辑处理阶段;所述查询结果包括在所述逻辑处理阶段涉及的与所述唯一标识相关联的直接查询结果和/或间接查询结果。
在一个或多个实施例中,与目标表相关联的查询结果可以是直接查询结果,也可以是间接查询结果;直接查询结果是指利用SQL文本执行数据查询获得的与该目标表中所包含的数据直接关联的查询结果;例如,直接查询结果中的任一条数据是直接利用目标表中的数据基于SQL语句运算获得;间接查询结果是指利用SQL文本执行数据查询获得的与该目标表中所包含的数据间接关联的查询结果;例如,间接查询结果中的任一条数据在执行SQL语句的运算时,间接引用了该目标表中的数据。
在一个或多个实施例中,可将待查询数据库中所包含的具体表均设置为目标表,相应的,在标记逻辑处理阶段时,分别利用不同的标识标记各具体表,则利用SQL文本查询获得的查询结果中的任一条数据将与至少一个目标表相关联,即,查询结果中的任一条数据将包括至少一个标识,用户可以利用标识进一步分析查询结果与标识对应的目标表之间的关联性。
在一个或多个实施例中,可将待查询数据库中所包含的部分具体表设置为目标表,相应的,在标记逻辑处理阶段时,分别利用不同的标识标记各目标表,则利用SQL文本查询获得的查询结果中具有标识的部分将与至少一个目标表相关联,用户可以利用标识进一步分析查询结果与标识对应的目标表之间的关联性。
在一个或多个实施例中,上述用于标记逻辑处理阶段的与目标表关联的唯一标识可以用于区分该目标表与待查询数据库中的其它具体表或目标表。上述标识可以是用户自定义的,也可以是按预定规则自动获取的。
其中,用户可以根据需求自定义标识中所包含的信息,例如,目标表本身的属性信息,(目标表的名称、所包含的数据类型、所包含的数据大小、所包含的数据格式、所包含数据的生成日期或时间段等),或者是与实际应用场景相关的信息(目标表所包含数据对应的业务类型、目标表的制表部门或制表人、所包含数据对应的业务部门等);除此之外,上述标识也可以是根据目标表的已知信息自动生成的,例如,根据目标表在待查询数据库中的序列位置,或者根据目标表的名称等。
在一个或多个实施例中,AST是由节点构成的树状结构,其中,节点是一种数据结构,可以用来表示语句、表达式和变量等。例如,SQL文本中包含表达式、语句以及声明等多种类型的SQL语句,其中,表达式类型可以包括一元运算、二元运算、条件表达式以及赋值表达式等;语句类型可以包含if语句、while语句以及程序块等;声明类型可以包含变量声明列表、函数定义以及表示声明列表等。
在一个或多个实施例中,遍历AST语法树时,可以根据需求将遍历过程划分为不同的逻辑处理阶段。其中,逻辑处理阶段的划分可以包含多种方式,具体的,可以根据预设规则进行自动划分,或者由用户自定义划分。例如,可以根据AST的层次进行划分,将每一层定义为一个逻辑处理阶段;或者还可以根据节点数量/类型进行划分;或者可以根据实际应用场景以及用户的需求进行划分,如根据用户对查询条件的关注程度,将关注度高的查询条件划分为更多的逻辑处理阶段,将关注度较低的查询条件进行合并划分,以便提高运算速度,在标记时节省更多的资源。
在一个或多个实施例中,所述唯一标识还包括与业务需求相关联的标志信息;所述查询结果包括在所述逻辑处理阶段涉及的与所述标志信息相关联的直接查询结果和/或间接查询结果。
例如,在资金核对的应用场景中,待查询数据库中包含了多个需要执行资金核对的数据表(即具体表),已知输入的SQL文本中包含了不同业务部门根据实际业务需求制定的核对规则(如核对待付款订单和已支付订单资金数据的规则等),用户想要查看的查询结果所涉及的指定具体表称为目标表。
假设目标表的名称为“Table 1”,为了便于用户的快速查看,可在遍历AST语法树时,在不同的逻辑处理阶段添加与该目标表相关联的唯一标识。例如,若当前逻辑处理阶段涉及了目标表“Table 1”中的数据,可增加标识“Name_table 1”,其中,该标识是上述目标表“Table 1”的唯一标识。
在一个或多个实施例中,上述标识是根据实际应用场景进行自定义的。例如,在标识中增加一定的字符串,以用于标识目标表的所包含的内容特征(如待付款或已支付等业务类型),或目标表的日期(如时间点或时间段),或目标表的ID,或目标表的属性(如包含的数据量大小)等。
在一个或多个实施例中,遍历AST语法树时,可以根据实际业务需求简化其中的逻辑表达式,以便去除数据中的噪音,提高运算速度和精度,节约计算成本。以资金核对的实际应用场景为例,遍历时可针对使用了and、or、()组合的逻辑条件执行逻辑表达式的截取。例如,在需要计算待核对的资金总额时,可以去掉除日期宏之外的表达式,以便快速完成计算。
在一个或多个实施例中,遍历AST语法树时,可以根据实际业务需求识别和处理聚合函数。聚合函数是SQL的基本函数,具体的,聚合函数对一组值进行计算后返回单个值。聚合函数是一种确定性函数,在使用一组相同的输入值调用聚合函数执行计算后,其返回值均相同。
以包含平均值函数的SQL语句为例,下列语句可用于查询Persons表里的年限的平均值,相同值只计算一次:
SELECT AVG(DISTINCT Year)FROM Persons
其中,AVG函数用于计算精确型或近似型数据类型的平均值;DISTINCT用于表示每个值的唯一值计算平均值,不管相同的值出现多次,多个行相同的值仅仅出现一次作为计算。
由上述查询语句可以获得Persons表里的平均年限值为“12”。因此,当用户需要查询对逻辑处理阶段涉及目标表的数据时,从聚合函数的单个返回值中是无法查看到所有数据的,为了解决这一问题,需要将聚合函数返回的单个值进行展开成为一般的SQL选择列,再执行标识,以便确保标识标注的完整性和准确性。
S103:生成SQL计算文本并执行查询;
利用上述获得的逻辑语法树,可以生成SQL计算文本,并根据实际应用需求执行查询,具体的,可以执行与目标表相关联的查询。
在一个或多个实施例中,利用上述SQL计算文本可以执行覆盖率的查询。具体的,假设待查询数据中包含了多个具体表,SQL文本中包含了与业务相关的查询条件,可以利用下述公式查询上述查询条件对所有具体表中数据的覆盖率/未覆盖率,
其中,已覆盖数据条和未覆盖数据条可以利用是否具有在逻辑处理阶段增加的标识进行筛选统计。例如,在资金核对的实际应用场景中,利用上述公式计算出的覆盖率(未覆盖率),可以用于验证各业务部门所制定的核对规则是否完全覆盖了产生的全部数据。
在一个或多个实施例中,利用上述SQL计算文本可以执行针对目标表的查询。具体的,用户可以将特定的具体表(例如某一个具体表,或某一类具体表)作为目标表,查看与该目标表关联的数据结果。
以资金核对的实际应用场景为例,假设待查询数据包含了不同日期/不同业务部门的多个具体表,当用户需要查看查询到的结果数据中与特定日期/特定业务部门的目标表相关的数据时,可以利用对应的标识进行数据筛选,获得的筛选结果中不仅包含了与目标表直接相关的直接查询结果,还包含了利用目标表中的数据获得的间接查询结果。
在一个或多个实施例中,利用标识筛选出查询结果中包含的未被SQL文本中的查询条件所覆盖的未覆盖数据后,可以根据未覆盖数据、已覆盖数据以及已有的SQL文本指导生成新的查询条件,以便提高SQL文本对数据的覆盖率。例如,可以利用机器学习方法,将已覆盖数据和已有SQL文本作为样本数据进行训练并建立模型,再将未覆盖数据作为输入数据输入上述模型,从而根据输出结果生成对应于该未覆盖数据的查询条件。
图4是本说明书一个或多个实施例的数据查询装置结构示意图,如图4所示,该数据查询装置包括:
解析模块1001,读取SQL文本并解析为AST语法树;
处理模块1002,遍历AST语法树,在逻辑处理阶段增加与目标表相关联的标识,并获得与该目标表相关联的逻辑语法树;
查询模块1003,根据该逻辑语法树生成SQL计算文本并执行查询,获得与该目标表相关联的查询结果。
图5是本说明书一个或多个实施例的资金核对装置结构示意图,如图5所示,该资金核对装置包括:
规则解析模块2001,用于读取并解析根据核对规则编写的SQL文本,并获得AST语法树;
逻辑处理模块2002,用于遍历所述抽象语法树,在逻辑处理阶段增加与所述规则类型相关联的标识,获得与所述规则类型相关联的逻辑语法树;
查询模块2003,根据所述逻辑语法树生成SQL计算文本并执行针对资金数据的核对,获得与所述规则类型相关联的核对结果。
在一个或多个实施例中,上述查询模块2003还用于:
利用所述SQL计算文本筛选已被所述核对规则覆盖的所述资金数据,并计算覆盖率;其中,所述覆盖率是指已被所述核对规则覆盖的所述资金数据占所述总资金数据的百分比例。
利用所述SQL计算文本筛选未被所述核对规则覆盖的所述资金数据,并计算未覆盖率;其中,所述未覆盖率是指未被所述核对规则覆盖的所述资金数据占所述总资金数据的百分比例。
在一个或多个实施例中,上述资金核对装置还包括文本更新模块2004,用于根据所述未被核对规则覆盖的所述资金数据和所述根据核对规则编写的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),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。