用于批量和实时数据处理的设备、系统和方法转让专利

申请号 : CN201480014776.7

文献号 : CN105531698B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : A·拉娜C·戈B·西马诺夫斯基

申请人 : 美国结构数据有限公司

摘要 :

传统的数据处理系统配置为要么批量处理输入数据要么实时处理输入数据。一方面,批量数据处理系统是有限制性的,因为批量数据处理不能考虑任何在批量数据处理期间所接收的数据。另一方面,实时数据处理系统是有限制性的,因为实时系统经常不能扩展。实时数据处理系统常常受处理基元数据类型和/或小量数据的限制。因此,希望通过将批量数据处理系统和实时数据处理系统的益处结合到单个数据处理系统中来解决批量数据处理系统和实时数据处理系统的限制。

权利要求 :

1.一种用于生成一组数据的概要数据的计算系统,所述计算系统包括:一个或多个处理器,配置为运行存储在无形计算机可读介质中的一个或多个模块,其中所述一个或多个模块可操作执行:接收第一组数据和第二组数据,其中,所述第一组数据与所述第二组数据相比包括更大量的数据项;

处理所述第一组数据从而将所述第一组数据格式化为第一组结构化数据;

通过用于概括所述第一组结构化数据的操作规则,使用所述第一组结构化数据生成第一概要数据,并且将所述第一概要数据存储在数据存储库中;

处理所述第二组数据从而将所述第二组数据格式化为第二组结构化数据;

通过用于概括所述第一组结构化数据和所述第二组结构化数据的操作规则,基于所述第一组结构化数据和所述第二组结构化数据生成第二概要数据;

确定所述第一概要数据和所述第二概要数据之间的差异;以及

基于所述第一概要数据和所述第二概要数据之间的所述差异更新所述数据存储器。

2.根据权利要求1所述的计算系统,其中,所述第二组数据包括实时数据提交,以及所述一个或多个模块可操作以响应于接收到所述第二组数据来处理所述第二组数据从而将所述第二组数据格式化为所述第二组结构化数据。

3.根据权利要求1所述的计算系统,其中,所述一个或多个模块可操作以每隔第一时间间隔处理所述第一组数据从而将所述第一组数据格式化为所述第一组结构化数据,所述第一时间间隔基本上比第二时间间隔更长,每隔所述第二时间间隔所述第二组数据被格式化为所述第二组结构化数据。

4.根据权利要求1所述的计算系统,其中,所述第一概要数据和所述第二概要数据中的每一个都包括实体标识符和与所述实体标识符相关联的值,以及其中所述一个或多个模块可操作以通过以下操作来确定所述第一概要数据和所述第二概要数据之间的所述差异:确定所述第一概要数据和所述第二概要数据包括相同的实体标识符,以及比较在所述第一概要数据和所述第二概要数据中与所述相同的实体标识符相关联的值。

5.根据权利要求4所述的计算系统,其中,所述一个或多个模块进一步可操作以向其它被授权计算系统提供所述第一概要数据和所述第二概要数据之间的所述差异。

6.根据权利要求5所述的计算系统,其中,所述一个或多个模块进一步可操作以经由应用编程接口向其它被授权计算系统提供所述差异。

7.根据权利要求5所述的计算系统,其中,所述一个或多个模块进一步可操作以将所述差异作为文件提供给其它被授权计算系统。

8.根据权利要求1所述的计算系统,其中,所述一个或多个模块可操作执行:将至少所述第一组数据和所述第二组数据结合以生成第三组数据;

处理所述第三组数据从而基于用于格式化一组数据的新规则将所述第三组数据格式化为第三组结构化数据;以及使用所述第三组结构化数据生成第三概要数据。

9.根据权利要求8所述的计算系统,其中,所述第一组数据和所述第三组数据的每一个都包括第一数据元素,以及其中所述第一数据元素与所述第一概要数据中由第一实体标识符识别的第一实体相关联,其中,所述第一数据元素与所述第三概要数据中的第二实体相关联,以及其中所述一个或多个模块进一步可操作以将所述第一实体标识符与所述第三概要数据中的所述第二实体相关联从而使得在所述第三概要数据中所述第一数据元素维持所述第一数据元素的与所述第一实体标识符的关联。

10.根据权利要求1所述的计算系统,其中,所述第一组结构化数据包括数据项的分组,所述数据项的分组基于与所述数据项相关联的实体标识符。

11.根据权利要求1所述的计算系统,其中,所述计算系统包括在数据中心中的至少一个服务器。

12.根据权利要求1所述的计算系统,其中,所述数据存储器包括多个数据库系统,所述多个数据库系统中的每一个都与视图相关联,以及其中所述一个或多个模块可操作以响应于查询而基于与所述查询相关联的视图来选择所述多个数据库系统中的一个。

13.根据权利要求1所述的计算系统,其中,所述一个或多个模块可操作执行:识别在生成所述第二概要数据以后接收的第三组数据;

基于所述第三组数据、所述第一组结构化数据和所述第二组结构化数据,通过用于概括所述第一组结构化数据、所述第二组结构化数据和第三概要数据的操作规则生成所述第三概要数据;

确定所述第二概要数据和所述第三概要数据之间的差异;以及

基于所述第二概要数据和所述第三概要数据之间的所述差异更新所述数据存储器。

14.一种用于生成一组数据的概要数据的方法,所述方法包括:

在操作在计算系统的处理器上的输入模块处,接收第一组数据和第二组数据,其中,所述第一组数据与所述第二组数据相比包括更大量的数据项;

在所述计算系统的第一输入处理模块处,处理所述第一组数据从而将所述第一组数据格式化为第一组结构化数据;

在所述计算系统的第一概要生成模块处,通过用于概括所述第一组结构化数据的操作规则,使用所述第一组结构化数据生成第一概要数据;

将所述第一概要数据维护在所述计算系统的数据存储器中;

在所述计算系统的第二输入处理模块处,处理所述第二组数据从而将所述第二组数据格式化为第二组结构化数据;

在所述计算系统的第二概要生成模块处,通过用于概括所述第一组结构化数据和所述第二组结构化数据的操作规则,使用所述第一组结构化数据和所述第二组结构化数据生成第二概要数据;

在所述计算系统的差异生成模块处,确定所述第一概要数据和所述第二概要数据之间的差异;以及由所述计算系统基于所述第一概要数据和所述第二概要数据之间的所述差异更新所述数据存储器。

15.根据权利要求14所述的方法,其中,接收所述第二组数据包括:接收实时数据提交,以及其中,处理所述第二组数据从而将所述第二组数据格式化为所述第二组结构化数据包括:响应于接收到所述第二组数据来处理所述第二组数据。

16.根据权利要求14所述的方法,其中,所述第一概要数据和所述第二概要数据中的每一个都包括实体标识符和与所述实体标识符相关联的值,以及其中确定所述第一概要数据和所述第二概要数据之间的差异包括:确定所述第一概要数据和所述第二概要数据包括相同的实体标识符,以及比较在所述第一概要数据和所述第二概要数据中与所述相同的实体标识符相关联的值。

17.根据权利要求14所述的方法,进一步包括:

将至少所述第一组数据和所述第二组数据结合以生成第三组数据,

处理所述第三组数据从而基于用于格式化一组数据的新规则将所述第三组数据格式化为第三组结构化数据;以及使用所述第三组结构化数据生成第三概要数据。

18.根据权利要求17所述的方法,其中,第一数据元素是所述第一组数据和所述第三组数据的一部分,并且与所述第一概要数据中由第一实体标识符识别的第一实体相关联,其中,所述第一数据元素与所述第三概要数据中的第二实体相关联,以及其中所述方法进一步包括:将所述第一实体标识符与所述第三概要数据中的所述第二实体相关联从而使得在所述第三概要数据中所述第一数据元素维持所述第一数据元素的与所述第一实体标识符的关联。

19.根据权利要求14所述的方法,其中,所述计算系统包括在数据中心中的至少一个服务器。

20.一种非瞬时计算机可读存储介质,有形地包含计算机程序,所述计算机程序包括指令,所述指令被处理器执行时引起数据处理系统执行以下操作:接收第一组数据和第二组数据,其中,所述第一组数据与所述第二组数据相比包括更大量的数据项;

处理所述第一组数据从而将所述第一组数据格式化为第一组结构化数据;

通过用于概括所述第一组结构化数据的操作规则,使用所述第一组结构化数据生成第一概要数据,并且将所述第一概要数据存储在数据存储器中;

处理所述第二组数据从而将所述第二组数据格式化为第二组结构化数据;

通过用于概括所述第一组结构化数据和所述第二组结构化数据的操作规则,使用所述第一组结构化数据和所述第二组结构化数据生成第二概要数据;

确定所述第一概要数据和所述第二概要数据之间的差异;以及

基于所述第一概要数据和所述第二概要数据之间的所述差异更新所述数据存储器。

21.根据权利要求20所述的瞬时计算机可读存储介质,其中,所述第二组数据包括实时数据提交,以及其中所述指令引起所述数据处理系统响应于接收到所述第二组数据来处理所述第二组数据从而将所述第二组数据格式化为所述第二组结构化数据。

22.根据权利要求20所述的瞬时计算机可读存储介质,其中,所述第一概要数据和所述第二概要数据中的每一个都包括实体标识符和与所述实体标识符相关联的值,以及其中所述指令引起所述数据处理系统通过以下操作来确定所述第一概要数据和所述第二概要数据之间的所述差异:确定所述第一概要数据和所述第二概要数据包括相同的实体标识符,以及比较在所述第一概要数据和所述第二概要数据中与所述相同的实体标识符相关联的值。

23.根据权利要求20所述的瞬时计算机可读存储介质,其中,所述指令引起所述数据处理系统:将至少所述第一组数据和所述第二组数据结合以生成第三组数据;

处理所述第三组数据从而基于用于格式化一组数据的新规则将所述第三组数据格式化为第三组结构化数据;以及使用所述第三组结构化数据生成第三概要数据。

说明书 :

用于批量和实时数据处理的设备、系统和方法

[0001] 与相关申请的交叉引用
[0002] 根据35U.S.C.§119(e),本申请要求享有以下申请的在先申请日:
[0003] ·美国临时专利申请,序列号61/799,986,申请日为2013年3月15日,发明名称为“用于分析和使用基于位置的行为的系统”;
[0004] ·美国临时专利申请,序列号61/800,036,申请日为2013年3月15日,发明名称为“地理位置描述符和链接符”;
[0005] ·美国临时专利申请,序列号61/799,131,申请日为2013年3月15日,发明名称为“用于众包领域特定情报的系统和方法”;
[0006] ·美国临时专利申请,序列号61/799,846,申请日为2013年3月15日,发明名称为“具有批量处理和实时数据处理的系统”;以及
[0007] ·美国临时专利申请,序列号61/799,817,申请日为2013年3月15日,发明名称为“用于向位置实体分配分数的系统”。
[0008] 本申请还与以下申请有关:
[0009] ·美国专利申请,序列号14/214,208,申请日与本申请的申请日相同,发明名称为“用于分析对象实体的移动的设备、系统和方法”;
[0010] ·美国专利申请,序列号14/214,296,申请日与本申请的申请日相同,发明名称为“用于提供位置信息的设备、系统和方法”;
[0011] ·美国专利申请,序列号14/214,213,申请日与本申请的申请日相同,发明名称为“用于众包领域特定情报的设备、系统和方法”;
[0012] ·美国专利申请,序列号14/214,219,申请日与本申请的申请日相同,发明名称为“用于批量处理和实时数据处理的设备、系统和方法”;
[0013] ·美国专利申请,序列号14/214,309,申请日与本申请的申请日相同,发明名称为“用于分析受关注实体特性的设备、系统和方法”;以及
[0014] ·美国专利申请,序列号14/214,231,申请日与本申请的申请日相同,发明名称为“用于分组数据记录的设备、系统和方法”。
[0015] 上述所引用的每个申请的全部内容(包括临时申请和正式申请)通过引用包含在本文中。

技术领域

[0016] 本发明总体涉及数据处理系统,以及特别地,涉及可以使用批量(batch)处理和实时处理来处理数据的数据处理系统。

背景技术

[0017] 本文所公开的系统涉及接收、处理以及存储来自许多源的数据,表示从数据中而来的事实和观点的最“正确的”概要,包括能够将此实时重新计算,以及随后使用结果来响
应查询。作为示例,当用户向基于web的系统、移动电话或车载导航系统输入查询搜索“在格
林威治村中的有代客泊车服务的对儿童友好的(child friendly)中餐馆”时,系统可以非
常迅速地用匹配例如以下参数的餐馆列表来响应:{“kid_friendly”:true,”category”:”
Restaurant>Chinese”“, valet_parking”:true“,neighborhood”:”Greenwich Village”}。
移动电话于是可以提供呼叫每一个餐馆的按钮。描述每一个餐馆的此信息可以遍布许多网
站,来源于许多数据存储器(store),以及由系统用户直接提供。
[0018] 现有技术中的问题是存储在任何数据存储器中的关于美国所有已知商业的所有网页、引用和数据可以是如此巨大以致于无法实时地理解和查询。更新和维护这样巨大容
量的信息可以很难。例如,描述美国商业的信息具有多于数十亿行的输入数据、数百亿的事
实以及数十万亿字节的web内容。
[0019] 与此同时,新信息不断变得可用并且希望将这些信息包括在查询结果的产出中。作为示例,系统可以学习到餐馆不再提供代客泊车服务、餐馆不接待儿童或者餐馆的电话
号码已经中断。
[0020] 照此,希望能够既基于持续性(例如考虑新写的评论)也基于整体(例如重新评估整体数据并使用其中所包含的先前不能使用的信息)来更新产生搜索结果的系统。

发明内容

[0021] 所公开的系统配置为接收新数据(例如实时更新)和旧数据(例如经过很长时间收集的数据),并且配置为基于对新数据和旧数据的重新评估来周期性更新系统。
[0022] 与仅能搜索网页并返回至匹配网页的链接的系统不同,所公开的系统可以维护关于每一实体的参数信息并且直接返回信息。在常规系统中,例如,针对“有代客泊车服务的
中餐馆”的web搜索可以返回至具有词“中餐(Chinese)”、“餐馆”、“代客”和“泊车”的网页的链接。这一般来说将包括具有像“发现没有代客泊车服务”陈述的网页,因为词“代客”和“泊
车”出现在文本中并且因此被索引为针对网页的关键字。相反,所公开的系统具有例如餐馆
类别的参数和指示餐馆是否提供代客泊车服务的值,这有益地允许系统用更有意义的结果
来响应。此外,在所公开的系统中,用户可以作为纠正数据的贡献方来操作。而且,所公开的
系统可以解释跨许多网页的事实并且得到共识回答,该共识回答则是可查询的从而进一步
改进结果。
[0023] 在所公开系统的实施例中,用户可以作为向系统贡献数据的贡献方操作。例如,用户可以向系统提供直接反馈来纠正事实。多个这样的提交可以被所公开的系统与网站上的
信息(例如关于对儿童友好的餐馆的博客)一起考虑,并且被概括到可以迅速响应查询的快
速演进数据存储器中。由此,所公开的系统的用户可以访问新纠正的电话号码和对其儿童
友好性的更准确的评价。
[0024] 在一些实施例中,所公开的系统可以改进或扩展用来理解网页或反馈中的信息的分析方法。可以持续改进或扩展分析方法。例如,与上个月的方法相比,今天的方法可以能
够从数据源提取更多信息。如果一个网页包括作为简单文本的事实而另一个有使用复杂散
文表述的观点,则所公开的系统使用上个月的方法可以已经能够处理例如“代客泊车服务:
是”的简单文本,但是还不能处理例如“没有地方可以停车,更别提代客泊车服务了”的散
文。然而,所公开的系统,使用今天的方法,可以已经扩展了能力并且能够处理更微妙的散
文数据。
[0025] 大体上,一方面,所公开的主题的实施例可以包括一种用于生成一组数据的概要数据的计算系统。计算系统可以包括一个或多个处理器,配置为运行存储在无形计算机可
读介质中的一个或多个模块。一个或多个模块可操作以接收第一组数据和第二组数据,其
中,所述第一组数据与所述第二组数据相比包括更大量的数据项;处理所述第一组数据从
而将所述第一组数据格式化为第一组结构化数据;通过用于概括所述第一组结构化数据的
操作规则使用所述第一组结构化数据生成第一概要数据,并且将所述第一概要数据存储在
数据存储器中;处理所述第二组数据从而将所述第二组数据格式化为第二组结构化数据;
通过用于概括所述第一组结构化数据和所述第二组结构化数据的操作规则,基于所述第一
组结构化数据和所述第二组结构化数据生成第二概要数据;确定所述第一概要数据和所述
第二概要数据之间的差异;以及基于所述第一概要数据和所述第二概要数据之间的所述差
异更新所述数据存储器。
[0026] 大体上,一方面,所公开的主题的实施例可以包括一种用于生成一组数据的概要数据的方法。方法可以包括:在操作在计算系统的处理器上的输入模块处,接收第一组数据
和第二组数据,其中,所述第一组数据与所述第二组数据相比包括更大量的数据项;在所述
计算系统的第一输入处理模块处,处理所述第一组数据从而将所述第一组数据格式化为第
一组结构化数据;在所述计算系统的第一概要生成模块处,通过用于概括所述第一组结构
化数据的操作规则使用所述第一组结构化数据生成第一概要数据;将所述第一概要数据维
护在所述计算系统的数据存储器中;在所述计算系统的第二输入处理模块处,处理所述第
二组数据从而将所述第二组数据格式化为第二组结构化数据;在所述计算系统的第二概要
生成模块处,通过用于概括所述第一组结构化数据和所述第二组结构化数据的操作规则使
用所述第一组结构化数据和所述第二组结构化数据生成第二概要数据;在所述计算系统的
差异生成模块处,确定所述第一概要数据和所述第二概要数据之间的差异;以及由所述计
算系统基于所述第一概要数据和所述第二概要数据之间的所述差异更新所述数据存储器。
[0027] 大体上,一方面,所公开的主题的实施例可以包括一种有形包含在非瞬时计算机可读存储介质中的计算机程序产品。计算机程序产品包括可操作以引起数据处理系统执行
以下的指令:接收第一组数据和第二组数据,其中,所述第一组数据与所述第二组数据相比
包括更大量的数据项;处理所述第一组数据从而将所述第一组数据格式化为第一组结构化
数据;通过用于概括所述第一组结构化数据的操作规则使用所述第一组结构化数据生成第
一概要数据,并且将所述第一概要数据存储在数据存储器中;处理所述第二组数据从而将
所述第二组数据格式化为第二组结构化数据;通过用于概括所述第一组结构化数据和所述
第二组结构化数据的操作规则基于所述第一组结构化数据和所述第二组结构化数据生成
第二概要数据;确定所述第一概要数据和所述第二概要数据之间的差异;以及基于所述第
一概要数据和所述第二概要数据之间的所述差异更新所述数据存储器。
[0028] 在本文所公开的实施例的任意一个中,所述第二组数据包括实时数据提交,以及所述一个或多个模块可操作以响应于接收到所述第二组数据来处理所述第二组数据从而
将所述第二组数据格式化为所述第二组结构化数据。
[0029] 在本文所公开的实施例的任意一个中,计算系统、方法或计算机程序产品可以包括用于以下的模块、步骤或可执行指令:每隔第一时间间隔处理所述第一组数据从而将所
述第一组数据格式化为所述第一组结构化数据,所述第一时间间隔基本上比第二时间间隔
更长,每隔所述第二时间间隔所述第二组数据被格式化为所述第二组结构化数据。
[0030] 在本文所公开的实施例的任意一个中,所述第一概要数据和所述第二概要数据中的每一个都包括实体标识符和与所述实体标识符相关联的值,以及其中计算系统、方法或
计算机程序产品可以进一步包括用于以下的模块、步骤或可执行指令:通过以下来确定所
述第一概要数据和所述第二概要数据之间的差异:确定所述第一概要数据和所述第二概要
数据包括相同的实体标识符,以及比较在所述第一概要数据和所述第二概要数据中与所述
相同的实体标识符相关联的值。
[0031] 在本文所公开的实施例的任意一个中,计算系统、方法或计算机程序产品可以包括用于以下的模块、步骤或可执行指令:向其它被授权计算系统提供所述第一概要数据和
所述第二概要数据之间的所述差异。
[0032] 在本文所公开的实施例的任意一个中,计算系统、方法或计算机程序产品可以包括用于以下的模块、步骤或可执行指令:经由应用编程接口向其它被授权计算系统提供所
述差异。
[0033] 在本文所公开的实施例的任意一个中,计算系统、方法或计算机程序产品可以包括用于以下的模块、步骤或可执行指令:将所述差异作为文件提供给其它被授权计算系统。
[0034] 在本文所公开的实施例的任意一个中,计算系统、方法或计算机程序产品可以包括用于以下的模块、步骤或可执行指令:将至少所述第一组数据和所述第二组数据结合以
生成第三组数据;处理所述第三组数据从而基于用于格式化一组数据的新规则将所述第三
组数据格式化为第三组结构化数据;以及使用所述第三组结构化数据生成第三概要数据。
[0035] 在本文所公开的实施例的任意一个中,所述第一组数据和所述第三组数据的每一个都包括第一数据元素,以及其中所述第一数据元素与由第一实体标识符识别的所述第一
概要数据中的第一实体相关联,其中,所述第一数据元素与所述第三概要数据中的第二实
体相关联,以及其中计算系统、方法或计算机程序产品可以进一步包括用于以下的模块、步
骤或可执行指令:将所述第一实体标识符与所述第三概要数据中的所述第二实体相关联从
而使得在所述第三概要数据中所述第一数据元素维持其与所述第一实体标识符的关联。
[0036] 在本文所公开的实施例的任意一个中,所述第一组结构化数据包括数据项的分组(grouping),所述数据项的分组基于与所述数据项相关联的实体标识符。
[0037] 在本文所公开的实施例的任意一个中,计算系统包括在数据中心中的至少一个服务器。
[0038] 在本文所公开的实施例的任意一个中,数据存储器包括多个数据存储系统,所述多个数据存储系统中的每一个都与视图相关联,以及其中所述一个或多个模块可操作以响
应于查询、基于与所述查询相关联的视图来选择所述多个数据存储系统中的一个。
[0039] 在本文所公开的实施例的任意一个中,计算系统、方法或计算机程序产品可以包括用于以下的模块、步骤或可执行指令:识别在生成第二概要数据以后接收的第三组数据;
基于所述第三组数据、所述第一组结构化数据和所述第二组结构化数据通过用于概括所述
第一组结构化数据、所述第二组结构化数据和第三概要数据的操作规则生成所述第三概要
数据;确定所述第二概要数据和所述第三概要数据之间的差异;以及基于所述第二概要数
据和所述第三概要数据之间的所述差异更新所述数据存储器。

附图说明

[0040] 参考以下与附图一起考虑的详细描述可以更全面理解本公开的多种目标、特征和优点,在附图中,相似的参考编号识别相似元素。附图仅供演示目的并且不旨在限制所公开
的主题,所公开的主题的范围在下文的权利要求中记载。
[0041] 图1示出根据一些实施例的所公开的系统的通用处理框架;
[0042] 图2A-2C示出图1的部分的放大图;
[0043] 图3示出根据一些实施例的赶上(“Catchup”)过程。

具体实施方式

[0044] 传统的数据处理系统配置为要么批量处理输入数据要么实时处理输入数据。一方面,批量数据处理系统是有限制性的,因为批量数据处理不能考虑任何在批量数据处理期
间所接收的额外数据。另一方面,实时数据处理系统是有限制性的,因为实时系统不能扩
展。实时数据处理系统常常受处理基元数据类型和/或小量数据的限制。因此,希望通过将
批量数据处理系统和实时数据处理系统的益处结合到单个系统中来解决批量数据处理系
统和实时数据处理系统的限制。
[0045] 对于系统而言,很难一同提供实时处理和批量处理,因为用于实时处理和批量处理的数据和/或过程是迥然不同的。例如,在批量处理系统中,程序在直到整体数据处理完
成前都不能访问数据处理结果,然而在实时处理系统中,程序可以在数据处理期间访问处
理结果。
[0046] 所公开的数据处理设备、系统和方法能够解决在整合批量数据处理系统和实时处理系统中的挑战。
[0047] 所公开的系统的一些实施例可以配置为处理非结构化数据并且将非结构化数据转换到概要数据中。概要数据可以存储在一个或多个数据存储器中,包括例如一个或多个
数据存储设备(storage)和/或一个或多个数据库中、或者一个或多个搜索服务器中,并且
可以被格式化以及可选地被索引从而能够使用一个或多个数据存储器或一个或多个搜索
服务器来查询,或者能够由第三方用户使用应用编程接口(API)来查询。
[0048] 概要数据可以包括一个或多个唯一实体和至少一个关于这些实体的参数。关于实体的参数之一可以是在这些实体中具有唯一性的实体标识符。额外的参数描述实体的一些
属性,例如布尔值(例如餐馆A有代客泊车服务究竟是“真”还是“假”)、整数、字符串、一组字符、二进制数据(例如表示图像的字节)或这些类型的阵列或集合、或者其任意其它结合。
[0049] 所公开的系统的一些实施例可以配置为基于两种类型的数据输入来生成概要数据:批量数据输入和间歇数据输入。批量数据输入可以指随时间推移已经收集的大量数据。
在一些情况下,批量数据输入可以指所公开的系统在预确定时间期间中所接收的所有数
据,预确定时间期间可以很久。例如,批量数据输入可以包括在很长一段时间内从多个贡献
方或从网络爬虫接收的原始信息。在一些实施例中,可以在所公开的系统自身中维护批量
数据;在其它实施例中,可以经由通信接口从另一存储中心接收批量数据。间歇数据输入可
以包括被提供给所公开的系统的小量数据。间歇数据输入可以包括例如来自贡献方的实时
数据提交。
[0050] 所公开的系统的一些实施例可以配置为使用通用处理框架来处理这两种类型的数据输入。通用处理框架可以包括可以基本上实时地响应间歇数据输入(例如来自贡献方
的小的增量贡献)并且基于那些被考虑的贡献和在概要数据中来自批量系统的数据来反映
变化的实时系统。通用处理框架还可以包括可以处理批量数据输入的批量系统。批量系统
可以配置为将批量数据格式化为可用于进一步处理,并且使用被格式化的批量数据来生成
概要数据。
[0051] 在一些实施例中,批量处理系统配置为通过将批量数据输入中的非结构化数据格式化到结构化数据中来生成概要数据。于是,批量处理系统配置为对结构化数据中的元素
进行分组并且生成用于每一组的代表性标识符,也称为实体。批量系统于是可以生成用于
每一实体的标识符并且计算描述每一实体的参数值。
[0052] 例如,当大批量数据输入包括与在餐馆A处有代客泊车服务相关联的5个数据元素时,批量系统于是可以确定这5个数据元素属于同一实体(例如餐馆A),并且将与5个数据元
素相关联的信息合并。例如,如果3个数据元素指示餐馆A有代客泊车服务并且2个数据元素
指示餐馆A没有代客泊车服务,于是批量系统可以合并这5个元素并且指示针对实体餐馆A
的参数“代客泊车服务”为“真”。此合并过程在某些方面与在发明名称为“用于数据的协同
操作的过程和系统”、申请日为2009年9月15日的美国专利申请公布No.2011/0066605中所
公开的过程相似,该专利申请通过全文引用被包含在本文中。
[0053] 在一些实施例中,实体是系统选择跟踪的独特目标。例如,当系统接收关于每一物理餐馆(例如具有多个位置的连锁店将具有针对每一位置的实体)的评价作为数据输入时,
系统可以将每一物理餐馆考虑为单独的实体(即概要记录)。相似地,当来自特定品牌的牙
膏有3种规格并且每一种规则有4种口味时,系统可以维护针对该牙膏的12个不同实体。
[0054] 在一些实施例中,实时系统可以配置为在实时系统接收到来自贡献方的间歇数据输入时更新由批量系统生成的概要数据。例如,如果实时系统接收到来自贡献方的两个额
外数据输入,这两个额外数据输入都指示餐馆A没有代客泊车服务,那么实时系统可以更新
概要数据来指示用于实体“餐馆A”的参数“代客泊车服务”为“假”。
[0055] 在一些实施例中,实时系统可以配置为运用由批量系统生成的结构化数据。例如,当实时系统接收到来自贡献方的间歇数据输入时,实时系统可以将间歇数据输入与由批量
系统生成的结构化批量数据合并。以此方式,可以减少实时系统所需的计算量。
[0056] 在一些实施例中,批量系统可以配置为按照预确定周期来周期性运行。与实时系统相比,批量系统可以以较低频率操作,因为批量系统所需的计算量与实时系统所需的计
算量相比要大得多。例如,可以操作批量系统以便按计划更新系统,例如每小时、每周或每
月。实时系统可以比批量处理系统操作得更加频繁。例如,实时系统可以配置为在实时系统
接收到间歇数据输入时或者在接收短时间范围内(例如5秒或5分钟)缓存的输入时操作。批
量系统可以随时间推移用新情报和规则来更新,并且可以处理超出实时系统能力范围的新
数据。
[0057] 图1示出根据一些实施例的所公开的系统的通用处理框架。图2A-2C示出图1的部分的放大图。图1的顶部示出由实时数据系统执行的处理,而图1的底部示出由批量处理系
统执行的处理。
[0058] 数据生命周期
[0059] 所公开的数据处理系统的一个方面是数据生命周期。数据可以随着数据进展通过所公开的数据处理系统而被分类为以下类型中的一种:原始/未处理数据100(参见图2A)、
未处理(原始)输入350(参见图2B)、快速处理的输入150(参见图2B)、快速处理的概要190
(参见图2C)、完全处理的输入360(参见图2B)以及完全处理的概要760(参见图2C)。这些数
据可以存储在非瞬时性计算机可读介质中。非瞬时性计算机可读介质可以包括以下一个或
多个:硬盘、闪存存储装置、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)或者
其任意结合。
[0060] 原始/未处理数据
[0061] 原始/未处理数据100是按照原始/未处理形式的数据。例如,关于餐馆的网页也许在网页内容的某处宣称“有代客泊车服务”。在此情况下,原始数据是整个网页的拷贝。在所
公开的系统中,{“valet_parking”:true}输入可以例如来源于宣称“有代客泊车服务”的网
页。作为额外示例,系统可以包含餐馆的数据存储器,例如,具有关于餐馆的数据的数据存
储设备和/或具有关于餐馆的数据的数据库。未处理数据的示例可以包括:
[0062] ·在数据存储器中的餐馆互联网主页
[0063] ·出现在线上博客中的餐馆评价
[0064] ·由被雇佣来提供用于系统的数据的个人提供的餐馆评价
[0065] ·在数据存储器中的关于餐馆的线上文章
[0066] 在所公开的系统中,原始/未处理数据100可以被维护以用于重新处理(例如,原始数据可以按照周期间隔被存储从而使得它可以用于批量处理系统的新的运行)。这是有益
的,因为可以在稍后被开发出来的新规则可以能够在原始数据被重新处理时提取额外的输
入。例如,网站可以具有宣称“泊车员在停车时刮花了我的车”的文本。即使较早的评估网站
上的内容的运行未能形成任何关于代客泊车服务的输入,随后的运行可以提取输入
“valet_parking”:true。因为所公开的系统可以存储原始数据100以用于重新处理,所公开
的系统的批量处理可以针对原始数据100重新运行,并且理解较复杂陈述的新规则可以例
如在随后的运行中提取输入“valet_parking”:true。
[0067] 未处理(原始)输入
[0068] 未处理输入350表示在所公开的系统从贡献方、第三方系统、网页和/或任何其它适合的信息源接收到实体的参数时它们的原始参数值。例如,如果网页在网页内容的某处
陈述“有代客泊车服务”,该“有代客泊车服务”的陈述是未处理输入。同样,关于服装店的网
站(原始数据)可以含有陈述“打5折促销”(原始输入)。作为另一示例,来自贡献方的更新商
业地址的贡献可以含有“1801ave of stars,los angeles”。最初,当数据首次被提供时的
可用规则可能引起此输入被忽略,因为地址不够充分。然而,使用改进规则的随后的构造可
以将其改善为{“address”:”1801Avenue of the Stars”,”city”:”Los Angeles”,”
state”:”CA”,”zipcode”:”90067”}。
[0069] 未处理输入350可以例如存储在以下的一个或多个中:包括分布式文件系统的文件系统、例如关系数据库或非关系数据库(即nosql)的数据存储器。
[0070] 完全处理的输入及概要
[0071] 完全处理的输入360是在最近期的批量数据构造中已经被处理过的输入。例如,如果线上餐馆评价中含有原始输入“有代客泊车服务”,所公开的系统的批量数据构造可以提
取处理过的输入“valet_parking”:true。
[0072] 在一些实施例中,每一批量数据构造可以整体地替换先前一组完全处理的输入360。例如,假设所公开的系统具有针对仅一个称为“Joes”的餐馆的条目并且5个网站提供
关于该餐馆的事实。2个网站可能陈述其所供应的食物类型是“Chinese(中餐)”。一个网站
可能陈述是“Cantonese(粤菜)”。另2个网站可能说是“Italian(意大利菜)”。在此示例中,
完全处理的输入可以包含{“id”:”1”,“name”:”Joe's”,“cuisine”:”Chinese”,“source”:”website1”},{“id”:”1”,“name”:”Joe’s”,“cuisine”:”Chinese”,“source”:”website2”},{“id”:”1”,“name”:”Joe’s”,“cuisine”:”Cantonese”,“source”:”website3”},{“id”:”
1”,”name”:”Joe's”,“cuisine”:”Italian”,“source”:”website4”},{“id”:”1”,“name”:”Joe's”,“cuisine”:”Italian”,“source”:”website5”}.基于当前规则,完全处理的概要
760可以具有{“id”:”1”“, name”:”Joe’s”“,cuisine”:”Italian”},因为它同等地信任所有贡献并且“Italian”和“Chinese”是联系在一起的而“Cantonese”被当做独立的菜肴风味。
在此示例中,规则可以被改进为确定“Cantonese”是“Chinese”菜肴风味的一种类型,并且
还更特别地,当运行批量数据构造时产生如下完全处理的概要760:
[0073] {“id”:”1”,name”:”Joe's”,”cuisine”:”Chinese>Cantonese”}
[0074] 在所公开的系统中,在向快速处理的表格写新的增量信息期间,当包含完全处理的输入360和完全处理的概要760的整个表格被替换时,它们可以改变。
[0075] 快速处理的输入及概要
[0076] 在批量数据构造起始处,表示自先前的批量数据构造起始时起新计算的输入和概要的快速处理的输入150和快速处理的概要190可以被搁置或丢弃,并且可以在数据存储器
(例如数据库)中分配快速处理的输入150和快速处理的概要190中每一个的空版本。例如,
移动装置用户可能注意到“Joe’s”餐馆被错误归类为“Italian”。充当贡献方的该用户可以
通过她的移动装置上的软件提交改正,她的移动装置向公有应用编程接口(API)发送数据
(图1,130)。该贡献方的输入可以看上去如此{“id”:”1”,”cuisine”:”Chinese”}。当该输入被处理时,可以被保存到快速处理的输入150并且用于“Joes”的条目可以被重新概括。在此
示例中,针对“Joes”的新概要将会是{“id”:”1”,“name”:”Joe’s”,”cuisine”:”Chinese”},并且由于它与先前的完全处理的概要760不同,新概要将会被保存到快速处理的概要190。
在所公开的系统中,当确定针对实体的最新概要时,系统可以偏重于在快速处理的概要190
中检查最新概要,而非在只有在批量数据构造中才改变的完全处理的概要760中检查。
[0077] 批量处理及生命周期
[0078] 可以不时运行批量数据构造来将未处理数据和输入转换到完成的查看概要数据中。批量数据构造的输出是完全处理的输入360和完全处理的概要760。
[0079] 输入处理框
[0080] 在一些实施例中,输入处理模块145、720可以配置为执行以下一个或多个:提取过程、清理过程、规范化(canonicalization)过程、过滤过程以及验证过程,上述过程中的每
一个将在下文描述。
[0081] 提取
[0082] 提取步骤可以例如包括基于来自于结构化、准结构化和非结构化数据的匹配规则来选择用于参数的事实。例如,所公开的系统可以使用事实匹配规则“name:[NAME]”来提取
名称。在此示例中,提取步骤包括使用事实匹配规则“name:[NAME]”在例如记录:{“name”:”Mc’Donalds”}中选择名称“Mc’Donalds”。此外,在提取步骤中,系统可以使用例如
“***-***-****”的模式匹配规则来从例如“Tel:123-456-7890”的文本中选择电话号码
“123-456-7890”,其中,*符号表示通配符字符。作为额外的示例,提取步骤可以解释例如
“这个地方没有适合我的孩子们的高椅子”的原始文本从而创建采用如下形式的事实:
{“kid_friendly”:false}。所公开的系统可以通过例如使用先进自然语言处理和解析来解
释原始文本从而创建规则。
[0083] 清理
[0084] 清理步骤包括清理所提取的数据。清理所提取的数据可以包括移除不希望的字符或坏字符或实体参数的过程。例如,匹配规则“Phone:[PHONE_NUMBER]”的事实的提取可能
不正确地提取了例如“Phone:callnow!”的不正确信息,或者提取了例如“Phone:123-456-
7890click here”的多余信息。清理可以丢弃不正确的数据或移除不希望的多余数据。例
如,如果提取了“Phone:call now!”,清理步骤可以丢弃该数据,因为“Phone:call now!”对于电话号码来说是不正确数据。此外,如果提取了“Phone:123-456-7890click here”,清理
步骤可以丢弃“click here”,因为“click here”是多余的数据,它不是所提取的电话号码
的一部分。在所公开的系统中,不正确数据或多余数据可以通过例如使用2个规则而被丢弃
或移除,这2个规则例如事实匹配规则和模式匹配规则。例如,使用事实匹配规则“Phone:
[PHONE_NUMBER]”,所公开的系统可以提取例如“Phone:123-456-7890click here”的信息,
并且使用模式匹配规则“***-***-****”,系统可以确定“click here”是多余的数据并且在
清理步骤中将其移除。
[0085] 规范化
[0086] 规范化是指由规则驱动的、将多种形式数据转换到它们的优选或规范的表示的步骤。例如,一个贡献方可以描述电话号码为“123-456-7890”并且不同的贡献方可以提交
“(123)456-7890”。将数据转换成规范表示使其统一并且使得能够有更好的实体分辨度和
概括。所公开的系统可以通过例如使用多个模式匹配规则以及指定用于规范化表示的另一
模式来执行规范化。例如,使用模式匹配规则“***-***-****”和“(***)***-****”,前者指
定规范化表示,规范化步骤可以通过将输入“123-456-7890”和“(123)456-7890”两个都表
示为“123-456-7890”来使它们统一。
[0087] 过滤
[0088] 过滤是指由规则驱动的、拒绝并不一定不正确但是不满足一些希望的标准的数据的步骤。这可以包括拒绝不匹配特定类别或具有不充分置信度的输入。例如,科幻主题餐馆
可能做这样的广告:它“位于银河系中的行星地球上”。尽管此陈述是准确的,所公开的系统
的实施例例如可能不具有针对餐馆所在的行星和银河系的类别,这样,此示例中的过滤步
骤将拒绝输入“位于银河系中的行星地球上”。当然,在代替实施例中,所公开的系统可以具
有此类类别。作为一个额外的示例,在一个实施例中,所公开的系统可以例如设置针对来自
网站的信息的阈值为具有100次访问则被认为是可靠。在此示例中,如果仅被访问了15次的
网站包含陈述“这是最佳商店”,系统可以拒绝此输入,因为它不满足置信度规则。在其它实
施例中,所公开的系统可以使用其它规则用于确定置信度。
[0089] 验证
[0090] 验证是指由规则驱动的、基于不符合某些标准而拒绝数据的步骤。例如,经过规范化的电话号码域,其中,电话号码的位数比预期的有效电话号码(例如Phone:123)位数少,
则可能基于未能满足某些标准而拒绝该参数或整个输入。
[0091] 实时概括
[0092] 所公开的系统的实施例可以执行实施概括过程。参考图1和2,在所公开的系统的实施例中,快速概括过程模块160接收由输入处理模块145生成的快速处理的输入150和由
批量处理系统生成的完全处理的输入360。
[0093] 快速概括过程模块160可以配置为聚合并过滤快速处理的输入150和完全处理的输入360。例如,快速概括过程模块160可以接收关于代客泊车服务的快速处理的输入150和
完全处理的输入360。在此示例中,完全处理的输入360可以包括具有值“valet_parking”:
false的输入,并且快速处理的输入150可以包括具有值“valet_parking”:true的输入。快
速概括过程模块160可以配置为聚合并过滤快速处理的输入150和完全处理的输入360从而
创建快速处理的概要190。例如,经过过滤和处理,针对实体的快速处理的概要190可以是
“valet_parking”:true。
[0094] 在一些实施例中,快速概括过程模块160可以配置为维护并按照排序顺序来索引快速处理的输入150和完全处理的输入360中的数据,排序顺序至少部分基于实体标识符、
贡献方标识符或提供数据的用户账号、用来提取数据的技术、数据的源或引证和/或时间戳
中的一个或多个来确定。为此目的,创建连接或迭代器,来从快速处理的输入和完全处理的
输入二者中自具有所希望的实体标识符的首个输入开始起同时读取数据。在每一情况下,
迭代器基于快速处理的输入或完全处理的输入中具有较早时间戳的任意一个而前进。无论
何时上文列举的参数中除了时间戳以外的任意一个参数改变,就将先前的输入加入被考虑
的池中而忽略其它,由此允许系统有效地仅考虑来自给定用户的输入的最新版本、提取技
术和引证。
[0095] 比较差异(Diff)过程模块200可以配置为比较由快速概括过程模块160生成的快速处理的概要190和完全处理的概要760。例如,它可以比较具有值“valet_parking”:true
的快速处理的概要190和具有值“valet_parking”:false的完全处理的概要760。基于该比
较,比较差异过程模块200于是可以广播结果。例如,它可以广播来自于先前批量构造的完
全处理的概要770指示没有代客泊车服务,然而来自于自从先前批量数据构造的开始以来
新计算的输入和概要的快速处理的概要190指示有代客泊车服务。
[0096] 实时处理工作流
[0097] 参考图1和2,由箭头实时10所指示的,图的上部分一般地展示系统的实时组件。系统接收外部贡献100作为输入。外部贡献100包括来自贡献方的批量数据贡献、web文档和实
时提交。例如,系统可以接收例如整个网站或数据存储器的批量数据贡献、例如个体网页的
web文档以及例如网站上的评价的实时提交。
[0098] 外部贡献100的一个源是用户写入110。用户写入110可以包括例如来自贡献方在web表格上或移动装置上的直接输入。
[0099] 在一些实施例中,系统可以经由公有API模块130接收用户写入110。例如,用户写入110可以通过公开可访问端点(例如向公有API模块130提交的网站)或通过在网站或移动
装置上向公有API模块130提交的软件被接收。用户写入110可以包括附加于其上的针对贡
献方、来源和开发者的标识符以用于被考虑进概括中。
[0100] 例如用户写入110的输入可以具有已经包含在该输入中的实体标识符(例如entity_id)。实体标识符可以是字母和数字的字符串。在一些实施例中,实体标识符可以意
味着输入是对现有实体的更新。如果输入不具有标识符,系统可以使用解决过程模块120来
确定并分配被称为快速处理的标识符的临时标识符。解决过程模块120可以配置为向输入
分配实体标识符或者将记录的一个表示与另一表示匹配。这使得有可能将相似输入群集在
一起并且给那些引用同一实体的输入分配公共实体标识符。在许多情况下,输入具有不同
参数但引用同一实体。解决过程可以被用来比较输入、确定输入引用同一实体并且向那些
输入分配公共实体标识符。
[0101] 在一些情况下,解决过程模块120可以配置为分配标识符作为由以下方式生成的代理键:a)随机分配;b)将一个或多个输入参数串联(例如名称+地址);c)一个或多个输入
参数的一致性哈希(例如md5(名称+地址));或者d)如果充分相似的输入存在(例如新输入
的名称、值、电话与现有输入的名称、值、电话足够相似),则取现有输入的被分配的id,并且
当充分相似的输入不存在时生成新的代理键。
[0102] 当针对输入确定了快速处理的标识符时,内部API模块140可以从公有API模块130接收输入。在它被保存到存储器之前,可以按照原本输入的原始形式制作它的拷贝。原始拷
贝可以被保存到存储器以用于未处理输入350,从而使得稍后可以使用更新的软件或者经
过更昂贵的计算(包括执行实体标识符分配的软件)来批量重新处理它。
[0103] 此外,内部API模块140可以配置为与用于规则驱动适中(rules driven moderation)的编织(Stitch)过程模块155交互。用于规则驱动适中的编织过程模块155可
以配置为将匹配某标准的数据提交显示或提供给人类仲裁员或更昂贵的机器过程以用于
进一步评估。例如,新餐馆的所有者可能希望通过将生意从附近餐馆转移到他的餐馆来使
他的餐馆的生意兴旺。该餐馆所有者可能注册账号为所公开的系统的客户之一的贡献方,
并提交所有其它餐馆都已关闭的信息。系统于是可以确定从未与系统有过交互的新贡献方
在某一天报告若干本地商业已经关闭,引起系统中寻找这样模式的规则标识那些提交并将
其入队以用于由人类仲裁员审查。人类仲裁员于是可以确定商业实际上仍然营业并且拒绝
这些提交,并进一步将该贡献方加入黑名单从而使得额外的提交都将被忽略。
[0104] 与此同时,可以通过执行如上文所述的提取、清理、规范化和验证的软件处理原本原始输入,产生快速处理的输入150。在一些情况下,快速处理的输入150可以具有附随的快
速处理的标识符。如果快速处理的输入通过验证,它可以被保存到存储器以用于快速处理
的输入150,并且它可以在过程中前进到快速概括过程模块160。
[0105] 实时快速概括过程模块160可以配置为基本上实时地分析并结合用于实体的快速处理的输入150和完全处理的输入360。快速处理的输入150可以表示自从上次批量数据构
造过程以来新的实时输入。完全处理的输入360是从批量处理系统先前的批量过程生成的
输入。一起,它们包括针对每一实体的一组完整的输入。例如,实时快速概括过程模块160可
以接收关于代客泊车服务的快速处理的输入150和完全处理的输入360。在此示例中,完全
处理的输入150可以包括具有值“valet_parking”:false的输入,并且快速处理的输入360
可以包括具有“valet_parking”:true的输入。快速概括过程模块160于是可以聚合快速处
理的输入150和完全处理的输入360,并于是使用高置信度过滤器170和低置信度过滤器180
来过滤它们从而创建快速处理的概要190。例如,经过过滤和处理后,针对实体的快速处理
的概要190可以是“valet_parking”:true。
[0106] 快速处理的输入和完全处理的输入可以存储在数据存储器150、360中。数据存储器150、360可以由实体标识符(例如uuid,例如0e3a7515-44e0-42b6-b736-657b126313b5)
来分别群集。这可以允许当接收到新输入时快速进行重新概括,从而使得仅关于如下实体
的输入被处理:已经接收到用于该实体的新输入。快速处理的输入150和完全处理的输入
360可以按照排序顺序被存储,从而使得它促进流处理数据或促进跳过被确定为由如下输
入取代的输入:例如来自于同一提交方或引用相同引用的更新的提交。
[0107] 在一些实施例中,快速概括过程模块160可以同时从快速处理的输入数据存储器150和完全处理的输入数据存储器360读取输入以帮助仅选择在概括中需要考虑的输入。可
以使用视图(“view”)(例如具体实现视图)来表示或显示输入的概括。视图是根据一个或多
个规则的对输入的一种可能概括及实体的表示。一个或多个规则可以确定包括哪些实体、
针对每一实体包括哪些参数、执行何种索引优化以及针对每一实体计算什么额外的参数和
参数变量。在一些实施例中,由view_id唯一地识别视图。数据存储器经常跟踪系统表格中
的视图并且这些系统表格包含关于视图的元数据。在我们的例子中,视图被分配了标识符
并且该标识符用来从数据存储器中查找关于视图的元数据,例如参数的名称、它们的数据
类型、排序偏好、索引规则等。
[0108] 对于与向其分配了输入的数据集相关联的每一视图,可以执行快速概括过程。视图可以具有关于将要计算的参数、应用到那些参数的规则、针对概要实体的置信度阈值
170、180的不同规则以及其它软件规则和变形。每一快速概括过程可以产生针对每一视图
的快速处理的概要。每一快速处理的概要与从快速处理的概要数据存储器190或完全处理
的概要数据存储器760取回的最近概要相比较。如果快速处理的概要与先前版本不同,则新
的快速处理的概要被保存到快速处理的概要数据存储器190中,并且产生比较差异记录。比
较差异记录可以包含包括例如以下的一行数据:(1)其参数已经改变的实体的实体标识符,
以及(2)改变的参数。比较差异记录可以包含与先前概要不同的新概要或参数的整体拷贝。
比较差异记录被保存到比较差异数据存储器中并且在网络上发布给监听比较差异记录并
更新概要数据的具体实现(maerialization)的过程。
[0109] 以下是在一个可能的实施例中比较差异记录的示例:
[0110] {"timestamp":1363321439041,"payload":("region":"TX","geocode_level":"front_door","tel":"(281)431-7441","placerank":90,"category_labels":[["
Retail","Nurseries and Garden Centers"]],"search_tags":["Houston","Grass","
South"],"name":"Houston Grass","longitude":"-95.464476","fax":"(281)431-
8178","website":"http://houstonturfgrass.com","postcode":"77583","country":"
us","category_ids":[164],"category":"Shopping>Nurseries&Garden Centers","
address":"213McKeever Rd","locality":"Rosharon","latitude":"29.507771"},"
type":"update","factual_id":"399895e6-0879-4ed8-ba25-98fc3e0c983f","changed":
[“address",”tel”]}。在此示例中,比较差异记录指示Houston Grass的地址和电话已经改
变,这可以导致对具体实现的数据存储器的每一拷贝或用于该实体的索引行进行更新。
[0111] 所公开的系统的实施例可以包括具体实现的数据存储器或索引510、520。具体实现的数据存储器或索引510、520是可搜索的关系数据存储器或非关系数据存储器或搜索索
引服务器。在一些实施例中,具体实现的数据存储器或索引510、520可以与具体应用领域或
具体数据服务相关联。所公开的系统可以可互换地使用诸如PostgreSQL(关系)和Apache 
Solr(非关系,搜索服务器)的数据存储系统,有时针对相同的数据,并且能够选择最佳地服
务于所请求的查询类型的一个。例如,所公开的系统可以接收针对与特定视图或数据类型
相关联的数据的查询。作为响应,所公开的系统可以确定查询类型、实体类型、发送查询的
应用或装置、与实体相关联的应用领域或与查询相关联的任何有关信息中的一个或多个,
从而确定用来响应查询的数据存储系统之一或这样的系统的结合。于是,所公开的系统可
以使用所确定的数据存储系统之一或系统的结合来响应查询。
[0112] 批量处理工作流
[0113] 参考图1和2,如箭头批量20所指示的,图的下部一般地示出系统的批量处理组件。
[0114] 批量处理工作流可以接收大量上传和批量贡献700,例如
[0115] ·原始输入700
[0116] ·全球唯一标识符(uuid)附件数据
[0117] ·消息摘要5(md5)附件数据
[0118] 此外,批量处理工作流使用先前处理的数据(例如先前的完全处理的输入和先前的快速处理的输入)以用于例如UUID保留和比较差异生成的步骤。这些步骤在下文中描述。
[0119] 预批量构造
[0120] 在发起批量构造过程之前,可以向例如Hadoop分布式文件系统(HDFS)的数据存储器710提供实时处理的数据,由此它们可以被用作批量构造的输入。当发起此步骤时,可以
记录时间,该时间可以在赶上(Catchup)阶段期间使用。
[0121] 特别地,可以向数据存储器710提供以下数据:
[0122] ·快速处理的概要190–自从最后一次批量数据构造以来已经被创建的概要。这可以包括全新的概要、被删除的概要以及其中某些域被更新的概要
[0123] ·未处理输入350–自从最后一次批量数据构造以来已经被写到此数据集的原始输入
[0124] ·新uuid映射–针对自从最后一次批量运行以来生成的新概要的从输入id到实体id的映射
[0125] 在一些实施例中,除了UUID保留(在下文描述)以外,没有使用来自于先前版本数据的快速处理的输入。在这样的实施例中,这是通过改为使用未处理输入350来解决的。这
确保输入被完全重新处理。
[0126] 批量构造
[0127] 批量构造是可以处理数据并将数据为加载到制造做好准备的过程。
[0128] 输入处理
[0129] 原始输入700和未处理输入350从HDFS 710馈入到输入处理模块720中。提取步骤可以不保留关于数据先前曾被提取的任何概念。可以在原始输入700上执行提取。
[0130] 提取步骤可以使用如上文所描述的并且在下文示例中示出的规范化、清理、填入值以及过滤输入的规则框架。
[0131] ·123 main street=>123 Main St.
[0132] ·city:Los Angeles=>city:Los Angeles,state:CA
[0133] 提取步骤还可以整理出那些输入应当被附加并且那些输入应当被批量解决。
[0134] 提取步骤可选地可以确定应当由人、计算功能强大的过程或第三方API来审核一些输入。提取步骤可以在输入元数据中设置适中动作标记并直接或经由API将其插入编织
数据存储器中,编织数据存储器用来协调开销相对很大的过程,例如适中。
[0135] 批量解决:
[0136] 可以通过解决过程模块722来执行的批量解决可以取所提取的输入,并基于它们是否表示同一实体来将它们进行分组,并向每一组输入分配唯一id。例如,批量解决可以分
配通过以下生成的唯一id:a)随机分配;b)将来自于一组输入的一个或多个输入值串联(例
如名称+地址);c)来自于一组输入的一个或多个值的哈希(例如md5(名称+地址));或者d)
如果充分相似的输入存在(例如新输入的名称、值、电话与现有输入的名称、值、电话足够相
似),则取现有一组输入的被分配的id。
[0137] UUID保留:
[0138] 在批量解决模块722完成其过程之后,可以发起UUID保留模块725。UUID保留模块725的目标可以包括修改与实体相关联的标识符(例如entity_id),从而使得:即使当批量
过程重新处理(例如跨多个批量运行)输入数据时,例如埃菲尔铁塔的单个实体可以持有同
一实体标识符。这使得即使当与实体相关联的数据被多次重新处理时,实体能够与同一标
识符相关联。
[0139] 这是通过例如在先前完全处理的输入360中读取、并且生成包含input_id和entity_id之间的映射的映射文件或表格来达成的。input_id是向来自于单个输入数据贡
献的每一组参数分配的唯一标识符。例如,从法国洗衣店的主页上抓取的所有参数,例如名
称、地址、电话号码,构成一个输入数据贡献。许多其它网站和贡献方还可以提供描述法国
洗衣店的输入数据贡献。这些输入数据贡献的每一个具有它自己的input_id,该input_id
将它从其它输入数据贡献中唯一地识别出来。input_id可以包括输入数据贡献的消息摘要
5(md5)哈希。反过来,entity_id是向所有输入数据贡献和法国洗衣店的概要记录分配的标
识符(目前是UUID)。
[0140] 在一些实施例中,从input_id到entity_id的映射可以与针对新写的概要的映射相结合。例如,在完全处理的输入和快速处理的输入的每一个输入中都具有唯一识别原本
未处理输入的input_id以及由解决过程模块120确定的、表示与完全处理的输入和快速处
理的输入相关联的实体的entity_id。使用从input_id到entity_id的映射,input_id可以
用来将原本的entity_id分配给在同一组中的所有输入数据项。
[0141] 在一些实施例中,UUID保留的示例可以是如下:
[0142] Mapping:
[0143]       input_id_0,original_entity_id
[0144] Input Set:
[0145]       input_id_0,new_entity_id,data
[0146]       input_id_1,new_entity_id,data
[0147]       input_id_2,new_entity_id,data
[0148] 在该示例中,在先前的批量构造中,input_id_0具有实体id“original_entity_id”。在当前的批量构造中,由于样本输入组包含具有input id:input_id_0的输入,所公开
的系统可以映射输入组中的所有输入到original_entity_id。这样,在该示例中,最终结果
将会是如下
[0149] End Result:
[0150] input_id_0,oridinal_entity_id,data
[0151] input_id_1,original_entity_id,data
[0152] input_id_2,original_entity_id,data
[0153] UUID保留模块725的输出可以包含被分组的一组输入,这些输入具有与其在先前批量运行中所具有的entity_id相同的entity_id,还保留在批量运行之间生成的任何
entity_id。如上文所述,UUID保留模块725可以跨批量构造对同一实体保留相同的UUID。
[0154] 在一些情况下,取决于批量解决的结果,实体可以被合并或拆分。UUID保留模块725可以有效地指定如何处理拆分和合并情况。例如,在合并情况下,可以倾向于使用具有
更大数量输入的entity_id。在拆分情况下,可以将entity_id分配给具有更大数量输入的
输入组,并且生成用于形成新概要的输入群集的新id。可以取决于数据集和希望的结果来
定制此行为。
[0155] 数据附件
[0156] 在UUID保留之后,数据附件模块727可以执行数据附件过程。数据附件过程的目的可以是附加如下输入:(1)无法解决的;(2)从概要导出的;(3)从输入导出的;或者(4)针对
具有充分置信度、关于特定entity_id(例如贡献方编辑为特定entity_id)的输入或具有关
于特定输入的地理代码信息的输入。
[0157] 数据附件可以是基于entity_id或input_id。例如,数据附件模块727可以配置为当源输入具有与由UUID保留生成的一组输入的entity_id相同的entity_id时,将源输入附
加(或结合)到该组输入。作为另一示例,数据附件模块727可以配置为当源输入与该组输入
的父input_id相同的父input_id相关联时,附加(或结合)源输入,其中,父input id指输入
的唯一标识符,源输入应当被附加到该标识符。通过以下实施例来示出这些示例。
[0158] 在一些实施例中,Entity_ID数据附件的示例可以是如下:
[0159] Attachment Data:
[0160] input_id_0,entity_id_0,data
[0161] Input Set:
[0162] input_id_1,entity_id_0,data
[0163] input_id_2,entity_id_0,data
[0164] input_id_3,entity_id_0,data
[0165] 在此示例中,由于样本输入组和源数据具有相同的entity_id:entity_id_0,附件数据被加到样本输入组。
[0166] End Result:
[0167] input_id_0,entity_id_0,data
[0168] input_id_1,entity_id_0,data
[0169] input_id_2,entity_id_0,data
[0170] input_id_3,entity_id_0,data
[0171] 在一些实施例中,Input_ID数据附件的示例可以是如下:
[0172] Attachment Data:
[0173] input_id_0,(no entity id),parent_input_id:input_id_1,data
[0174] Input Set:
[0175] input_id_1,entity_id_0,data
[0176] input_id_2,entity_id_0,data
[0177] input_id_3,entity_id_0,data
[0178] 在此示例中,由于样本输入组含有与源数据的父input id匹配的输入,附件数据被加到样本输入组。
[0179] End Result:
[0180] input_id_0,entity_id_0,data
[0181] niput_id_1,entity_id_0,data
[0182] input_id_2,entity_id_0,data
[0183] input_id_3,entity_id_0,data
[0184] 扩展参数组提取
[0185] 扩展参数组提取是由扩展参数模块728执行的额外的提取过程。扩展参数模块728。扩展参数模块728可以配置为对某些输入运行提取从而提取“扩展参数组”。扩展参数
组可以不是核心参数组的一部分,但是可以包含关于特定视图的信息。例如,“vegan(素
食)”是关于餐馆视图的参数而不是关于医生视图的参数。
[0186] 在一些实施例中,可以在规则框架中编写规则,规则框架确定一组输入是否被重新提取以用于扩展参数。例如,如果一组输入具有带有类别“餐馆”的单个输入,则在该组输
入中的所有输入可以被重新提取以用于关于餐馆的扩展参数。
[0187] 扩展参数模块728的输出包括最终输入729。最终输入可以存储在完全处理的输入360存储器中,完全处理的输入360存储器可以将最终输入向快速概括模块160中继。
[0188] 概括
[0189] 概括模块730配置为执行概括过程。概括过程包括这样的过程:可以由该过程生成表示同一实体的一组输入的最终表示。概括模块730可以使用规则框架来生成基于最终输
入729的概要。每一数据集可以具有多个视图,包括副作用(side-effect)视图。每一组输入
可以生成多个视图概要。从同一组输入生成的概要中的每一个具有相同的entity_id。
[0190] 副作用视图包括新的视图(例如一组概要实体),其不具有与针对给定输入的entity id的一对一关系。副作用视图可以生成为其它视图及其输入的副产品,而非直接从
相关联的实体输入产生概要。副作用视图允许概括模块730提供来自于单个数据输入的任
意数量的概要记录(例如任意数量的有关实体)。一个这样的示例是斑马线(“Crosswalk”),
其为将entity_id链接到特定输入源的视图。例如,副作用视图创建过程可以确定输入数据
是否匹配规则,例如“是我们在斑马线中跟踪的命名空间”(例如因为它具有类似
webname.com/[some_place_id]的url),并且当存在匹配时,副作用视图创建过程可以创建
例如具有{“namespace”:”webname”“, id”:”[some_place_id]”“,factual_id”:”[id_of_referenced_entity]”}的新实体。由此,即使输入数据已经与实体相关联,副作用视图创建
过程可以基于由副作用视图创建过程维护的规则来生成与输入数据相关联的额外实体。
[0191] 在概括730之后,可以使用如上文所述的高置信度过滤器740和低置信度过滤器750来过滤结果,并且将结果存储为完全处理的概要760。
[0192] 数据存储格式生成过程
[0193] 在此过程中,构造完全处理的输入360和完全处理的概要760。完全处理的输入360可以包括针对给定数据集的所有输入并且可以按照如下方式来组织完全处理的输入360:
在该方式中entity_id查找和概括是有效的。完全处理的概要760可以包含针对在给定数据
集中所有视图的所有概要记录,按照如下方式来组织完全处理的概要760:在该方式中
entity_id和view_id查找是有效的。这些文件可以在激活(“MakeLive”)步骤期间大批量加
载到数据存储器中。这些步骤的输出由图1的729、740和750表示。
[0194] 比较差异生成
[0195] 比较差异生成模块770可以配置为生成所有包括当前批量运行和先前实时更新的数据集之间的差异的“比较差异”记录,并且将它们输出到比较差异API下载伙伴(“Diff 
API to Download Partners”)500,其允许被授权的伙伴从系统下载比较差异记录。每个这
样的记录可以被称为“比较差异”(“diff”)。在上文中描述了特定的比较差异类型。可以通
过比较每一个针对视图的概要和针对该视图的概要的先前版本来生成比较差异。可以针对
用于每一个概要的每一视图来生成比较差异。当前概要可以与先前完全处理的概要760和
先前快速处理的概要190表格相比较。同一比较差异生成机制可以用来生成针对索引510、
520的比较差异,并且经由比较差异API 500提供用于第三方的比较差异。
[0196] 比较差异还被写到数据存储格式,其允许基于数据和entity_id的有效查找。
[0197] 具体实现构造(“Materialization Build”)
[0198] 具体实现构造模块780配置为产生为服务其它计算系统(例如数据存储器)做好准备了的输出格式。例如,具体实现构造模块780可以配置为构造允许搜索输入的反向索引
(例如数据存储器)。在一些实施例中,具体实现构造模块780可以配置为基于每视图来构造
具体实现。在其它实施例中,具体实现构造模块780可以配置为构造包括多个视图的具体实
现。
[0199] 在一些实施例中,反向索引具体实现的简化示例可以包括以下:
[0200] Sample Data:
[0201] doc_id_0,entity_id_0,view_id,Business,San Diego,CA
[0202] doc_id_1,entity_id_1,view_id,Business,San Francisco,CA Index:
[0203] entity_id_0:{doc_id_0}
[0204] entity_id_1:{doc_id_1}
[0205] Business:{doc_id_0,doc_id_1}
[0206] San:{doc_id_0,doc_id_1}
[0207] Diego:{doc_id_0}
[0208] Francisoc:{doc_id_1}
[0209] CA:{doc_id_0,doc_id_1}
[0210] 使用示例中的简化索引,数据可以是可容易地由关键字或其它参数搜索。例如,搜索“Diego(地亚哥)”将得到用于此示例中的doc_id_0和doc_id_1的概要。
[0211] 如果每具体实现有多个视图,view_id可以用作用于搜索的额外关键字过滤器。
[0212] 在一些实施例中,每一具体实现的数据存储器可以与特定应用领域、特定服务或特定视图相关联。因此,当系统接收到针对数据的查询时,系统可以基于与查询和/或所请
求的数据相关联的特定应用领域、特定服务和/或特定视图来确定具体实现的数据存储器
中的一个或多个来服务于该查询。
[0213] 批量处理激活(Batch Processing MakeLive)
[0214] 激活是使得批量构造投产的过程。激活过程可以通过数据存储加载、赶上和新具体实现通知来完成。在激活过程完成之后,所有API请求可以使用新批量构造的数据。
[0215] 数据存储加载
[0216] 当批量数据构造通过所有需要的回归和其它质量保证测试之后,可以使用用于完全处理的输入360、完全处理的概要760、快速处理的输入150以及快速处理的概要190的新
版本号来创建数据存储器中的新表格。数据存储格式文件(完全处理的输入360、完全处理
的概要760)可以被加载到它们各自的新表格中。比较差异200/700可以被增补到现有的比
较差异表中。
[0217] 在图1中,实时处理可以指当数据存储加载完成时通过数据存储器-ap i-服务器新构造的完全处理的输入360和完全处理的概要760。这可以通过改变完全处理的输入360
和完全处理的概要760的表的指针来实现,从而使得更新的表对于实时处理是可见的,并且
更早的引用对于实时处理不再可见。
[0218] 在图1中从729向360的转移示出完全处理的输入360的加载的示例。在图1中从740、750向760的转移示出完全处理的概要760的加载的示例。
[0219] 赶上阶段
[0220] 在当批量运行开始时和当赶上阶段首次发起时之间的这段时间期间,数据存储器可能已经取得了在我们的批量构造步骤期间没有被处理的额外的实时写入。实时写入可以
指任何已经实时接收到的并且已经生成快速处理的输入的写入。当批量构造步骤完成时,
由此创建新的批量构造的数据集,赶上阶段可以基于这些新的实时写入来更新维护在加了
索引的数据存储器510、520或比较差异API下载伙伴500中的新的批量构造的数据集,从而
使得新的批量构造的数据集与额外的实时写入保持同步。
[0221] 图3示出根据一些实施例的赶上过程。要完成赶上过程,来自于先前版本数据集的快速处理的输入810可以每一个都被复制到新的快速处理的输入820中,所述复制是基于那
些输入的时间戳是否晚于批量运行发起时的时间戳。特别地,快速处理的输入810中的每一
输入可以被增加到新的快速处理的输入表的、具有相同entity_id(如果存在)的新的快速
处理的输入820中。如果在新的快速处理的输入表中不存在相同entity_id,那么可以创建
针对该entity_id的全新的输入组。针对每一个具有额外输入的entity_id,可以针对所有
视图执行重新概括830。如果所生成的概要与来自于完全处理的概要的输入不同,则向比较
差异表840写入比较差异。接下来,使用任何新的比较差异840来更新具体实现880。
[0222] 新的具体实现数据存储通知
[0223] 用于将批量构造的数据集制作成准备投产的数据集的最终步骤可以包括用来启用完全处理的输入表、完全处理的概要表、快速处理的输入表以及快速处理的概要表的过
程。可以清除标志并且可以更新概要具体实现版本将其指向新构造的版本。此过程可以使
用通过最新批量构造而构造的最新版本具体实现来改变来自于先前版本的510和520的指
针。
[0224] 在预批量构造步骤处由实时工作流提供的未处理输入可以被复制到未处理输入350,从而使得它们可以由下一次批量数据构造来处理。可以去掉未处理输入350中的重复
项来防止重复条目。
[0225] 经过这些步骤之后,实时数据处理工作流可以处理所有对数据的更新,直至下一次计划的批量数据构造。
[0226] 所公开系统的实施例可以用在多种应用中。例如,所公开系统的实施例可以用来收集和概括来自于多种应用领域的数据,例如社交网络、在线广告、搜索引擎、医疗服务、媒
体服务、大众消费品、视频游戏、支持团体或者任何其它应用领域,从这些应用领域中生成
和维护大量数据。
[0227] 可执行代码实施例
[0228] 所公开系统的实施例可以构建在包括可执行代码的逻辑或模块上。可执行代码可以存储在一个或多个存储装置中。照此,逻辑不必位于特定装置上。此外,在本文所公开的
系统中,逻辑或模块可以是位于一个或多个装置中的多个可执行代码。例如,响应输入用于
访问和取回存储在数据存储器的一个或多个单元中的数据的访问逻辑可以是在应用服务
器上的一个可执行代码。在代替实施例中,在一个或多个应用服务器上存在这样的访问逻
辑。在另一些实施例中,在一个或多个应用服务器和系统中的其它装置上存在这样的访问
逻辑,其它装置包括但不限于“网关”概要数据服务器和后台数据服务器。本文所公开的其
它逻辑还可以是位于协作数据系统以内的一个或多个装置上的一个或多个可执行代码。
[0229] 在某些实施例中,所公开的系统包括一个或多个应用服务器和一个或多个概要数据服务器以及一个或多个后台数据服务器。服务器包括存储本文所公开的逻辑的存储器。
在特定实施例中,一个或多个应用服务器存储执行本文所公开的任务所必须的逻辑。在其
它实施例中,概要服务器存储本文所公开的任务所必须的逻辑。在其它实施例中,后台服务
器存储本文所公开的任务所必须的逻辑。
[0230] 在某些实施例中,客户端web浏览器向一个或多个应用服务器发出请求。替代地,所公开的系统包括客户端web浏览器向其发出请求的一个或多个概要或后台数据服务器。
[0231] 在示例性实施例中,一个或多个应用服务器接收来自于客户端web浏览器针对特定数据或表的请求。基于这些请求,一个或多个应用服务器呼叫一个或多个数据存储服务
器来请求来自于单元或表的概要或详细数据。当做出提交新数据输入的请求时,一个或多
个应用服务器也会呼叫一个或多个数据存储服务器。一个或多个应用服务器从一个或多个
概要服务器接收数据,并且一个或多个应用服务器生成HTML和JavaScript对象来传回给客
户端web浏览器。代替地,一个或多个应用服务器生成XML或JSON来通过API传递对象。
[0232] 在一个实施例中,数据存储服务器基于涉及数据存储服务器集群和后台数据服务器集群的架构。但是,注意,系统可以包括单个概要服务器和后台数据服务器。在该实施例
中,采用概要数据服务器阵列来从后台数据服务器请求那些经过概括的数据点的概要数据
和参数(置信度、计数等)。概要数据服务器阵列还缓存那些概要数据和概要参数从而使得
可以更快访问那些概要数据而无需向后台数据服务器发出额外请求。
[0233] 本系统和过程依赖于存储在存储装置中的可执行代码(即逻辑)。能够存储逻辑的存储装置是现有技术。存储装置包括存储媒体,例如计算机硬盘、冗余磁盘阵列(“RAID”)、
随机存取存储器(“RAM”)以及光盘驱动器。通用存储装置在现有技术中是众所周知的(例如
美国专利No.7,552,368,其描述常规半导体存储装置并且通过引用被包含在本文中的那些
公开)。
[0234] 其它实施例也是在所公开的主题的范围和精神以内。
[0235] 本文所公开的主题可以实现在数字电子电路中,或实现在计算机软件、固件或硬件中,包括在本说明书中所公开的结构性部件及其结构性等价物,或者它们的结合。本文所
描述的主题可以实现为一个或多个计算机程序产品,例如有形地包含在信息载体中(例如
在机器可读存储装置中)或包含在传播信号中的一个或多个计算机程序,以用于由数据处
理设备(例如可编程处理器、计算机或多个计算机)执行或者用来控制数据处理设备的操
作。计算机程序(也称为程序、软件、软件应用或代码)可以用任何形式的编程语言来编写,
包括汇编或解释语言,并且它可以采用任何形式来部署,包括独立程序或作为模块、组件、
子例程或其它适于在计算环境中使用的单元。计算机程序并不必然对应文件。程序可以存
储在载有其它程序或数据的文件的一部分中、存储在专用于所考虑的程序的单个文件中、
或者存储在多个协作文件中(例如存储一个或多个模块、子程序或部分代码的文件)。计算
机程序可以被部署成在一个计算机上执行或在位于一个场所的多个计算机上执行,或分布
跨多个场所并且通过通信网络互连。
[0236] 本说明书中所描述的过程和逻辑流,包括本文所描述的主题的方法步骤,可以由一个或多个可编程处理器执行,这些处理器执行一个或多个计算机程序从而通过操作输入
数据和生成输出来执行功能或本文所描述的主题。过程和逻辑流也可以由专用逻辑电路来
执行,并且本文所描述的主题的设备可以实现为专用逻辑电路,专用逻辑电路例如FPGA(现
场可编程门阵列)或ASIC(专用集成电路)。
[0237] 适于执行计算机程序的处理器包括,例如,通用微处理器和专用微处理器,以及任何的任意类型的数字计算机的一个或多个处理器。一般来说,处理器将从只读存储器或随
机存取存储器或这两者接收指令和数据。计算机的必要元件是用于执行指令的处理器和用
于存储指令和数据的一个或多个存储装置。一般来说,计算机还将包括用于存储数据的一
个或多个大容量存储装置、或者与用于存储数据的一个或多个大容量存储装置操作性耦
合,来从其接收数据或向其传送数据或两者,大容量存储装置例如磁盘、磁-光盘或光盘。适
于包含计算机程序指令和数据的信息载体包括所有形式的非易失性存储器,包括例如半导
体存储装置(例如EPROM、EEPROM和闪存存储装置)、磁盘(例如内部硬盘或移动硬盘)、磁-光
盘以及光盘(例如CD和DVD盘)。处理器和存储器可以由专用逻辑电路来补充或包含在专用
逻辑电路中。
[0238] 要提供与用户的交互,本文所描述的主题可以实现在具有播放装置的计算机上,播放装置例如用于向用户显示信息的CRT(阴极射线管)或LCD(液晶显示)监视器和键盘以
及指向装置(例如鼠标或轨迹球),用户通过这些可以向计算机提供输入。其它类型的装置
也可以用来提供与用户的交互。例如,提供给用户的反馈可以是任何形式的感官反馈(例如
视觉反馈、听觉反馈或触觉反馈),并且来自于用户的输入可以采用任何形式被接收,包括
声学、语音或触觉输入。
[0239] 本文所描述的技术可以使用一个或多个模块来实现。如本文中所使用的,术语“模块”指计算软件、固件、硬件和/或其多种结合。但是,至少模块不被解释为不是实现在硬件、
固件上的软件或不是记录在非瞬时处理器可读记录存储介质中。确实,“模块”是被解释为
包括至少一些物理的、非瞬时硬件,例如处理器或计算机的一部分。两个不同的模块可以共
享相同的物理硬件(例如两个不同模块可以使用同一处理器和网口)。本文所描述的模块可
以结合、集成、分离和/或复制从而支持多种应用。而且,本文所描述的在特定模块处执行的
功能可以在一个或多个其它模块处执行和/或由一个或多个其它装置执行,而非在该特定
模块处执行的功能,或者是增加在在该特定模块处执行的功能上。此外,模块可以跨多个装
置和/或其它本地组件或彼此远离的组件来实现。而且,模块可以从一个装置中移除并且增
加到另一装置上,和/或可以被包含在两个装置中。
[0240] 本文所描述的主题可以实现在包括后台组件(例如数据服务器)、中间件组件(例如应用服务器)、或前端组件(例如具有图形用户接口或web浏览器的客户端计算机,用户可
以通过图形用户接口或web浏览器与本文所描述的主题交互)、或者这些后台、中间件和前
端组件的任意结合的计算系统中。系统的组件可以通过任意形式或介质的数字数据通信
(例如通信网络)互连。通信网络的示例包括本地网络(“LAN”)和例如互联网的广域网络
(“WAN”)。
[0241] 本申请全文中所用的术语“一”或“一个”可以被定义为一个或多于一个。而且,例如“至少一个”和“一个或多个”这样的介绍性短语的使用不应被理解成暗示由不定冠词
“一”或“一个”引入另一元素将相对应的元素限制到仅为一个该元素。对于定冠词的使用也
是如此。
[0242] 要理解的是,所公开的主题不受其到在下文中记载的或在附图中示出的含义细节和组件安排的应用所限制。所公开的主题能够是其它实施例并且能够以多种方式被实践和
执行。而且,要理解的是,本文所采用的措辞和术语是出于描述目的并且不应当被视为限
制。
[0243] 如此,本领域技术人员将了解,本公开所基于的理念可以容易被用作用于设计其它结构、方法和系统的基础,这些其它结构、方法和系统用于执行所公开的主题的若干目
的。因此,重要的是,权利要求被视为包括这些等效含义,只要它们不偏离所公开的主题的
精神和范围。
[0244] 尽管已经在上文实例性实施例中描述和示出了所公开的主题,但是要理解的是,本公开仅仅是示例,并且可以对所公开的主题的实现细节作出许多改变而不偏离所公开的
主题的精神和范围。