分案说明
本申请属于申请日为2014年8月1日的中国发明专利申请no.201480077823.2的分案申请。
背景技术:
大规模数据处理可以包括并行处理,其通常涉及同时对大数据集的每个元素执行某个操作。可以在数据并行流水线中将各种操作链在一起,以创建用于对数据集进行处理的高效机制。数据集的产生可能涉及在一组大进化输入上周期性地运行的“批量作业”。随着输入被更新,前一个输出变得越来越陈旧,所以在定期基础上重新运行流水线。
技术实现要素:
本公开涉及在并行处理系统中执行数据的增量处理。
一般而言,本说明书中所描述的主题的一个创新方面能够用包括以下动作的方法加以具体化:识别包括指定要对数据集执行的计算操作的指令的同步代码;将所述同步代码变换成包括一个或多个流水线对象的流水线应用,所述流水线应用被配置成跨越多个计算设备并行执行,所述一个或多个流水线对象中的每一个流水线对象被配置成接收输入数据集并且产生输出数据集;识别要对其执行所述流水线应用的第一输入数据集;对第一输入数据集执行所述流水线应用以产生第一输出数据集,所述执行所述流水线应用包括按照前一个流水线对象将其输出数据集提供给下一个流水线对象作为其输入数据集的次序执行所述一个或多个流水线对象中的每一个流水线对象;在对所述第一输入数据集执行所述流水线应用之后,识别要对其执行所述流水线应用的第二输入数据集;确定所述第一输入数据集与所述第二输入数据集之间的差异的集合;以及对所述差异集合执行所述流水线应用以产生第二输出数据集,所述对差异的集合执行所述流水线应用包括:执行所述一个或多个流水线对象中的每一个流水线对象,包括每一个前一个流水线对象按照将与其前一个输出数据集的差异提供给所述下一个流水线对象作为其输入数据集的次序,并且所述第二输出数据集包括与所述第一输出数据集的差异。这个方面的其它实施例包括被配置成执行在计算机存储设备上编码的方法的动作的对应的系统、装置以及计算机程序。
能够实现本说明书中所描述的主题的特定实施例以便实现以下优点中的一个或多个。每当流水线被重新运行时对完整输入数据集进行再处理可能是浪费的,并且对于大流水线来说,它运行流水线花费的时间量限制它能够被运行有多频繁。然而,通过对第一输入数据集与第二输入数据集之间的差异进行处理,可以减少对后续数据集进行处理所必需的时间量,从而允许流水线更迅速地产生更新的输出数据集。另外,当设计者仅写入并维护同步代码的一个版本时,可以避免维护分离的批量和增量系统的隐患。
该系统能够自动地得到需要考虑到输入中的改变对输出所做的改变。这减少或者消除对流水线的人工维护,这进而也减少成本。还可以减轻与维护流水线的多个版本有关的正确性问题。此外,仅对输入集的改变进行处理可能在输入集尚未显著地改变的情况下导致流水线的后续执行所必需的计算资源的减少。还可以通过仅对输入集的改变进行处理来获得较低的时延。
在下面的附图和描述中阐述本说明书中所描述的主题的一个或多个实施例的细节。主题的其它特征、方面和优点从本说明书、附图和权利要求书将变得显而易见。
附图说明
图1是可能在其中发生增量数据处理的环境的框图。
图2是输入数据集通过流水线实例被并行处理的系统的框图。
图3是流水线以及包括在其中的流水线对象存储状态以用于在增量数据处理中使用的环境的框图。
图4是针对增量数据处理的示例过程的流程图。
图5是示例计算设备的框图。
各个附图中的相同的附图标记和名称指示相同的元件。
具体实施方式
本公开涉及在并行处理系统中执行数据的增量处理。在一些实施方式中,被视为执行计划(作为要应用于记录的某个合集的步骤的系列)的批量流水线被变换成增量执行计划,能够对差异(来自原始合集的添加或去除)的集合执行所述增量执行计划,以产生差异的集合,该差异的集合能够被应用于前一个输出合集以产生与会通过对整个新输入运行原始流水线而产生的合集相等的合集。在一些实施方式中,该系统还检测对输入的改变是什么,并且将输出差异的集合应用于最终输出。
并行处理框架提供用于由多个计算设备并行对大量的数据进行处理的平台。用户可以定义流水线或包括用于对输入数据集进行处理以产生输出数据集的步骤的流水线应用。一个常见的并行处理框架是mapreduce框架,在所述mapreduce框架中分布式计算被划分成用于将输入集划分成较小组的映射步骤,以及用于对这些组中的每一个执行操作的简化步骤。这样的框架通常在批量模式下操作,使得即使自流水线被最后运行以来已添加、改变或者删除了输入数据集中的仅几个值,每当流水线被运行时也必须处理整个输入数据集以产生输出数据集。这可能导致输入的重复处理,并且对于大输入数据集导致高时延。对于某些应用,比能够运行流水线的频率更新的输出数据可能是必要的。在这种情况下,可以构建第二系统以处理这样的增量更新。尤其随着原始流水线演进,这种方法常常增加复杂性和维护开销。能够在单个框架中表达计算并且在批量模式和增量模式两者下运行相同代码将是有利的。
此外,在同步代码中定义操作的两个模式的能力也是所希望的。同步代码包含呈现一系列顺序步骤的编程指令。这与可以作为涉及等待并对输入做出响应的有限状态机、事件处理机、或其它编程概念被实现的“异步”代码相反。通常,同步代码对于人类来说比异步代码更易于编辑和理解,因为可能不可容易地从代码它本身识别异步代码的操作和程序流。
因此,本公开描述了允许在同步代码中定义批量和增量处理操作的并行数据处理框架。一个示例方法包括识别同步代码并且将它变换成包括流水线对象的流水线。然后可以对第一输入数据集执行流水线以产生第一输出数据集。当对第二输入数据集执行流水线时,第一输入数据集与第二输入数据集之间的差异的集合被确定。然后对这些差异执行流水线以产生第二输出数据集。
通过对第一输入数据集与第二输入数据集之间的差异进行处理,可以减少对后续数据集进行处理所必需的时间量,从而允许流水线更迅速地产生更新的输出数据集。另外,当设计者仅写入并维护同步代码的一个集合时,可以避免维护分立的批量和增量系统的隐患。
图1是可能在其中发生增量数据处理的环境100的框图。环境100包括优化器104,优化器104分析包括用于在产生输出数据集112时对输入数据集110进行处理的指令的同步代码102。在操作中,优化器104分析同步代码102以产生可以在不同的计算设备上被并行执行的流水线106。流水线106包括对输入数据集110执行由同步代码102定义的处理步骤的一个或多个流水线对象108a-c。
环境100包括优化器104。如所示,优化器104可操作用于分析同步代码102并且产生流水线106。在一些实施方式中,优化器104可以是可操作用于分析同步代码102并且产生所对应的流水线106以执行由同步代码102定义的数据处理动作的软件程序或软件程序的集合。优化器104也可以是可以由作者导入到同步代码102中并且可以在同步代码102被编译和运行时被执行的软件库。在一些实施方式中,优化器104可以是服务器或服务器的集合,可以诸如通过应用编程接口(api)、经由一个或多个网络协议而通过网络、或者通过其它机制将同步代码102提交给所述服务器或服务器的集合。
在一些实施方式中,优化器104可以确定是否产生流水线,所述流水线在批量模式下操作,使得每当流水线被运行时整个输入数据集110被处理,或者在增量模式下操作,使得仅从最后运行起的输入数据集110中的差异被处理。在一些情况下,可以由用户基于给优化器104的输入做出此确定。还可以由优化器104自动地(诸如通过分析同步代码、输入数据集110或者基于其它分析)做出确定。例如,优化器104可以检验输入数据集110的大小并且确定因为它包含很少的项,所以应该产生批量模式流水线。在另一示例中,优化器104可以检验输入数据集110的大小并且确定集合包含大量的项。优化器104还可以诸如通过与用户的交互来确定要产生的流水线将被经常运行。在这种情况下,优化器104可以确定应该产生增量模式流水线。
同步代码102可以包括用于对输入数据集110进行处理以产生输出数据集112的指令。例如,同步代码102可以包括描述输入数据集如何将被处理的一系列顺序指令。包括在同步代码102中的顺序指令可以是函数调用、过程调用、循环、条件式或其它编程语言指令。同步代码102在它表示一系列顺序步骤的意义上是“同步的”。这与可以作为涉及等待输入并对输入做出响应的有限状态机、事件处理机或其它编程概念被实现的“异步”代码相反。通常,同步代码对于人类来说更易于编辑和理解,因为可能不可容易地从代码它本身识别异步代码的操作和程序流。
在一些实施方式中,同步代码102可以包括根据编程语言(诸如例如java、python、perl、c、c++、c#、javascript或其它编程语言或处理语言的组合)而编码的指令。在一些情况下,同步代码102可以被嵌入在较大应用内,使得应用的代码的仅一部分被优化器104优化。
优化器104分析(例如,变换)同步代码102以产生流水线106。在一些实施方式中,流水线106是可操作用于执行同步代码102中所定义的操作的分布式应用。在一些实施方式中,优化器104可以在同步代码102被执行时创建流水线106。优化器104可以跨越一个或多个服务器部署流水线106,并且使流水线106实例化以开始输入数据集110的处理。在一些实施方式中,优化器104可以与部署流水线106以便执行的环境102内的其它组件进行通信。
如所示,流水线106包括一个或多个流水线对象108a-c。在一些实施方式中,流水线对象108a-c各自对应于同步代码102内的指令或指令的集合。优化器104响应于同步代码102中的这样的指令而创建并执行流水线对象108a-c。在一些实施方式中,流水线对象108a-c可以是可以并行在分立的服务器上运行的独立软件程序。可以按照执行次序布置流水线对象108a-c,使得一个流水线对象(例如,108a)的输出可以用作另一流水线对象(例如,108b)的输入。相对于图3更详细地讨论流水线对象108a-c的操作。
在操作中,流水线对象108a-c对输入数据集110执行各种操作或变换以产生输出数据集112。在一些实施方式中,优化器104基于同步代码指令到流水线对象的类型的映射而生成流水线对象108a-c。例如,在同步代码102定义mapreduce操作的情况下,流水线对象108a可以是响应于同步代码102中的map()函数而生成的映射器对象,流水线对象108b可以是响应于同步代码102中的shuffle()函数而生成的洗牌器对象,并且流水线对象108c可以是响应于同步代码102中的reduce()函数而生成的简化器对象。流水线对象108a-c还可以执行其它操作,诸如例如聚合、组合、按密钥分组、平坦化、连接、计数、去除重复项以及其它操作,并且可以响应于同步代码102中的对应功能被生成。
环境100还包括要由流水线106处理的输入数据集110。在一些实施方式中,输入数据集110可以是数据库表、文本或二进制文件、数据流、数据碎片的合集、密钥值对的合集,或另一类型的数据集或各类型的数据集的组合。在一些实施方式中,输入数据集110可以由流水线106诸如通过网络或者作为程序的标准输入接收。输入数据集110也可以由流水线106在启动时或者随着执行进行而递增地请求或者检索。
环境100还包括输出数据集112。在操作中,输出数据集112由流水线106通过对输入数据集110进行处理而产生。输出数据集112表示由同步代码102定义的操作的最终产品。例如,如果同步代码102定义输入集110内的每个字母的发生次数将被计数的操作,则输出数据集112可以包括每个字母的计数的合集。在一些实施方式中,输出数据集可以由流水线106随着操作发生而更新。在一些情况下,可以在流水线106的执行结束时产生输出数据集112。输出数据集112可以是数据的合集,诸如例如数据库表或数据库表的合集、文本文件、密钥值对集合、数据流、或其它类型的数据。
图2是输入数据集通过流水线实例被并行处理的系统200的框图。如所示,系统200包括各自运行流水线实例204a-n的一个或多个服务器202a-n。每个流水线实例204a-n可以是相同的,可以被配置成对输入数据集110的不同部分进行处理。在一些实施方式中,每个流水线实例204a-n可以跨越多个服务器202a-n执行。在一些情况下,可以在不同的服务器上运行包括在每个流水线实例中的流水线对象中的每一个流水线对象。此外,其它组件(诸如对输入数据集110或由流水线实例204a-n产生的中间结果进行操作的分割器和组合器)可以被包括在系统200中。在一些实施方式中,优化器104可以为流水线106确定执行计划,并且可以将流水线实例204a-c部署在服务器202a-n上。优化器104可以基于对输入数据集110、同步代码102、由用户提供的参数或其它因素的分析而确定服务器和要创建的流水线实例的数目以及如何配置这些服务器和流水线实例。
图3是流水线106和流水线对象108a-c存储状态以用于在增量数据处理中使用的环境300的框图。如所示,环境300包括数据储存器302。在操作中,流水线106和流水线对象108a-c分别在数据储存器302中存储流水线状态304和流水线对象状态306。流水线状态304可以将流水线106的总体状态表示为其最后执行的状态。流水线对象状态306可以将单个的流水线对象108a-c的状态表示为流水线106最后执行的状态。通过查阅流水线状态304和流水线对象状态306,流水线106和流水线对象108a-c可以将要处理的数据与来自前一个执行的数据进行处理,以便实现流水线106的增量模式操作。
数据储存器302可以是数据库、文件系统、密钥值储存器、或其它类型的数据储存器。流水线106和流水线对象108a-c可以在执行流水线106期间写入数据储存器302并且从数据储存器302读取。数据储存器302可以是如图3中所示出的中央数据储存器,或者可以是包括多个节点的分布式来历。在一些实施方式中,数据储存器302可以包括与执行流水线106的每个服务器(诸如来自图2的服务器202a-n)关联的存储器。
数据储存器302包括流水线状态304。在一些实施方式中,流水线状态304可以是流水线106的前一个执行的表示。数据储存器302可以存储多个流水线状态304。在一些情况下,流水线106的每个实例可以存储不同的流水线状态304。流水线状态304可以存储针对流水线106的最后执行的输入数据集110的表示。流水线106可以更新流水线状态304以指示用于每个执行的输入数据集110中的改变。例如,流水线106可以针对输入数据集110中的每个项而检查流水线状态304,以确定该项是否在流水线106的最后执行期间被处理了。如果项在最后执行中未被处理,则流水线106可以将新项添加到流水线状态304,并且可以开始在当前执行中对该项进行处理。通过以这种方式检查流水线状态304,流水线106可以避免对在前一个执行期间处理过的项进行处理,并且因此实现增量处理模式。流水线106还可以确定已被从输入数据集110中移除的项,并且从流水线状态304中移除这些项。
在一些实施方式中,流水线状态304可以被作为项集合存储在数据储存器302中。在输入数据集110被存储在相同或类似的数据机存储中的情况下,流水线106可以执行输入数据集110与流水线状态304之间的集合比较以确定两个集合之间的差异。流水线106然后可以对这些差异进行处理以产生输出数据集112。
在一些实施方式中,流水线状态304可以包括针对流水线106的最后执行的输出数据集112的表示。流水线106可以随着来自输入数据集110的新项被处理并且随着从输入数据集110中删除的项被识别而更新输出数据集112的这个表示。流水线106然后可以产生这个更新的输出数据集112作为它针对当前执行的输出。在一些情况下,流水线106可以产生仅新输出(例如,由新输入数据生成的输出)代替全输出数据集112。
数据储存器302还包括流水线对象状态306。在一些情况下,流水线对象状态306中的每一个对应于流水线对象108a-c中的一个。流水线对象状态306可以存储与来自流水线106的前一个执行的单个流水线对象108a-c关联的状态信息。流水线对象108a-c当在增量模式下操作时可以使用这个先前的状态数据。例如,产生在输入数据集110中遇到的不同项的计数的聚合器对象在它被仅呈现有在执行期间对输入数据集110的改变的情况下才可能产生不完整的或错误的结果。通过存储用于前一个执行的输入数据集110中遇到的项计数,聚合器可以在流水线106的执行期间更新这些计数,并且产生指示经修改的输入数据集110的更新的结果。在一些实施方式中,流水线对象状态306可以作为密钥值对被存储,所述密钥值对具有包括在输入数据集110中找到的项的密钥的复合密钥以及与该状态关联的流水线对象的识别符。
图4是针对增量数据处理的示例过程400的流程图。在402处,包括指定要对数据集执行计算操作的指令的同步代码被识别。例如,可以对同步代码执行应用(诸如来自图1的优化器104)。还可以在编译、构建、或解释步骤期间识别同步代码。在一些实施方式中,同步代码可能本身不适合于对输入集的改变进行处理。在这些情况下,可以从对输入集的改变进行操作以产生输出集的对应改变的同步代码得到新流水线。
在404处,同步代码被变换成包括一个或多个流水线对象的流水线应用。在一些实施方式中,变换涉及使新软件对象或程序实例化以实现同步代码(诸如相对于图1所描述的流水线对象108a-c)的步骤。在一些情况下,可以基于输入数据集的大小或其它属性来执行同步代码的变换。例如,同步代码可以针对小输入数据集(例如,能够在单个计算设备上被迅速地处理的输入数据集)被变换成流水线的单个实例,但是可以针对大输入数据集(例如,不能够在单个计算设备上在合理量的时间内被处理的输入数据集)被变换成不同服务器上的多个分布式流水线实例。
在406处,要对其执行流水线应用的第一输入数据集被识别。在一些情况下,第一输入数据集被变换成密钥值对的第一集合并且存储在密钥值储存器中。第一输入数据集可以是数据流、数据库表、文件、或文件的集合,或另一类型的数据集。
在408处,对第一输入数据集执行流水线应用以产生第一输出数据集。在一些情况下,执行流水线应用包括利用包括在流水线应用中的流水线对象对第一输入数据集中的所有项进行处理以产生第一输出数据集。
在410处,要对其执行流水线应用的第二输入数据集在对第一输入数据集执行流水线应用之后被识别。在一些情况下,第二输入数据集可以是具有多个添加的和/或删除的项的第一输入数据集。在412处,第一输入数据集与第二输入数据集之间的差异的集合被确定。在一些实施方式中,确定差异包括将第二输入数据集变换成密钥值对的第二集合、将密钥值对的第二集合与密钥值对的第一集合进行比较、以及识别已相对于密钥值对的第一集合被从密钥值对的第二集合中添加或者删除的密钥值对。确定差异还可以包括确定表示对第一输入数据集执行了流水线的时间的流水线的最后执行时间戳,以及识别包括所述最后执行时间戳之后的时间戳的第二输入数据集中的项集合。在414处,对差异的集合执行流水线应用以产生第二输出数据集。
在一些情况下,过程400包括响应于对第一输入数据集执行流水线而确定流水线状态,该流水线状态包括第一输入数据集和第一输出数据集的表示。可以响应于对与第一输入数据集的差异集合执行流水线而更新流水线状态以生成更新的流水线状态,该更新的流水线状态包括第二输入数据集和第二输出数据集的表示。在一些情况下,可以响应于对第一输入数据集执行流水线而针对一个或多个流水线对象中的每一个确定流水线对象状态,该流水线对象状态包括针对流水线对象的输入数据集和输出数据集的表示。还可以响应于对与第一输入数据集的差异的集合执行流水线而更新流水线对象状态以生成更新的流水线对象状态,该更新的流水线对象状态包括针对流水线对象的输入数据集和输出数据集的差异。
图5是作为客户端或者作为服务器或多个服务器的可以被用来实现此文档中所描述的系统和方法的计算设备500、550的框图。计算设备500旨在表示各种形式的数字计算机,诸如膝上型计算机、台式计算机、工作站、个人数字助理、服务器、刀片服务器、主机、以及其它适当的计算机。计算设备550旨在表示各种形式的移动设备,诸如个人数字助理、蜂窝电话、智能电话、以及其它类似的计算设备。附加地,计算设备500或550能够包括通用串行总线(usb)闪速驱动器。usb闪速驱动器可以存储操作系统和其它应用。usb闪速驱动器能够包括输入/输出组件,诸如可以被插入到另一计算设备的usb端口中的无线发射器或usb连接器。这里所示出的组件、它们的连接和关系、以及它们的功能意味着仅为示例性的,而不意味着限制此文档中所描述和/或要求保护的发明的实施方式。
计算设备500包括处理器502、存储器504、存储设备506、连接到存储器504和高速扩展端口510的高速接口508、以及连接到低速总线514和存储设备506的低速接口512。组件502、504、506、508、510和512中的每一个使用各种总线来互连,并且可以被安装在公共主板上或者视情况而定以其它方式互连。处理器502能够处理用于在计算设备500内执行的指令,包括存储在存储器504中或在存储设备506上以将gui的图形信息显示在外部输入/输出设备(诸如耦合到高速接口508的显示器516)上的指令。在其它实施方式中,视情况而定,可以使用多个处理器和/或多个总线以及多个存储器和各种类型的存储器。并且,多个计算设备500可以与提供必要操作的部分的每个设备连接在一起(例如,作为服务器组、一组刀片服务器、或多处理器系统)。
存储器504存储计算设备500内的信息。在一个实施方式中,存储器504是一个或多个易失性存储器单元。在另一实施方式中,存储器504是一个或多个非易失性存储器单元。存储器504还可以是另一形式的计算机可读介质,诸如磁或光盘。
存储设备506能够为计算设备500提供大容量存储。在一个实施方式中,存储设备506可以是或者包含计算机可读介质,诸如软盘设备、硬盘设备、光盘设备、或磁带设备、闪速存储器或其它类似的固态存储器设备或这些设备的阵列,包括存储区域网络或其它配置中的设备。计算机程序产品能够用信息载体有形地具体化。计算机程序产品还可以包含当被执行时执行一个或多个方法(诸如上面所描述的那些方法)的指令。信息载体是计算机或机器可读介质,诸如存储器504、存储设备506、或处理器502上的存储器。
高速接口508管理计算设备500的带宽密集操作,而低速接口512管理较低带宽密集操作。功能的这种分配仅是示例性的。在一个实施方式中,高速接口508耦合到存储器504、显示器516(例如,通过图形处理器或加速计),并且耦合到高速扩展端口510,其可以接受各种扩展卡(未示出)。在该实施方式中,低速接口512耦合到存储设备506和低速扩展端口514。可以包括各种通信端口(例如,usb、蓝牙、以太网、无线以太网)的低速扩展端口可以耦合到一个或多个输入/输出设备,诸如键盘、指示设备、扫描器,或诸如交换机或路由器的联网设备,例如通过网络适配器。
如该图中所示,可以以许多不同的形式实现计算设备500。例如,它可以作为标准服务器520被实现,或者被实现在一组此类服务器中多次。它还可以被实现为机架服务器系统524的一部分。此外,它可以被实现在诸如膝上型计算机522的个人计算机中。可替选地,来自计算设备500的组件可以与诸如设备550的移动设备(未示出)中的其它组件组合。这些设备中的每一个可以包含计算设备500、550中的一个或多个,并且整个系统可以由彼此通信的多个计算设备500、550组成。
除其它组件之外,计算设备550还包括处理器552、存储器564、诸如显示器554的输入/输出设备、通信接口566以及收发器568。设备550还可以提供有存储设备,诸如微型驱动器或其它设备,以提供附加的存储。组件550、552、564、554、566和568中的每一个使用各种总线来互连,并且这些组件中的数个可以被安装在公共主板上或者视情况而定以其它方式互连。
处理器552能够执行计算设备550内的指令,包括存储在存储器564中的指令。处理器可以作为包括单独的及多个模拟和数字处理器的芯片的芯片集被实现。附加地,可以使用许多架构中的任一个来实现处理器。例如,处理器552可以是cisc(复杂指令集计算机)处理器、risc(精简指令集计算机)处理器、或misc(最小指令集计算机)处理器。处理器可以提供例如对设备550的其它组件的协调,诸如对用户接口、由设备550运行的应用、以及通过设备550的无线通信的控制。
处理器552可以通过控制接口558以及耦合到显示器554的显示接口556与用户进行通信。显示器554可以是例如tft(薄膜晶体管液晶显示)显示器或oled(有机发光二极管)显示器或其它适当的显示技术。显示接口556可以包括用于驱动显示器554以向用户呈现图形和其它信息的适当电路。控制接口558可以接收来自用户的命令并且对它们进行转换以用于提交给处理器552。此外,外部接口562可以被设置为与处理器552通信,以便使得能实现设备550与其它设备的近区域通信。例如,外部接口562可以在一些实施方式中提供有线通信,或者在其它实施方式中提供无线通信,并且还可以使用多个接口。
存储器564存储计算设备550内的信息。存储器564可以作为计算机可读介质或媒体、一个或多个易失性存储器单元、或一个或多个非易失性存储器单元中的一个或多个被实现。还可以提供扩展存储器574并且通过扩展接口572连接到设备550,所述扩展接口572可以包括例如simm(单列直插存储器模块)卡接口。这种扩展存储器574可以为设备550提供额外的存储空间,或者还可以为设备550存储应用或其它信息。具体地,扩展存储器574可以包括用来执行或者补充上面所描述的过程的指令,并且还可以包括安全信息。因此,例如,扩展存储器574可以作为设备550的安全模块被提供,并且可以被编程有许可设备550的安全使用的指令。此外,可以经由simm卡与附加信息一起提供安全应用,诸如以不可被黑客破坏的方式将识别信息放置在simm卡上。
如在下面所讨论的,存储器564可以包括例如闪速存储器和/或nvram存储器。在一个实施方式中,计算机程序产品用信息载体有形地具体化。计算机程序产品包含指令,所述指令当被执行时执行一个或多个方法,诸如上面所描述的那些方法。信息载体是计算机或机器可读介质,诸如存储器564、扩展存储器574,或可以例如通过收发器568或外部接口562接收的处理器552上的存储器。
设备550可以通过通信接口566以无线方式通信,所述通信接口566必要时可以包括数字信号处理电路。通信接口566可以提供在各种模式或协议下的通信,所述各种模式或协议诸如为gsm语音呼叫、sms、ems或mms消息传送、cdma、tdma、pdc、wcdma、cmda2000、或gprs等。这种通信可以例如通过射频收发器568发生。此外,短距离通信可以诸如使用蓝牙、wifi或其它这种收发器(未示出)而发生。此外,gps(全球定位系统)接收器模块570可以将附加的导航和位置相关无线数据提供给设备550,所述无线数据可以视情况而定被在设备550上运行的应用使用。
设备550还可以使用音频编解码器560听得见地通信,所述音频编解码器560可以从用户接收口语信息并且将其转换为可使用的数字信息。诸如通过例如设备550的头戴式耳机中的扬声器,音频编解码器560可以同样地为用户生成可听声音。这种声音可以包括来自语音电话呼叫的声音,可以包括记录的声音(例如,语音消息、音乐文件等),并且还可以包括由在设备550上操作的应用所生成的声音。
如该图中所示,可以以许多不同的形式实现计算设备550。例如,计算设备550可以作为蜂窝电话580被实现。其还可以作为智能电话582、个人数字助理、或其它类似的移动设备的一部分被实现。
在各种实施方式中,如果现有操作不成功(例如,如果确定未被执行),则不执行“响应于”或者“由于”另一操作(例如,确定或识别)而被执行的操作。被“自动地”执行的操作是在没有用户干预(例如,干预用户输入)的情况下被执行的操作。在此文档中用条件语言描述的特征可以描述为可选的实施方式。在一些示例中,从第一设备向第二设备“传送”包括第一设备将数据放置到网络中以供由第二设备接收,但是可能不包括第二设备接收数据。相反,从第一设备“接收”可以包括从网络接收数据,但是可能不包括第一设备传送数据。
由计算系统“确定”能够包括计算系统请求另一设备执行确定并且将结果供应给计算系统。而且,由计算系统“显示”或者“呈现”能够包括计算系统发送用于使另一设备显示或者呈现所引用的信息的数据。
本说明书中所描述的主题和操作的实施例能够用数字电子电路或用计算机软件、固件或硬件(包括本说明书中所公开的结构及其结构等同物)或者用它们中的一个或多个的组合加以实现。本说明书中所描述的主题的实施例能够作为被编码在计算机存储介质上以用于由数据处理装置执行或者以控制数据处理装置的操作的一个或多个计算机程序(即,计算机程序指令的一个或多个模块)被实现。可替选地或此外,能够将程序指令编码在人工生成的传播信号(例如,被生成来对信息进行编码以便传输到适合的接收器装置以供由数据处理装置执行的机器生成的电、光或电磁信号)上。计算机存储介质可以是或者被包括在计算机可读存储设备、计算机可读存储基板、随机或串行存取存储器阵列或设备或者它们中的一个或多个的组合中。而且,虽然计算机存储介质不是传播信号,但是计算机存储介质可以是被编码在人工生成的传播信号中的计算机程序指令的源或目的地。计算机存储介质还可以是或者被包括在一个或多个单独的物理组件或媒体(例如,多个cd、磁盘或其它存储设备)中。
本说明书中所描述的操作能够作为由数据处理装置对存储在一个或多个计算机可读存储设备上或者从其它源接收的数据所执行的操作被实现。
术语“数据处理装置”包含用于对数据进行处理的所有类型的装置、设备和机器,通过示例包括可编程处理器、计算机、片上系统或多个可编程处理器、计算机、片上系统,或上述的组合。该装置能够包括专用逻辑电路,例如fpga(现场可编程门阵列)或asic(专用集成电路)。除硬件之外,该装置还能够包括为所述的计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统、跨平台运行时环境、虚拟机或它们中的一个或多个的组合的代码。该装置和执行环境能够实现各种不同的计算模型基础设施,诸如web服务、分布式计算以及网格计算基础设施。
计算机程序(还被称为程序、软件、软件应用、脚本或代码)能够用任何形式的编程语言(包括编译或解释语言、描述性或过程语言)编写,并且它能够被以任何形式(包括作为独立程序或者作为适合于在计算环境中使用的模块、组件、子例行程序、对象或其它单元)部署。计算机程序可以但未必对应于文件系统中的文件。能够在保持其它程序或数据的文件(例如,存储在标记语言文档中的一个或多个脚本)的一部分中、在专用于所述的程序的单个文件中、或者在多个协调文件(例如,存储一个或多个模块、子程序或代码的部分的文件)中存储程序。能够将计算机程序部署成在一个计算机上或在位于一个站点处或者跨越多个站点分布并通过通信网络互连的多个计算机上执行。
本说明书中所描述的过程和逻辑流程能够由执行一个或多个计算机程序的一个或多个可编程处理器来执行,以通过对输入数据进行操作并生成输出来执行动作。过程和逻辑流程还能够由专用逻辑电路来执行,并且装置还能够作为专用逻辑电路(例如,fpga(现场可编程门阵列)或asic(专用集成电路))被实现。
作为示例,适合于执行计算机程序的处理器包括通用和专用微处理器二者以及任何类型的数字计算机的任何一个或多个处理器。通常,处理器将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的必要元件是用于依照指令执行动作的处理器以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括或者在操作上耦合以从用于存储数据的一个或多个大容量存储设备(例如,磁盘、磁光盘、或光盘)接收数据或者向一个或多个大容量存储设备传送数据或两者。然而,计算机不必具有这些设备。而且,能够将计算机嵌入在另一设备(例如,移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏控制台、全球定位系统(gps)接收器或便携式存储设备(例如,通用串行总线(usb)闪存驱动器)等)中。适合于存储计算机程序指令和数据的设备包括所有形式的非易失性存储器、媒体和存储器设备,作为示例包括:半导体存储器设备,例如,eprom、eeprom、和闪速存储器设备;磁盘,例如,内部硬盘或可移除盘;磁光盘;以及cd-rom和dvd-rom盘。处理器和存储器能够由专用逻辑电路来补充或者并入专用逻辑电路。
为了提供与用户的交互,能够将本说明书中所描述的主题的实施例实现在具有用于向用户显示信息的显示设备(例如,crt(阴极射线管)或lcd(液晶显示)监视器)以及用户能够用来向计算机提供输入的键盘和指示设备(例如,鼠标或轨迹球)的计算机上。其它类型的设备也能够被用来提供与用户交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如,视觉反馈、听觉反馈或触觉反馈;并且能够以包括声输入、语音输入或触觉输入的任何形式接收来自用户的输入。此外,计算机能够通过向由用户使用的设备发送文档并从由用户使用的设备接收文档(例如,通过响应于从web浏览器接收到的请求而向用户的用户设备上的web浏览器发送网页)来与用户交互。
本说明书中所描述的主题的实施例能够被实现在计算系统中,所述计算系统包括后端组件(例如,作为数据服务器),或者包括中间件组件(例如,应用服务器),或者包括前端组件(例如,具有用户能够用来与本说明中所描述的主题的实施方式交互的图形用户接口或web浏览器的用户计算机),或一个或多个这种后端组件、中间件组件或前端组件的任何组合。本系统的组件能够通过任何形式或介质的数字数据通信(例如,通信网络)来互连。通信网络的示例包括局域网(“lan”)和广域网(“wan”)、互联的网络(例如,互联网)、以及对等网络(例如,自组织对等网络)。
计算系统能够包括用户和服务器。用户和服务器通常彼此远离并且通常通过通信网络交互。用户和服务器的关系借助于在相应的计算机上运行并且彼此具有用户-服务器关系的计算机程序来产生。在一些实施例中,服务器向用户设备传送数据(例如,html页面)(例如,用于向与用户设备交互的用户显示数据并且从与用户设备交互的用户接收用户输入的目的)。能够在服务器处从用户设备接收在该用户设备处生成的数据(例如,用户交互的结果)。
虽然本说明书包含许多特定实施方式细节,但是这些不应该被解释为对任何发明的或可能要求保护的范围构成限制,而是相反被解释为特定于特定发明的特定实施例的特征的描述。还能够在单个实施例中相结合地实现在此说明书中在单独的实施例背景下描述的特定特征。相反地,还能够单独地在多个实施例中或在任何适合的子组合中实现在单个实施例背景下描述的各种特征。而且,尽管特征可以被在上面描述为在特定组合中行动并且同样地甚至最初要求保护,然而来自要求保护的组合的一个或多个特征能够在一些情况下被从组合中删除,并且所要求保护的组合可以涉及子组合或子组合的变化。
类似地,虽然在附图中按特定次序描绘操作,但是这不应该被理解为要求这些操作被以所示出的特定次序或以顺序次序执行,或者要求执行所有图示的操作,以实现所希望的结果。在特定情况下,多任务处理和并行处理可能是有利的。而且,上面所描述的实施例中的各种系统组件的分离不应该被理解为在所有实施例中要求这种分离,并且应该理解,所描述的程序组件和系统通常能够被一起集成在单个软件产品中或者封装到多个软件产品中。
因此,已经对主题的特定实施例进行了描述。其它实施例在以下权利要求的范围内。在一些情况下,权利要求中所记载的动作能够被以不同的次序执行并且仍然实现所希望的结果。此外,附图中所描绘的过程未必要求所示出的特定次序或顺序次序以实现所希望的结果。在特定实施方式中,多任务处理和并行处理可能是有利的。