CN109564577A - 对数据实例的高效去规范化 - Google Patents
对数据实例的高效去规范化 Download PDFInfo
- Publication number
- CN109564577A CN109564577A CN201780049045.XA CN201780049045A CN109564577A CN 109564577 A CN109564577 A CN 109564577A CN 201780049045 A CN201780049045 A CN 201780049045A CN 109564577 A CN109564577 A CN 109564577A
- Authority
- CN
- China
- Prior art keywords
- poi
- sub
- data
- data instance
- instance
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
- G06F16/9535—Search customisation based on user profiles and personalisation
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本文描述了用于对数据实例进行去规范化的技术。用于数据实例的模式被嵌入有指示如何执行去规范化的注释。基于这些注释,可以针对每个数据实例生成一个或多个子每对象索引(“子POI”)并存储这些子POI。子POI可以包括包含来自数据实例的数据的目标子POI,并且如果该数据实例依赖于另一数据实例,则子POI还包括包含来自该另一数据实例的数据的至少一个源子POI。可以通过识别与存储装置中与经更新的数据实例相关的子POI、并根据对数据实例的更新来更新相关子POI来执行数据实例更新。可以将子POI发送到索引引擎以生成用于搜索引擎的索引,以促进对数据实例的搜索。
Description
背景技术
随着信息变得越来越多的跨多个***连接,能够从这些多个***快速收集数据以支持各种场景(例如对搜索查询进行响应)是有益的。另一方面,这些***中可用的大量数据可以使对数据进行更新以及保持数据一致性的任务非常困难。为了解决这种问题,数据通常在存储在数据存储装置中时被规范化。这种规范化过程对数据存储装置的属性和关系进行组织,以减少甚至消除所存储数据中的数据冗余。
对规范化数据进行更新变得相对容易,因为数据存储在一个位置,并且更新仅需要执行一次。然而,查询规范化数据变得耗时,因为搜索通常涉及联接多个表,这可能在计算上非常昂贵,特别是在存在大量这种联接步骤的情况下。例如,用户可能提交针对有特定姓氏的作者所撰写的书籍的查询。在规范化数据模型中,书籍数据可以存储在与存储作者数据的表分开的表中。书籍数据可能具有对其相应作者的引用,但有关作者的详细信息(例如其姓氏)存储在作者表中。为了对搜索查询进行响应,必须联接书籍表和作者表以便确定每本书籍的作者的姓氏。
为了减少搜索时间和对数据执行的操作数量,可以对规范化数据进行去规范化(demormalize)以引入一些冗余信息以便支持某些场景。例如,在上面的示例中,可以对书籍数据去规范化以预先包括来自作者表的作者的姓氏。随后可以针对书籍表构建基于作者姓氏的索引,以使得在接收到查询时,可以通过查找索引来快速识别结果,而无需执行联接操作。
然而,数据去规范化通常是手动执行的并且经常由执行数据更新的人员以外的人员执行。这会造成在对数据进行更新和保持数据一致性方面的困难,这是数据规范化首先尝试解决的问题。
本文的公开内容是针对这些和其它考虑因素来给出的。
发明内容
本文描述了用于对数据实例进行去规范化的技术。数据实例可以是数据条目,该数据条目包含在其对应数据存储模式中定义的字段或元素的实例化值。用于对数据实例进行去规范化的信息可以作为注释嵌入其对应的数据存储模式中。注释可以指定模式中所定义的数据结构的将用作索引的字段或元素。注释还可以包括对去规范化所依赖于的其它数据实例的引用。带注释模式可以向去规范化引擎进行注册。
当接收到带注释模式的数据实例时,去规范化引擎可以根据注释来处理每个数据实例,以便针对带注释模式的每个数据实例生成每对象索引(“POI”)。POI可以包括目标子POI,该目标子POI包含从数据实例本身获得的信息。POI还可以包括一个或多个源子POI,这些源子POI包含来自数据实例所依赖于的其它数据实例的信息。去规范化引擎可以请求将生成的POI存储在POI存储装置中。
更具体而言,当在去规范化引擎处接收到新的数据实例或者对现有数据实例的更新时,该去规范化引擎可以从POI存储装置请求与当前正在处理的数据实例相关的所有子POI。去规范化引擎随后可以分析与每个相关子POI相关联的模式注释,以从当前数据实例获得实例化值以对相关子POI进行更新。对相关子POI的更新可以包括添加新的子POI、删除现有子POI、改变现有子POI的值、或者变换现有子POI。随后可以利用这些子POI更新来对存储在POI存储装置中的子POI进行更新。
POI存储装置可以将所存储的子POI暴露于各种索引引擎,这些索引引擎可以生成适合于其相应搜索引擎的索引以促进搜索操作。搜索引擎还可以收集接收到的搜索查询并将它们发送到去规范化引擎。去规范化引擎可以分析接收到的搜索查询以推断要执行的去规范化,并做出对该模式进行注释以实现去规范化的推荐。
通过利用本文所描述的技术,规范化逻辑模型保持不变,同时可以维持和优化多个去规范化物理模型。本文所描述的技术不仅提高了搜索速度,而且还提高了去规范化数据存储装置的数据一致性,因为对数据实例的更新可以自动传播到***中的所有副本。通过实现所公开的技术还可以实现本文未具体标识的其它技术效果。
应该意识到,上述主题内容还可以实现为计算机控制的装置、计算机过程、计算***、或者实现为制品(例如计算机可读存储介质)。通过阅读以下详细描述以及对相关附图的审阅,这些以及各种其它特征将是显而易见的。
提供本发明内容以用简化形式引入一些概念,这些概念以下在详细描述中进一步描述。本发明内容并非旨在标识所要求保护的主题内容的关键特征或必要特征,本发明内容也并非旨在用于限制所要求保护的主题内容的范围。此外,所要求保护的主题内容不限于解决在本公开内容的任何部分中提及的任何或所有缺点的实现方式。
附图说明
图1是提供了本文所公开的用于对数据实例进行去规范化的一种机制的概述的计算机***图;
图2是示出了用于对模式进行注释并基于注释来处理数据实例以生成子POI的示例的数据结构图;
图3A和图3B是示出了目标数据实例与其源数据实例之间的示例性依赖性关系、以及针对目标数据实例生成的子POI以分别跟踪这些依赖性关系的数据结构图;
图4是示出了用于基于带注释模式中的注释、包含在目标数据实例中的数据、以及包含在其源数据实例中的数据来针对目标数据实例生成子POI的示例的数据结构图;
图5是示出了用于对数据实例进行去规范化的一个说明性过程的各方面的流程图;
图6是示出了用于对数据示实例进行处理以供去规范化的一个说明性过程的各方面的流程图;
图7是示出了用于基于通过数据去规范化生成的子POI来执行搜索的一个说明性过程的各方面的流程图;以及
图8是示出了用于能够实现本文所给出的技术的各方面的计算***的说明性计算机硬件和软件架构的计算机架构图;
图9是示出了能够实现本文所给出的技术的各方面的分布式计算环境的计算机***架构和网络图;以及
图10是示出了用于能够实现本文所给出的技术的各方面的另一计算设备的计算设备架构的计算机架构图。
具体实施方式
本文描述了用于对数据实例进行去规范化以实现对数据实例的快速搜索和分析,同时保持数据实例的一致性的技术。数据实例可以是数据条目,该数据条目包含针对在其对应的数据存储模式中定义的字段或元素的实例化值。例如,如果数据存储模式定义了表格,则该模式的数据实例可以是表格的行或记录,该行或记录包含该表格的字段或列的实际值。在本文所公开的技术中,通过生成和维护要被去规范化的数据实例(这在本文中将被称为“目标数据实例”)的每对象索引(“POI”)来实现数据去规范化。通过对目标数据实例和目标数据实例所依赖于的数据实例(这在本文中被称为“源数据实例”)进行处理来生成POI。
POI由一个或多个子POI组成,其中一个目标子POI包含从目标数据实例获得的数据,而其它子POI作为包含来自源数据实例的数据的源子POI。这些子POI包含对数据实例进行索引所需要的所有数据,并且因此可供索引引擎使用以生成用于搜索引擎的索引。
为了实现生成子POI,描述数据存储装置的数据结构的数据存储模式利用指定如何对模式的数据实例执行数据去规范化的信息进行注释。带注释模式随后向被配置为执行数据去规范化的去规范化引擎注册。
当在去规范化引擎处接收到带注释模式的新数据实例时,去规范化引擎可以分析嵌入在该模式中的注释并从数据实例获得信息以生成目标子POI。如果该数据实例依赖于一个或多个源数据实例,则可以针对每个源数据实例创建源子POI,以跟踪目标数据实例与源数据实例之间的依赖性。当去规范化引擎对相应的源数据实例进行处理时,可以获得源子POI中的数据。随后可以将新生成的子POI存储在POI存储装置中。
应该注意,该新数据实例可以是另一目标数据实例的源数据实例。在这种场景中,可以利用该新的数据实例的数据来填充该另一目标数据实例的相应源子POI。为了确保利用新数据实例中的数据来对这些源子POI进行更新,从POI存储装置中取回与新数据实例相关或另外需要来自该新数据实例的数据的所有现有子POI,并根据该新数据实例中包含的数据来进行处理。随后将经更新的子POI发送到POI存储装置以对相应的子POI进行更新。类似地,当接收到对现有数据实例的更新时,可以取回与该数据实例相关的所有子POI并根据对该数据实例的更新来进行更新。
上述子POI固有地支持前向引用,并且还能够处理没有无限级联的循环。除了生成用于搜索引擎的索引之外,还可以利用子POI以低计算成本来对数据实例执行各种分析。下面将参考图1-图7提供与本文所给出的技术的这些和其它方面有关的另外细节。
虽然在结合计算机***上的操作***和应用程序的执行来执行的程序模块的一般上下文中给出了本文所描述的主题内容,但是本领域技术人员将认识到,可以结合其它类型的程序模块来执行其它实现方式。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件、数据结构、以及其它类型的结构。此外,本领域技术人员将意识到,本文所描述的主题内容可以利用其它计算机***配置来实践,包括手持设备、多处理器***、基于微处理器或可编程的消费电子产品、小型计算机、大型计算机等等。
在以下详细描述中,参考形成该详细描述的一部分的附图,并且这些附图通过图示、特定的方面或示例来示出。现在参考附图,其中相同的附图标记在若干附图中表示相同的元件,将描述用于订阅、接收和处理事件的计算***和方法的各方面。
现在转向图1,将提供与根据本文给出的各方面的用于对数据实例进行去规范化的计算机***有关的细节。具体而言,图1示出了用于对数据实例进行去规范化的去规范化***100的各方面。如图1中所示出的,去规范化***100包括用于存储和维护数据实例116(其可以被称为实例116)的数据存储装置104、被配置为通过针对数据实例116生成子POI118来对数据实例116执行去规范化的去规范化引擎106、以及被配置为存储和维护子POI118的POI存储装置110。
POI存储装置110的功能可以由一个或多个数据库、服务器计算机、台式计算机、移动电话、膝上型计算机、其它计算***等等来提供。应该理解,如果需要,POI存储装置110的功能还可以由一个或多个虚拟机提供和/或另外由云计算环境托管。在其它实施例中,POI存储装置110的功能可以由与计算设备相关联的一个或多个数据存储设备来提供,例如存储器、大容量存储设备、如本文所定义的计算机可读存储介质、其组合等等。例如,POI存储装置110的功能可以实现为服务器计算机,其被配置为维护对存储在其中的子POI 118之间的关系进行描述的数据,并且执行诸如取回给定子POI的相关子POI 118、创建/添加新的子POI 118、删除子POI 118、改变现有子POI 118的值以及对子POI 118应用变换之类的操作。对子POI118的变换可以包括对子POI 118的元素的值的改变,例如元素值的增加、值的减少、或对值的任何可交换操作。应该理解,该示例是说明性的,并且不应该被解释为以任何方式进行限制。
去规范化引擎106可以被配置为提供各种类型的功能以促进对数据存储装置104中的数据实例116的去规范化。去规范化引擎106可以实现为硬件或者由硬件执行的软件。在一些配置中,去规范化引擎106可以执行多个模块以便促进数据去规范化。模块可以在单个计算设备上执行或者跨多个计算设备并行执行。另外,每个模块可以由在不同计算设备上执行的多个子组件组成。模块可以实现为硬件或者由硬件执行的软件。
去规范化引擎106可以与一个或多个开发者计算设备102通信。开发者计算设备102可以是PC、台式工作站、膝上型或平板设备、笔记本、PDA、电子书阅读器、智能电话、游戏控制台、机顶盒、消费电子设备、可穿戴计算设备、服务器计算机、或能够通过网络122与去规范化引擎106进行通信的任何其它计算设备。
网络122可以是任何有线网络、无线网络或其组合。另外,网络122可以是个域网、局域网(“LAN”)、广域网(“WAN”)、有线网络、卫星网络、蜂窝电话网络、或其组合。网络122还可以是空中广播网络(例如,用于无线电或电视)或者可以由各种不同方(例如互联网)操作的链接网络的公共可访问网络。在一些实现方式中,网络122可以是私有或半私有网络,例如公司或大学内联网。网络122可以包括一个或多个无线网络,例如全球移动通信***(“GSM”)网络、码分多址(“CDMA”)网络、长期演进(“LTE”)网络、或者任何其它类型的无线网络。
数据存储装置104的开发者或管理员126可以利用开发者计算设备102来通过网络122向去规范化引擎106提交带注释模式112。带注释模式112可以是定义数据存储装置104的数据结构的数据存储模式并且嵌入有注释114,其中注释114指定应该如何对模式112的数据实例执行数据去规范化。下面参考图2-图4描述了与带注释模式112和注释114有关的另外细节。当接收到带注释模式112时,去规范化引擎106可以注册带注释模式112以供后续使用。
当在数据存储装置104中创建带注释模式112的新实例116时,将在去规范化引擎106处对实例116进行处理以供作为目标实例进行去规范化。具体而言,去规范化引擎106可以使用包含在目标数据实例116中的特定值(本文中被称为“实例化值”)来分析和评估带注释模式112中的注释114。随后利用这些实例化值来生成一个或多个子POI 118。
子POI 118可以包括目标子POI 118,其中目标子POI 118包含来自目标数据实例116本身的信息。如果目标数据实例116依赖于一个或多个源数据实例116并且注释114指示对目标数据实例116的去规范化需要来自那些源数据实例116的信息,则可以针对每个源数据实例116生成源子POI118。当去规范化引擎106对相应的源数据实例116进行处理时,可以填充源子POI 118中的信息。随后可以将生成的子POI 118发送到POI存储装置110以供存储。
在对新实例116进行处理时,去规范化引擎106还可以检查存储在POI存储装置110中的现有子POI,以确定是否存在与新数据实例116相关的任何子POI。例如,如果新数据实例116是另一数据实例的源数据实例,则该另一数据实例的源子POI可以与新数据实例116相关,并且因此需要在源子POI中填充或更新。如果新数据实例改变子POI中所包含的数据的值,则该新数据实例也可以与该子POI相关。例如,在一个示例中,新实例是呈现由特定作者撰写的新书的书籍实例。因此,包含由该作者撰写的书籍总数的子POI与新数据实例相关,因为该新数据实例将使得子POI中的书籍总数增加一。
应该理解,新实例可以以其它方式与现有的子POI相关。当存在与新数据实例相关的子POI时,可以从POI存储装置110中取回这些相关的子POI,并且由去规范化引擎106利用新实例116中所包含的数据来进一步处理这些子POI。随后可以将经处理或经更新的子POI发送回POI存储装置110。
去规范化引擎106还可以被配置为对实例更新120进行处理。例如,数据存储装置104中的数据实例116可以出于某些原因而被更新,例如为了纠正数据实例116中的错误、或者为了利用最新信息来替换数据实例116的字段。当去规范化引擎106接收到这种更新120时,可以从POI存储装置110中取回与实例更新120相关的所有子POI 118。去规范化引擎106随后可以基于实例更新120来处理相关子POI,以生成子POI更新来对存储在POI存储装置110中的子POI 118进行更新。
取决于由实例更新120做出的特定改变,子POI更新可以包括新创建的子POI 118、对现有子POI 118的改变、对删除现有子POI 118的指示、或者对现有子POI 118的变换。在接收到子POI更新时,POI存储装置110可以基于子POI更新来对POI存储装置进行更新,包括但不限于将新的子POI添加到POI存储装置110中、删除被指示为要删除的子POI、改变现有的子POI或者对子POI应用变换。下文参考图2-图6提供了与子POI 118的生成和更新有关的另外细节。
根据本文所描述的另外方面,POI存储装置110还可以被配置为:将存储在其中的子POI 118暴露于索引引擎108以生成适合于对应的搜索引擎128的索引124。例如,这可以通过由索引引擎108向POI存储装置110订阅以接收子POI以及对子POI的任何更新来执行。对于由用户132通过用户计算设备130提交的查询134,搜索引擎128可以通过查找生成的索引124来快速地执行搜索并返回搜索结果136。搜索查询134和搜索结果136可以经由网络138发送,其中网络138可以与网络122相同或不同。另外,去规范化引擎106还可以基于规范化数据模型来创建针对查询134的查询计划,并将查询计划转换为利用现有的去规范化来生成更高效查询的计划。
搜索引擎128可以收集搜索查询134并将它们转发到去规范化引擎106,去规范化引擎106进而可以对接收到的查询134执行分析以推断去规范化并相应地提供关于期望注释的推荐。取决于***的配置,经推荐的注释可以自动添加到相应的模式112,或者在获得开发者/管理员126的批准之后添加。随后可以利用添加的注释来执行如上所述的去规范化。
应该注意,虽然图1示出了一个索引引擎108和一个搜索引擎128,但是可以存在接收子POI 118并生成适合于其对应的搜索引擎128的索引124的多个索引引擎。索引引擎108可以被集成到搜索引擎128中,或者可以与搜索引擎128分开,如图1中所示出的。
还应该意识到,虽然图1将数据存储装置104示为用于存储数据实例116的单个数据存储装置,但数据存储装置104可以并且通常是以分布式方式实现,因为数据实例116存储在多个不同的***中。同样地,POI存储装置110也可以以分布式方式来实现。另外,虽然子POI在图1中被示出为与数据实例116分开存储,但是子POI可以与其相应的数据实例116一起存储。
现在参考图2,将描述用于对模式进行注释并基于该注释来处理数据实例以生成子POI的示例。图2示出了数据结构“Book(书籍)”的模式210,该模式210包含三个元素:“Title(题目)”,“Rating(评级)”和“Authors(作者)”。可以使用能够描述模式的任何语言来表达模式210,该语言包括但不限于来自华盛顿州雷蒙德市(Redmond)的MICROSOFT(微软)公司的BOND模式语言、JavaScript对象表示法(“JSON”),JSON模式、以及由加利福尼亚山景城(Mountain View)的GOOGLE(谷歌)公司开发的协议缓冲(Protocol Buffers)。
出于去规范化目的,可以对模式进行注释并使其变为带注释模式112。在该示例中,通过对模式210进行来生成带注释模式202。带注释模式202包含在结构上定义的注释114A、在字段或元素“Title”上定义的注释114B和注释114E、在字段或元素“Rating”上定义的注释114C、以及在字段或元素“Authors”上定义的注释114D。注释114A-114E在本文中可以统称为“注释114”或单独称为“注释114”。
具体而言,注释114A指示由Authors引用的数据实例的“LastName”将用于利用“Last:{Authors.Lastname}”的键来对Book数据实例进行索引。注释114B指示Book数据实例的Title应该被索引为单个值,而注释114E指示“Title”元素中的各个单词也应该被索引。注释114C指示应该在排名期间返回或使用Rating的值。注释114D指示Authors是对其它数据实例的引用。取决于实现方式,可以以任何格式进行引用,例如字符串、数字、多个字段的复合键、或者可以用于表示引用的任何其它格式。
应该注意,注释114独立于模式210所使用的模式语言。换言之,这些注释114可以添加到以任何语言编写的模式中。此外,注释114可以与模式定义210包括在一起,如图2中所示出的。注释114也可以经由其它模式或通过应用程序编程接口(“API”)作为间隔注释(standoff annotations)来定义。
基于注释114,去规范化引擎106可以对Book数据实例进行处理以生成子POI 118。在图2中所示出的示例中,在去规范化引擎106处接收到新的Book实例B1 204。实例B1 204具有Title“Fun Stuff”,Rating为3.5,并且Authors包含“p1”和“p2”。在该示例中,数据实例B1 204是用于注释114中所指示的去规范化的目标数据实例,并且应该生成表示为“B1/[]”的目标子POI 206。
要被包括在目标子POI 206中的特定数据可以通过基于注释114从数据实例B1204获得实例化值来确定。具体而言,去规范化引擎106可以分析注释114B以确定Title(其具有实例化值“Fun Stuff”)的整个值应该被放置在目标子POI B1/[]206中。另外,Title的各个单词(即,“Fun”和“Stuff”)也应该被置于子POI B1/[]206中。去规范化引擎106还可以根据注释114C来将Rating值3.5保存在子POI B1/[]206中,并根据注释114D将作为对源数据实例的引用的“p1”和“p2”添加到子POI B1/[]206中。所生成的目标子POI B1/[]206在图2中示出。
应该注意,本文所描述的技术不依赖于源数据实例(例如由“p1”和“p2”引用的源数据实例)存在,也不依赖于在处理数据实例204时立即处理源数据实例。在图2中所示出的示例中,获得注释114A中的“Authors:LastName”的实例化值需要来自“p1”和“p2”所引用的源数据实例的数据,这可以在稍后处理相应的源数据实例时获得。如上面讨论的,随后可以将该数据包括在相应的源子POI中。与生成源子POI有关的细节将在下面针对图3A、图3B和图4进行讨论。
图3A示出了目标数据实例116与其源数据实例116之间的示例性依赖性,并且图3B示出了目标数据实例116的跟踪图3A中所示出的数据实例依赖性的子POI 118。如图3A中所示出的,目标数据实例T 302取决于多个源实例304A-304N(本文中可以称为源实例304)。源数据实例304还取决于其它源数据实例306A-306K(本文中可以称为源实例306)和308A-308M(本文中可以称为源实例308)。
在去规范化期间,可以从注释114识别目标实例302与其源数据实例304之间的依赖性关系,该注释114描述目标实例T 302的去规范化需要来自源数据实例304A-304N的数据。源数据实例304与源数据实例306和308之间的进一步依赖性可以通过注释114类似地识别、或者在处理源实例304A-304N时被发现。
为了跟踪目标数据实例T 302与其源数据实例304、306和308之间的依赖性,可以类似地构造针对目标实例T 302创建的子POI以反映依赖性。如图3B中所示出的,可以针对目标数据实例302创建表示为“T/[]”的目标子POI 312,并且将目标子POI 312配置为仅包括从目标数据实例302获得的数据。随后,对于每个源数据实例,可以创建源子POI以存储从相应的源数据实例获得的数据。在该示例中,针对源数据实例A 304A创建表示为“T/[A]”的源子POI 314A,并且针对源数据实例N 304N创建表示为“T/[N]”的源子POI 314N。
类似地,可以针对源数据实例A_1 306A生成表示为“T/[A,A_l]”的源子POI 316A。要注意,源数据实例A_1 306A通过源数据实例304A与目标数据实例302具有两层依赖性关系。这种依赖性路径或关系可以由包含在源子POI 316A中的数据反映,例如通过子POI316A的标识或其它元素。这种识别数据可以在以后由去规范化引擎106用于将子POI 316A取回作为与源数据实例A 304A相关以及与源数据示例A_1 306A相关。可以以类似的方式来生成其它子POI,例如子POI 316K和318A-318M。目标子POI 312和源子POI 314A-314N、316A-316K和318A-318M构成目标源302的完整POI,这在本文中可以称为目标数据实例302的复合POI 310。
以上述方式针对目标数据实例生成复合POI 310可以使数据去规范化的维护更加有效和高效,以确保***中的数据一致性。例如,可以对目标数据实例302进行更新以显示它不再依赖于源数据实例A 304A。通过删除从源数据实例304A推导出的源子POI(即,子POI314A和316A-316K)而不影响其余子POI,可以容易地将这种改变传播到对目标数据实例302的去规范化中。
类似地,当存在对源数据实例中的一个数据源实例(例如数据实例306K)的改变时,去规范化引擎106仅需要取回和更新与该源数据实例相对应或相关的子POI(在该示例中为子POI 316K)。去规范化引擎106将不会也不需要接触其它子POI。
应该注意,虽然图3A和3B示出了目标数据实例116与源数据实例116之间的两级依赖性,但是它们之间可以存在任何级数的依赖性。同样地,目标数据实例116可以依赖于任何数量的源数据实例116,源数据实例116可以进一步依赖于任何数量的另外源数据实例116。另外,在数据实例116之中的依赖性中可以存在循环性,如果底层数据或依赖性关系不变,则该循环性可以循环有限的次数直至达到固定点。例如,当构建D1的索引取决于来自Q1的信息并且构建Q1的索引取决于来自D1的信息时,数据实例D1和Q1之间可以存在循环依赖性。当对D1进行处理时,可以生成指示需要来自Q1的信息的子POI D1/[Q1]。然而,直到对Q1进行处理才知道Q1需要来自D1的什么内容。当对Q1进行处理时,可以获得D1/[Q1]所需要的信息。同时,创建子POI Q1/[D1],该子POI Q1/[D1]显示Q1所需要的来自D1的信息。为了填充子POI Q1/[D1],需要再次处理D1。然而,应该注意,由于子POI D1/[Q1]是完整的,因此不需要再次处理Q1。从该示例可以看出,***不是永远循环,而是能够循环有限数量的循环,直至获得所有需要的信息。还应该注意,如果D1或Q1的值已经改变,或者它们之间的依赖性已经改变,则需要另外的循环来更新相应的子POI中的值。
图4示出了用于利用另外的数据实例114和带注释模式112,基于图2中所示出的示例来生成子POI 118的示例。如上面参考图2所讨论的,带注释模式202在去规范化引擎106处被接收并向其注册。去规范化引擎106随后根据带注释模式202中的注释114来生成目标子POI 206。带注释模式202中的注释114A和114D还指示Authors“p1”和“p2”均引用源数据实例以及要在索引中使用的相应源数据实例中的LastName。基于这种注释,去规范化引擎106还可以生成用于p1的源子POI B1/[p1]414以及用于p2的源子POI B1/[p2]416。
当去规范化引擎106对源实例p1和p2进行处理时,可以获得源子POI414和416的LastName实例化值。当对数据实例(例如数据实例204)进行处理时,去规范化引擎106可以返回对需要处理的源数据实例的引用,以便对相应的子POI(例如p1和p2)进行更新。这些返回的引用可以立即进行处理,或者可以置于队列中以便稍后处理。在一种实现方式中,去规范化引擎106在对实例B1进行处理之后立即开始对p1和p2的处理以获得LastName值。在另一种实现方式中,去规范化引擎106可以将对数据实例p1和p2的处理延迟预先确定的时间段,例如几分钟或几小时。在又一种实现方式中,去规范化引擎106可以将用于对源数据实例p1和p2进行处理的任务放置到去规范化引擎106的任务队列中。随后当源数据实例p1和p2上升到任务队列的顶部时可以由去规范化引擎106对源数据实例p1和p2进行处理。去规范化引擎106可以以其它方式来确定何时对源数据实例p1和p2进行处理。
当去规范化引擎106开始对实例p1 404进行处理时,去规范化引擎106可以获得p1的LastName的实例化值“Smith”。随后可以利用该实例化值来填充目标实例204的源子POIB1/[pl]414。另外,去规范化引擎106可以向搜索索引器(例如索引引擎108)通知源子POIB1/[pl]414已改变。类似地,当去规范化引擎106对实例p2 406进行处理时,去规范化引擎106可以获得p2的LastName“Adams”并利用所获得的值来填充源子POI B1/[p2]416。还可以向索引引擎108通知关于源子POI B1/[p2]的改变。目标子POI“B1/[]”206、源子POI“B1/[pl]”414和源子POI“B1/[p2]”416构成目标数据实例204的复合POI 410。
要注意,在图4中所示出的示例中,Person实例的模式402还包含用于去规范化的注释。模式402中的注释指示可以通过FirstName(名字)、LastName(姓氏)、Age(年龄)以及由LastName和FirstName组成的FullName(全名)来对Person数据实例进行索引。基于这些注释,在对数据实例p1404进行处理时,去规范化引擎106还可以生成数据实例p1 404的目标子POI 418。
类似地,当去规范化引擎106对数据实例p2 406进行处理时,也可以生成数据实例p2 406的目标子POI 420。要注意,由于带注释模式402中的注释未指示Person数据实例依赖于其它数据实例,因此将不会生成数据实例p1和p2的源子POI。在这种情况下,Person数据实例p1和p2的复合POI分别仅包括目标子POI 418和目标子POI 420。
图4中所示出的带注释模式202包括另外的注释114F[Index.count(“{}BooksWritten”)]。该注释将使得由Book数据实例引用的Person数据实例在相应的目标子POI中具有BooksWritten:<count>条目,例如图4中的子POI“P1/[]”418和子POI“P2/[]”420中示出的那些条目。当接收并处理新的Book数据实例时,由Book数据实例的Authors引用的相应子POI中的BooksWritten:<count>条目将增加一以维护由某人撰写的书籍数量。这可以通过对相应的子POI应用变换来实现。通过利用变换机制,不需要针对Book数据实例B1创建子POI P1/[B1]和P2/[B1]。在存在大量Book数据实例的数据存储装置中,该变换机制可以通过消除针对每个Book数据实例创建和更新子POI(如P1/[B1])的需要来节省大量的计算资源。
应该意识到,本文所描述的数据实例去规范化固有地支持前向引用,即,甚至在数据实例存在于***之前对该数据实例进行引用。例如,在图4中所示出的示例中,目标子POI206可以在数据存储装置104中创建Person实例p1和p2之前引用Person实例p1和p2。在稍后的时间,当源数据实例存在时,可以利用实例化值来填充与不存在的源数据实例相对应的源子POI。允许前向引用可以极大地降低去规范化的计算成本和去规范化所花费的时间。在没有前向引用的情况下,直到所有源数据实例可用才能生成目标子POI,从而导致完成去规范化过程的延迟。另外,可能必须多次处理目标数据实例,直至其所有源数据实例都可用。
图5是示出了用于对数据实例116进行去规范化的一个说明性例程500的各方面的流程图。在一些实现方式中,由上面参考图1所描述的去规范化引擎106来执行例程500。然而,应该意识到,也可以由图1中所示出的去规范化***100中的其它实体来执行例程500。
还应该意识到,本文针对图5和其它附图所描述的逻辑操作被实现为(1)在计算***上运行的计算机实现的动作或程序模块的序列和/或(2)计算***内的互连机器逻辑电路或电路模块。实现方式是一种取决于计算***的性能和其它要求的选择问题。因此,本文所描述的逻辑操作被不同地称为状态、操作、结构设备、动作或模块。这些状态、操作、结构设备、动作和模块可以用软件、固件、专用数字逻辑及其任何组合来实现。还应该意识到,可以执行比图中所示和本文所述的操作更多或更少的操作。也可以以与本文所描述的顺序不同的顺序来执行这些操作。还应该理解,所示出的每个方法可以在任何时间结束,而不需要完整地执行。
可以通过执行包括在计算机存储介质上的计算机可读指令来执行方法的一些或所有操作和/或基本等同的操作,如下面所定义的。如在说明书和权利要求中使用的,术语“计算机可读指令”及其变型在本文中被广泛使用,以包括例程、应用、应用模块、程序模块、程序、组件、数据结构、算法等等。计算机可读指令可以在各种***配置上实现,包括单处理器或多处理器***、小型计算机、大型计算机、个人计算机、手持计算设备、基于微处理器、可编程消费电子产品、其组合等等。
还应该理解,本文所描述的各种软件组件可以使用二进制可执行文件、动态链接库(“DLL”)、应用编程接口(“API”)、网络服务、脚本文件、解释程序代码、软件容器、目标文件、适合于即时(“JIT”)编译的字节代码、和/或能够由处理器执行以执行本文所描述的操作的其它类型的程序代码来实现或与之结合使用。还可以利用本文未具体提及的其它类型的软件组件。
例程500开始于操作502,在操作502处去规范化引擎106执行初始配置,例如设置POI存储装置110。初始配置还可以包括注册可以用于解释注释114的库或函数,以分析数据实例116和/或生成子POI 118。可以在初始配置期间执行其它操作。例程500随后行进到操作504,在操作504处去规范化引擎106接收并注册由开发者126通过开发者计算设备102发送的带注释模式112。
从操作504,例程500行进到操作506,在操作506处去规范化引擎106接收数据实例116。接收到的数据实例116可以是新数据实例116或者对现有数据实例116的更新120。在接收到的实例是对现有数据实例116的更新120的场景中,在操作506接收对该数据实例的改变或经更新的数据实例本身。
例程500进一步行进到操作508,在操作508处去规范化引擎106对接收到的数据实例116或实例更新120进行处理以生成新的子POI 118或对存储在POI存储装置110中的现有子POI 118进行更新。如上面讨论的,取决于如何配置去规范化引擎106,对数据实例116的处理可能使得用于对一个或多个数据实例进行处理的任务被置于去规范化引擎106的任务队列中。与对数据实例的处理有关的细节将在下面参考图6进行描述。
从操作508,例程500行进到操作510,在操作510处去规范化引擎106例如通过确定任务队列中是否还剩有任务来确定是否还有更多的数据实例116要处理。如果有更多的数据实例116要处理,则例程500行进到操作506。否则,例程500行进到操作512,在操作512处该例程结束。
图6是示出了用于对在去规范化引擎106处接收的用于去规范化的数据实例116进行处理的一个说明性例程600的各方面的流程图。例程600开始于操作602,在操作602处去规范化引擎106从POI存储装置110识别与接收到的数据实例116相关的所有子POI 118。如果子POI 118属于接收到的数据实例116的复合POI,则该子POI可以与接收到的数据实例116相关。换言之,子POI是接收到的数据实例116的目标子POI或源子POI。
如果接收到的数据实例116是另一目标数据实例的源数据实例并且子POI 118是相应的源子POI,则子POI 118也可以与接收到的数据实例116相关。当数据实例改变子POI中所包含的数据的值时,也可以建立该数据实例与该子POI之间的关系。例如,当数据实例是表示由某个作者编写的新书的新数据实例时,包含该作者所撰写的书籍总数的子POI与该数据实例相关,因为该数据实例将使得书籍总数增加一。应该意识到,数据实例和子POI可以以其它方式相关。
在图4中所示出的示例中,如果接收到的数据实例116是Person数据实例p1或对实例p1的更新,则所识别的相关子POI将包括子POI pl/[]作为p1本身的目标子POI。相关子POI还可以包括子POI B1/[p1]414,因为p1是Book数据实例B1的源数据实例,并且子POIB1/[p1]414是对应的源子POI。在另一示例中,如图3中所示出的,如果接收到的数据实例是源实例A 304A,则相关子POI可以包括从接收到的数据实例A304A推导出的所有子POI,即,子POI 314A和子POI 316A-316K。
例程600从操作602行进到操作604,在操作604处去规范化引擎106可以处理与每个所识别的相关子POI相关联的注释110,即,包含在使得生成响应子POI的相应目标数据实例116的带注释模式112中的相关注释114。随后可以利用接收到的数据实例116中的数据来获得相关注释114的实例化值。
例程600随后行进到操作606,在操作606处去规范化引擎106确定是否需要生成新的子POI。例如,接收到的数据实例116可以是新的数据实例,并且其相关联的注释110指示应该针对该新数据实例生成目标子POI。另外,如果新数据实例依赖于其它数据实例,则可以生成一个或多个源子POI。
在接收到的数据实例是源数据实例的另一示例中,去规范化引擎106在从数据实例获得实例化值的同时发现该源数据实例还依赖于其它源数据实例。在这种场景中,需要针对其它源数据实例创建新的源子POI。例如,Book模式中的注释表明Book数据实例应该以其作者的孩子姓名为索引。在对表示Book实例的作者的Person数据实例进行处理时,去规范化引擎106发现作者有两个孩子,该信息存储在两个单独的Child(孩子)数据实例中。在这种场景中,应该生成两个源子POI,每个Child数据实例一个源子POI。
如果在操作606处确定应该生成新的子POI,则例程600行进到操作608,在操作608处生成所识别的新子POI。如果在操作606处确定不需要生成新的子POI,则例程600行进到操作610。在操作610处,去规范化引擎106通过将在操作604处获得的实例化值传播到子POI中来对相关的子POI和新创建的子POI(如果有的话)进行处理。
根据一种实现方式,可以通过调用去规范化运算符来执行操作610处的处理。去规范化运算符可以包括被配置为将实例化值处理为子POI的软件代码。去规范化引擎106可以在其中实现默认运算符。替代地或另外地,开发者/管理员126可以通过例如将运算符实现为DLL来向去规范化引擎106提供定制的运算符。
例程600从操作610行进到操作612,在操作612处将经处理的子POI发送到POI存储装置110。如上面简要描述的,经处理的子POI可以包括新创建的子POI 118、对现有子POI118的改变、或者对删除现有子POI 118的指示。经处理的子POI还可以包括对现有子POI118的变换。该变换可以指定变换现有子POI和定义将应用于该子POI的可交换变换的代码。在子POI包含指示由作者撰写的书籍总数的数据的先前示例中,对表示由该作者撰写的新书的Book实例进行处理将引起变换到子POI,即,将书籍总数增加一。在这种情况下,去规范化引擎106可以将变换返回到POI存储装置110,而不是返回其中书籍总数改变的整个子POI。变换可以指定将应用于该特定子POI的变换以及变换将使书籍总数增加一。利用子POI变换而不是利用新值替换整个子POI的优点在于,当去规范化引擎106正在处理子POI时,其它过程可能已经改变了书籍总数。对该子POI应用变换因此可以得到更准确的结果。变换还具有减少POI存储装置110的负担的优点。例如,为了对1000个用户喜爱的网页的喜欢(likes)进行计数,可以使用单个元素来保持对喜爱的计数而不是在该网页的POI存储装置110中保持1000个子POI。
在接收到经处理的子POI(其可以是经处理的子POI或对子POI的更新)时,POI存储装置110可以对POI存储进行更新以反映这些变化,包括但不限于将新的子POI添加到POI存储装置110、删除被指示为要删除的子POI、改变现有子POI、或对子POI应用变换。更具体而言,对于接收到的经处理子POI,POI存储装置110取回相关子POI并对所取回的子POI应用任何适当的变换。POI存储装置110还可以删除子POI和/或修改子POI,如经处理的子POI中所指示的。应该注意,可以基于从多个机器接收的多个经处理子POI来更新POI存储装置110,这可能在更新POI存储装置时引起冲突。例如,删除或修改操作可能失败,因为相应子POI的版本已经通过对子POI的另外更新而改变。在该情况下,可能必须中止整个更新过程。如果进一步分析显示所有失败的操作都是变换,则可以将变换操作再次重新应用于相应的子POI。如果失败的操作包括除变换之外的操作,则可以通过再次从POI存储装置获取相应的子POI来重新开始上述更新过程。
例程600从操作612行进到操作614,在操作614处去规范化引擎106确定是否应该将新任务添加到去规范化引擎106的任务队列。如上所述,去规范化引擎106可以被配置为:在处理数据实例之后立即处理源数据,或者将处理延迟预先确定的时间量,或者将用于处理源数据实例的任务添加到去规范化引擎106的任务队列中。如果确定应该将新任务添加到在任务队列,则例程600行进到操作616以将任务添加到任务队列中。否则,例程400行进到操作618,在操作618处该例程结束。
如图6中所示出的,一次处理一个数据实例116,其中相关的子POI被保存并且每当处理相关数据实例116时就准备好更新。通过采用这种机制,去规范化***关于何时发生更新可以是灵活的。它还允许去规范化***处理如上面讨论的前向引用。另外,通过仅处理每个相关数据实例一次,可以将对数据实例的更新传播到每个去规范化。此外,去规范化过程可以并入去规范化数据的任何变换,从而允许容易地添加另外的去规范化能力。
应该意识到,本文所描述的去规范化(特别是通过子POI的依赖性跟踪)能够处理没有无限级联的循环。例如,假设图4中所示出的带注释模式402中的Person结构包括另外两个元素“string[]Children”和“string Parent”。带注释模式402的一些数据实例是:
p2:Person(FirstName:"David",LastName:"Adams",Age=56,
Children:["Kai4","Kate5"]);
Kai3:Person(FirstName:"Kai:,LastName:"Adams",Children:[],Parent:"p2")
Kate4:Person(FirstName:"Kate",LastName:"Adams",Children:[],Parent:"p2")
进一步假设图4中所示出的带注释模式202包括以下注释:
[index.field("ParentsOfChildren:{Authors.Children.Parent.FirstName")]。
添加的注释将在依赖性路径中产生循环:Bl→p2→[Kai3,Kate4]→p2,这将导致无限级联的项目进行重新处理,除非循环被打破。上述子POI将允许循环被打破:在对数据实例进行处理时,如果存在尚未利用实例化值完全填充的子POI,则去规范化引擎106只能将一个处理实例的任务添加到其任务队列。在上述示例中,所生成的子POI将包括B1/[]、B1/[p2]、B1/[p2,Kai3]以及B1/[p2,Kate4]。
当去规范化引擎106对数据实例Kai3进行处理时,在子POI B1/[p2,Kai3]中将需要p2.FirstName,这将通过在任务队列中添加任务而使p2再次被重新处理。类似地,在对Kate4进行处理时,用于处理p2的任务将被添加到任务队列,以便获得子POI B1/[p2,Kate4]的p2.FirstName。当稍后第二次处理p2时,p2.FirstName将被填充到子POI B1/[p2,Kai3]和子POI B1/[p2,Kate4]中。此时,不会再向任务队列添加更多新任务,并且因此循环不会产生无限级联。
还应该意识到,本文所描述的去规范化是声明性的(declarative)而不是被编写为代码,其中代码具有高更新延时和低效率的缺点。使用声明性格式还使得去规范化更容易表达和理解,并且还允许推断去规范化。去规范化的声明性性质还允许由去规范化引擎自动和***地处理去规范化,而不是单个开发者或管理员创建和管理他们自己的去规范化。
图7示出了流程图,该流程图示出了用于基于通过本文所描述的数据去规范化而生成的子POI来执行搜索的一个说明性例程700的各方面。例程700开始于操作702,在操作702处索引引擎108从POI存储装置110接收子POI并生成与搜索引擎128兼容的索引124。
例程700随后行进到操作704,在操作704处从一个或多个用户132接收一个或多个搜索查询134。注意,从用户计算设备132接收的查询134可以在规范化逻辑模型上表达。换言之,当提交查询时,用户计算设备不需要具有关于去规范化模型的任何知识。这也带来了以下优点:当去规范化模型改变时,不需要重写查询。
例程700随后行进到操作706,在操作706处搜索引擎128生成针对查询134的查询计划,并且进一步基于注释114来修改该查询计划。由于查询134在规范化逻辑模型上表达而不考虑去规范化模型,针对这种查询生成的查询计划将包括在规范化数据中进行搜索时所需要的操作,例如联接多个表。
搜索引擎128可以例如基于注释114来修改查询计划以考虑已经执行的去规范化。例如,对于给定查询“Book.Author.LastName=Adams”,搜索引擎128在不考虑Book实例的去规范化的情况下将在其查询计划中包括将Book表与Author表联接,以便找出Author的LastName。假设已经对Book实例去规范化以包括Authors的LastName,如图4中所示出的。搜索引擎128随后可以将查询分解为物理去规范化查询,并且基于带注释模式202中的注释来修改查询计划,以仅使用在Author.LastName上生成的索引来搜索Book表。应该注意,查询计划的生成和基于去规范化对查询计划的修改也可以由去规范化引擎106来执行。
例程700从操作706行进到操作708,在操作708处搜索引擎128基于经修改的查询计划来执行搜索并将搜索结果返回给用户132。例程700随后行进到操作910,在操作910处该例程结束。
应该意识到,在搜索引擎128处接收到的搜索查询134也可以发送到去规范化引擎106,去规范化引擎106进而可以对接收到的查询134执行分析以推断或推荐用于***中的模式的注释。例如,如果规范化查询Book.Author.Name=<X>频繁出现在搜索查询134中,则去规范化引擎106可以推荐要添加到Book模式的注释,该注释指示Author.Name应该在Book数据实例中被去规范化并用于进行索引。
基于这种注释的去规范化将允许使用所生成的索引来搜索查询134,从而得到显著的查询延时改进。取决于***的配置,经推荐的注释可以自动添加到相应的模式112,或者在获得开发者/管理员126的批准之后添加。随后可以利用添加的注释来执行如上所述的去规范化。
示例性模式注释
在下文中,提供了用于去规范化的示例性模式注释。为了对模式进行注释,可以将四个基本索引注释应用于结构或字段:Index(索引)、Save(保存)、ID和Reference(引用)。Index指示如何构建索引,Save指示应保存哪些信息以进行排名,并且ID/Reference定义数据实例如何链接在一起。索引注释的语法(syntax)是:<Type>[.<Template>]。“Type”表示Index、Save、ID和Reference中的一个。Template(如果指定的话)是模板的名称。下面的表1示出了示例性索引注释的列表。
表1
还可以基于包括Templates(模板)、Parameters(参数)、Patterns(样式)和Variables(变量)的多个概念来构建更复杂的注释。这些将与一些简单的示例一起描述。
对于如Index.field(“”)之类的简单注释,“field”是模板的名称。在去规范化引擎106中存在如“field”之类的多个内置模板。开发者或管理员102也可以定义他们自己的模板。模板可以理解为可以可选地地提供参数的函数。模板的参数由一系列Patterns组成。每个样式是常量、变量和表达式的混合,当对数据实例116评估时将得到值(实例化值)。取决于上下文,该值可能是发布ID、另一结构的键或已保存的值。
变量提供了一种使样式各部分可以跨许多模板使用并且可以被显式覆写的方式。在定义样式时而不是在处理数据实例时评估变量。可以围绕其它变量来定义变量。使用$来引用变量,以使得例如存在内置变量$Prefix,该内置变量$Prefix默认被定义为$Namespace:$Struct。$Namespace和$Struct由去规范化引擎106定义,以引用在正在处理注释时的当前命名空间和结构名称。Patterns随后可以将$Prefix置于他们希望的任何地方,以定义诸如发布ID之类的样式。如果存在注释[Variables(“Prefix=MyName”)]在范围内(在其一个基类型的当前结构或当前字段),则使用$Prefix的所有位置都将是MyName:而不是$Namespace:$Struct。
通过利用Templates、Parameters、Patterns和Variables,可以构造注释以实现各种目标。表2提供了可以通过上述注释机制实现的各种示例性注释。表2示出的注释被构建用于以下模式。
表2
图8是示出了用于能够执行本文所描述的软件组件的计算机800的架构的计算机架构图。图8中所示出的架构是用于服务器计算机、移动电话、电子阅读器、智能电话、台式计算机、上网本计算机、平板计算机、膝上型计算机、或适合于执行本文所给出的软件组件的另一类型的计算设备的架构。
在这方面,应该意识到,可以利用图8中所示出的计算机800来实现能够执行本文所给出的任何软件组件的计算设备。举例而言而非限制,可以利用参考计算机800所描述的计算架构来实现执行图1中所示出的去规范化引擎106的计算设备和/或实现用于执行上述任何其它软件组件的其它类型的计算***。
图8中所示出的计算机800包括中央处理单元802(“CPU”)、***存储器804(包括随机存取存储器806(“RAM”)和只读存储器(“ROM”)808)、以及将存储器804耦合到CPU 802的***总线810。包含例如在启动期间有助于在计算机800内的元件之间传递信息的基本例程的基本输入/输出***存储在ROM 808中。计算机800还包括大容量存储设备812以用于存储操作***814和一个或多个程序(包括但不限于去规范化引擎106)。大容量存储设备812还可以被配置为:存储图8中未具体示出的其它类型的程序和数据。
大容量存储设备812通过连接到总线810的大容量存储控制器(未示出)来连接到CPU 802。大容量存储设备812及其相关联的计算机可读介质为计算机800提供非易失性存储。尽管对本文所包含的计算机可读介质的描述是指大容量存储设备,例如硬盘、CD-ROM驱动器、DVD-ROM驱动器或USB存储密钥,但本领域技术人员应该意识到,计算机可读介质可以是能够由计算机800访问的任何可用计算机存储介质或通信介质。
通信介质包括经调制的数据信号(例如载波或其它传输机制)中的计算机可读指令、数据结构、程序模块或其它数据,并包括任何传递介质。术语“经调制的数据信号”意指如下信号,该信号以使得将信息编码到该信号中的方式来改变或设置该信号的一个或多个特性。举例而言而非限制,通信介质包括有线介质(例如,有线网络或直接有线连接)和无线介质(例如,声学、射频、红外和其它无线介质)。上面各项中的任何项的组合也应该包括在计算机可读介质的范围内。
举例而言而非限制,计算机存储介质可以包括用任何用于存储信息(例如,计算机可读指令、数据结构、程序模块或其它数据)的方法或技术实现的易失性和非易失性、可移动和不可移动介质。例如,计算机存储介质包括但不限于RAM、ROM、EPROM、EEPROM、闪存或其它固态存储器技术、CD-ROM、数字多功能盘(“DVD”)、HD-DVD、蓝光、或其它光学存储、盒式磁带、磁带、磁盘存储或其它磁存储设备、或者可以用于存储期望信息并且可以由计算机800访问的任何其它介质。出于权利要求的目的,短语“计算机存储介质”及其变型不包括波或信号本身或通信介质。
根据各种配置,计算机800可以使用通过网络(例如网络818)到远程计算机的逻辑连接来在联网环境中操作。计算机800可以通过连接到总线810的网络接口单元820来连接到网络818。应该意识到,网络接口单元820还可以用于连接到其它类型的网络和远程计算机***。计算机800还可以包括输入/输出控制器816以用于接收和处理来自多个其它设备的输入,包括键盘、鼠标、触摸输入或电子笔(图8中未示出)。类似地,输入/输出控制器816可以向显示屏、打印机或其它类型的输出设备(也未在图8中示出)提供输出。
应该意识到,本文所描述的软件组件(例如去规范化引擎106在当被加载到CPU802中并被执行时可以将CPU 802和整个计算机800从通用计算***变换成被定制为提供本文所给出的功能的专用计算***。CPU 802可以从任何数量的晶体管或其它分立电路元件构造,这些晶体管或分立电路元件可以单独地或共同地呈现任何数量的状态。更具体而言,CPU 802可以响应于包含在本文所公开的软件模块(例如去规范化引擎106)内的可执行指令而操作为有限状态机。这些计算机可执行指令可以通过指定CPU802如何在各状态之间转换来变换CPU 802,从而变换构成CPU 802的晶体管或其它分立硬件元件。
对本文所给出的软件模块(例如去规范化引擎106)进行编码也可以变换本文所给出的计算机可读介质的物理结构。在本描述的不同实现方式中,物理结构的特定变换取决于各种因素。这些因素的示例包括但不限于用于实现计算机可读介质的技术、计算机可读介质被表征为主存储装置还是辅助存储装置等等。例如,如果计算机可读介质被实现为基于半导体的存储器,则可以通过变换半导体存储器的物理状态来将本文公开的软件编码在计算机可读介质上。例如,软件可以变换构成半导体存储器的晶体管、电容器或其它分立电路元件的状态。软件还可以变换这些组件的物理状态,以便在其上存储数据。
举另一示例,本文所公开的计算机可读介质可以使用磁性或光学技术来实现。在这种实现方式中,当软件被编码在磁性或光学介质中时,本文所给出的软件组件可以变换该磁性或光学介质的物理状态。这些变换可以包括:更改给定磁性介质内特定位置的磁特性。这些变换还可以包括:更改给定光学介质内特定位置的物理特征或特性,以改变那些位置的光学特性。在不脱离本描述的范围和精神的情况下,物理介质的其它变换是可能的,其中提供前述示例仅为了促进该讨论。
鉴于上述情况,应该意识到,在计算机800中发生许多类型的物理变换,以便存储和执行本文所给出的软件组件。还应该意识到,图8中所示出的用于计算机800的架构或类似架构可以用于实现其它类型的计算设备,包括手持式计算机、嵌入式计算机***、移动设备(例如智能电话和平板设备)、以及本领域技术人员已知的其它类型的计算设备。还构想了计算机800可以不包括图8中所示出的所有组件,可以包括图8中未明确示出的其它组件,或者可以利用与图8中所示出的架构完全不同的架构。
图9示出了其中可以执行本文所描述的软件组件的说明性分布式计算环境902的各方面。因此,图9中所示出的分布式计算环境902可以用于执行能够提供本文针对图1-图7所描述的功能和/或本文所描述的任何其它软件组件的程序代码,例如去规范化引擎106。举例而言而非限制,分布式计算环境902可以用于实现由去规范化引擎106或提供本文所公开的功能的网络可访问程序或服务提供的功能。
根据各种实现方式,分布式计算环境902在网络903上操作、与网络903通信、或者作为网络903的一部分。一个或多个客户端设备906A-906N(下文统称和/或通常称为“客户端906”)可以经由网络903和/或其它连接(图9中未示出)来与分布式计算环境902进行通信。
在所示出的配置中,客户端906包括:计算设备906A,例如膝上型计算机、台式计算机或其它计算设备;“平板型”或平板计算设备(“平板计算设备”)906B;移动计算设备906C,例如移动电话、智能电话或其它移动计算设备;服务器计算机906D;和/或其它设备906N。应该理解,任何数量的客户端906可以与分布式计算环境902进行通信。本文参考图8和图10示出和描述了用于客户端906的两个示例性计算架构。应该理解,所示出的客户端906和本文示出和描述的计算架构是说明性的,而不应被解释为以任何方式受到限制。
在所示出的配置中,分布式计算环境902包括应用服务器904、数据存储装置910以及一个或多个网络接口912。根据各种实现方式,应用服务器904的功能可以由作为网络903的一部分来执行或者与网络903相通信的一个或多个服务器计算机来提供。应用服务器904可以托管各种服务、虚拟机、门户和/或其它资源。在所示出的配置中,应用服务器904托管一个或多个虚拟机914以用于托管应用或网络服务,例如去规范化引擎106或其它类型的应用和/或服务。根据各种实现方式,虚拟机914托管一个或多个应用和/或软件模块,例如去规范化引擎106。应该理解,该配置是说明性的,而不应被解释为以任何方式进行限制。应用服务器904还可以托管或提供对一个或多个Web门户、链接页面、网站和/或其它信息(“Web门户”)916的访问。
根据各种实现方式,应用服务器904还包括一个或多个邮箱服务918以及一个或多个消息传送服务920。邮箱服务918可以包括电子邮件(“email”)服务。邮箱服务918还可以包括各种个人信息管理(“PIM”)服务,包括但不限于日历服务、联系人管理服务、协作服务和/或其它服务。消息传送服务920可以包括但不限于即时消息传送(“IM”)服务、聊天服务、论坛服务和/或其它通信服务。
应用服务器904还可以包括一个或多个社交网络服务922。社交网络服务922可以提供各种类型的社交网络服务,包括但不限于用于共享或发布状态更新、即时消息、链接、照片、视频和/或其它信息的服务,用于评论或显示对文章、产品、博客或其它资源和/或其它服务的兴趣的服务。在一些配置中,社交网络服务922由FACEBOOK社交网络服务、LINKEDIN职业网络服务、MYSPACE社交网络服务、FOURSQUARE地理网络服务、YAMMER办公室同事网络服务等等提供或包括这些网络服务。在其它配置中,社交网络服务922由可以被称为“社交网络提供商”的其它服务、站点和/或提供商提供。例如,一些网站允许用户在各种活动和/或上下文期间经由电子邮件、聊天服务和/或其它手段彼此交互,例如阅读发布的文章、评论商品或服务、发布、协作、游戏等等。其它服务是可能的并且被构想。
社交网络服务922还可以包括评论、博客和/或微博服务。这种服务的示例包括但不限于YELP评论服务、KUDZU评价服务、OFFICETALK企业微博服务、TWITTER消息传送服务、GOOGLE BUZZ服务和/或其它服务。应该意识到,上述服务列表并非详尽的,并且为了简洁起见,本文未位提到许多另外和/或替代的社交网络服务922。因此,上述配置是说明性的,而不应被解释为以任何方式受到限制。
还如图9中所示出的,应用服务器904还可以托管其它服务、应用、门户和/或其它资源(“其它服务”)924。因此可以意识到,分布式计算环境902可以提供将本文所公开的技术与各种邮箱、消息传送、社交网络、生产力、转换和/或其它类型的服务或资源集成。
如上面提到的,分布式计算环境902可以包括数据存储装置910。根据各种实现方式,数据存储装置910的功能由在网络903上操作或与网络903通信的一个或多个数据库提供。数据存储装置910的功能还可以由被配置为托管分布式计算环境902的数据的一个或多个服务器计算机提供。数据存储装置910可以包括、托管或提供一个或多个真实或虚拟数据存储926A-926N(下文统称为和/或通常称为“数据存储926”)。数据存储926被配置为托管由应用服务器904使用或创建的数据和/或其它数据。
分布式计算环境902可以与网络接口912通信或者由网络接口912访问。网络接口912可以包括各种类型的网络硬件和软件以用于支持两个或更多个计算设备(包括但不限于客户端906与应用服务器906)之间的通信。应该意识到,网络接口912还可以用于连接到其它类型的网络和/或计算机***。
应该理解,本文所描述的分布式计算环境902可以利用任何数量的虚拟计算资源和/或可以被配置为执行本文所公开的软件组件的任何方面的其它分布式计算功能来实现本文所描述的软件元件的任何方面。根据本文所公开的技术的各种实现方式,分布式计算环境902将本文所描述的一些或全部软件功能作为服务提供给客户端906。应该理解,客户端906还可以包括真实或虚拟机,包括但不限于服务器计算机、Web服务器、个人计算机,移动计算设备、智能电话和/或其它设备。因此,本文所公开的技术的各种实现方式使得被配置为访问分布式计算环境902的任何设备能够利用本文所描述的功能。
现在转向图10,将描述用于能够执行本文所描述的各种软件组件的计算设备的说明性计算设备架构1000。计算设备架构1000适用于部分地由于形状因子、无线连接和/或电池供电操作而促进移动计算的计算设备。在一些配置中,计算设备包括但不限于移动电话、平板设备、平板型设备、便携式视频游戏设备等等。
计算设备架构1000还适用于图9中所示出的任何客户端906。此外,计算设备架构1000的各方面适用于传统台式计算机、便携式计算机(例如,膝上型计算机、笔记本计算机、超便携式计算机、以及上网本)、服务器计算机以及其它计算机***,例如本文参考图10所描述的那些计算机***。例如,下文公开的单触摸和多触摸方面可以应用于利用触摸屏的台式计算机或某种其它启用触摸的设备,例如启用触摸的跟踪板或启用触摸的鼠标。计算设备架构1000还可以用于实现用于执行去规范化引擎106的计算设备、和/或用于实现或消耗本文所描述的功能的其它类型的计算设备。
图10中所示出的计算设备架构1000包括处理器1002、存储器组件1004、网络连接组件1006、传感器组件1008、输入/输出组件1010以及电源组件1012。在所示出的配置中,处理器1002与存储器组件1004、网络连接组件1006、传感器组件1008、输入/输出(“I/O”)组件1010以及电源组件1012相通信。尽管图10中所示出的各个组件之间未示出连接,单各组件可以电连接以便交互并执行设备功能。在一些配置中,组件被布置为经由一个或多个总线(未示出)进行通信。
处理器1002包括一个或多个中央处理单元(“CPU”)核,这些CPU核被配置为处理数据、执行一个或多个应用程序(例如去规范化引擎106)的计算机可执行指令、以及与计算设备架构1000的其它组件通信,以便执行本文所描述的功能的各方面。处理器1002可以用于执行本文所给出的软件组件的各方面,特别是至少部分地利用启用触摸的输入的那些方面。
在一些配置中,处理器1002包括图形处理单元(“GPU”),该GPU被配置为加速由CPU执行的操作,包括但不限于通过执行通用科学和工程计算应用以及图形密集型计算应用(例如高分辨率视频(例如,720P、1080P、4K和更高)、视频游戏、3D建模应用等等)来执行的操作。在一些配置中,处理器1002被配置为与离散GPU(未示出)进行通信。在任何情况下,CPU和GPU可以根据协处理CPU/GPU计算模型来配置,其中应用的顺序部分在CPU上执行并且计算密集型部分由GPU加速。
在一些配置中,处理器1002是或者包括在片上***(“SoC”)以及下文描述的一个或多个其它组件中。例如,SoC可以包括处理器1002、GPU、网络连接组件1006中的一个或多个、以及传感器组件1008中的一个或多个。在一些配置中,处理器1002部分地利用堆叠封装(“PoP”)集成电路封装技术来制造。此外,处理器1002可以是单核或多核处理器。
处理器1002可以根据ARM架构来创建,ARM架构可从英国剑桥的ARM HOLDINGS(安谋国际公司)获得许可。替代地,处理器1002可以根据x86架构来创建,x86架构例如可以从加利福尼亚州山景城的INTEL(英特尔)公司和其它公司获得。在一些配置中,处理器1002是可从加利福尼亚州圣地亚哥(San Diego)的QUALCOMM(高通)获得的SNAPDRAGON SoC,可从加利福尼亚州圣克拉拉(Santa Clara)的NVIDIA获得的TEGRA SoC,可从韩国首尔的SAMSUNG获得的HUMMINGBIRD SoC,可从德克萨斯州达拉斯(Dallas)的TEXAS INSTRUMENTS(德州仪器)获得的Open Multimedia应用平台(“OMAP”)SoC,上述任何SoC的定制版本,或专有SoC。
存储器组件1004包括RAM 1014、ROM 1016、集成储存存储器(“集成存储装置”)1018、以及可移动储存存储器(“可移动存储装置”)1020。在一些配置中,RAM 1014或其一部分、ROM 1016或其一部分、和/或RAM1014和ROM 1016的某种组合集成在处理器1002中。在一些配置中,ROM1016被配置为存储固件、操作***或其一部分(例如,操作***内核)和/或引导程序,以从集成存储装置1018或可移动存储装置1020加载操作***内核。
集成存储装置1018可以包括固态存储器、硬盘、或固态存储器和硬盘的组合。集成存储装置1018可以焊接或以其它方式连接到逻辑板,处理器1002和本文所描述的其它组件也可以连接在逻辑板上。因此,集成存储装置1018被集成到计算设备中。集成存储装置1018可以被配置为:存储操作***或其部分、应用程序、数据和本文所描述的其它软件组件。
可移动存储装置1020可以包括固态存储器、硬盘、或固态存储器和硬盘的组合。在一些配置中,提供可移动存储装置1020来代替集成存储装置1018。在其它配置中,可移动存储装置1020被提供为另外的可选存储装置。在一些配置中,可移动存储装置1020在逻辑上与集成存储装置1018组合,以使得总可用存储可用并且向用户显示为集成存储装置1018和可移动存储装置1020的总组合容量。
可移动存储装置1020被配置为***到可移动存储存储器插槽(未示出)或其它机构中,通过该插槽或机构***并固定可移动存储装置1020以促进可移动存储装置1020可以在其上与计算设备的其它组件(例如,处理器1002)通信的连接。可移动存储装置1020可以体现在各种存储卡格式中,包括但不限于PC卡、COMPACTFLASH卡、记忆棒、安全数字(“SD”)、miniSD、microSD、通用集成电路卡(“UICC”)(例如,用户身份模块(“SIM”)或通用SIM(“USIM”))、专有格式等等。
可以理解,存储器组件1004中的一个或多个存储器组件可以存储操作***。根据各种配置,操作***包括但不限于来自MICROSOFT(微软)公司的WINDOWS MOBILE OS、WINDOWS PHONE OS或WINDOWSOS,来自加拿大安大略省滑铁卢(Ontario)的RESEARCH INMOTION有限公司的BLACKBERRY OS,来自加利福尼亚州库比蒂诺(Cupertino)的APPLE(苹果)公司的IOS、以及来自加利福尼亚州山景城的GOOGLE(谷歌)公司的ANDROID OS。在其它配置中也可以利用其它操作***。
网络连接组件1006包括无线广域网组件(“WWAN组件”)1022、无线局域网组件(“WLAN组件”)1024、以及无线个域网组件(“WPAN组件”)1026。网络连接组件1006促进去往和来自网络1028的通信,网络1028可以是WWAN、WLAN或WPAN。尽管示出了单个网络1028,但是网络连接组件1006可以促进与多个网络的同时通信。例如,网络连接组件1006可以促进经由WWAN、WLAN或WPAN中的一个或多个与多个网络同时通信。
网络1028可以是WWAN,例如利用一种或多种移动电信技术以经由WWAN组件1022向利用利用计算设备架构1000的计算设备提供语音和/或数据服务的移动电信网络。移动电信技术可以包括但不限于全球移动通信***(“GSM”)、码分多址(“CDMA”)ONE、CDMA2000、通用移动电信***(“UMTS”)、长期演进(“LTE”)、以及全球微波接入互操作性(“WiMAX”)。
此外,网络1028可以利用各种信道接入方法(上述标准可能使用或可能不使用这些信道接入方法),包括但不限于时分多址(“TDMA”)、频分多址(“FDMA”)、CDMA、宽带CDMA(“W-CDMA”)、正交频分复用(“OFDM”)、空分多址(“SDMA”)等等。可以使用通用分组无线服务(“GPRS”)、增强型数据速率全球演进(“EDGE”)、包括高速下行链路分组接入(“HSDPA”)的高速分组接入(“HSPA”)协议族、增强型上行链路(“EUL”)或另外被称为高速上行链路分组接入(“HSUPA”)、演进型HSPA(“HSPA+”)、LTE以及各种其它当前和未来的无线数据接入标准来提供数据通信。网络1028可以被配置为利用上述技术的任何组合来提供语音和/或数据通信。网络1028可以被配置或适于根据下一代技术来提供语音和/或数据通信。
在一些配置中,WWAN组件1022被配置为向网络1028提供双模多模连接。例如,WWAN组件1022可以被配置为提供到网络1028的连接,其中网络1028经由GSM和UMTS技术、或经由某种其它技术组合来提供服务。替代地,可以利用多个WWAN组件1022来执行这种功能和/或提供另外的功能以支持其它不兼容的技术(即,不能由单个WWAN组件支持)。WWAN组件1022可以促进与多个网络(例如,UMTS网络和LTE网络)的类似连接。
网络1028可以是根据一个或多个电气和电子工程师协会(“IEEE”)104.11标准(例如IEEE 104.11a、104.11b、104.111g、104.11n和/或未来104.11标准(本文统称为WI-FI))来操作的WLAN。也构想了草案104.11标准。在一些配置中,利用一个或多个无线WI-FI接入点来实现WLAN。在一些配置中,无线WI-FI接入点中的一个或多个接入点是当WI-FI热点的、具有到WWAN的连接的另一计算设备。WLAN组件1024被配置为经由WI-FI接入点连接到网络1028。可以经由各种加密技术来保护这种连接,包括但不限于WI-FI保护访问(“WPA”)、WPA2、有线等效保密(“WEP”)等等。
网络1028可以是根据红外数据协会(“IrDA”)、蓝牙、无线通用串行总线(“USB”)、Z-Wave、ZIGBEE或某种其它短程无线技术进行操作的WPAN。在一些配置中,WPAN组件1026被配置为促进经由WPAN与其它设备(例如***设备、计算机或其它计算设备)的通信。
传感器组件1008包括磁力计1030、环境光传感器1032、邻近度传感器1034、加速度计1036、陀螺仪1038以及全球定位***传感器(“GPS传感器”)1040。构想了其它传感器(例如但不限于温度传感器或冲击检测传感器)也可以被并入计算设备架构1000中。
磁力计1030被配置为测量磁场的强度和方向。在一些配置中,磁力计1030向存储在存储器组件1004中的一个组件内的罗盘应用程序提供测量,以便向用户提供包括基本方向(北、南、东和西)的参考系中的准确方向。可以向包括罗盘组件的导航应用程序提供类似的测量。构想了由磁力计1030获得的测量的其它用途。
环境光传感器1032被配置为测量环境光。在一些配置中,环境光传感器1032向存储在存储器组件1004中的一个组件内的应用程序(例如应用304)提供测量,以便自动调整显示器的亮度(下面描述)以补偿弱光和强光环境。构想了由环境光传感器1032获得的测量的其它用途。
邻近度传感器1034被配置为在没有直接接触的情况下检测邻近计算设备的对象或事物的存在。在一些配置中,邻近度传感器1034检测用户身体(例如,用户的面部)的存在,并将该信息提供给存储在存储器组件1004中的一个组件内的应用程序,该应用程序利用该邻近度信息来启用或禁用计算设备的某种功能。例如,电话应用程序可以响应于接收到邻近度信息而自动禁用触摸屏(下面描述),以使得用户的面部在呼叫期间不会无意中结束呼叫或启用/禁用电话应用程序内的其它功能。构想了由邻近度传感器1034检测到的邻近度的其它用途。
加速度计1036被配置为测量适当的加速度。在一些配置中,来自加速度计1036的输出被应用程序用作为输入机制以该控制应用程序的某种功能。在一些配置中,来自加速度计1036的输出被提供给应用程序以用于在横向和纵向模式之间切换、计算坐标加速度、或检测跌倒。构想了加速度计1036的其它用途。
陀螺仪1038被配置为测量并保持方位。在一些配置中,来自陀螺仪1038的输出被应用程序用作为输入机制以控制该应用程序的某种功能。例如,陀螺仪1038可以用于准确识别视频游戏应用或某种其它应用的3D环境内的移动。在一些配置中,应用程序利用来自陀螺仪1038和加速度计1036的输出来增强对应用304的某种功能的控制。构想了陀螺仪1038的其它用途。
GPS传感器1040被配置为从GPS卫星接收信号以用于计算位置。由GPS传感器1040计算的位置可以由需要或受益于位置信息的任何应用程序使用。例如,由GPS传感器1040计算的位置可以与导航应用程序一起使用,以提供从该位置到目的地的方向或从目的地到该位置的方向。此外,GPS传感器1040可以用于向基于外部位置的服务(例如E911服务)提供位置信息。GPS传感器1040可以利用网络连接组件1006中的一个或多个组件来获得经由WI-FI、WIMAX和/或蜂窝三角测量技术生成的位置信息,以帮助GPS传感器1040获得定位。GPS传感器1040还可以用于辅助GPS(“A-GPS”)***中。
I/O组件1010包括显示器1042、触摸屏1044、数据I/O接口组件(“数据I/O”)1046、音频I/O接口组件(“音频I/O”)1048、视频I/O接口组件(“视频I/O”)1050、以及相机1052。在一些配置中,组合显示器1042和触摸屏1044。在一些配置中,组合数据I/O组件1046、音频I/O组件1048和视频I/O组件1050中的两个或更多个。I/O组件1010可以包括被配置为支持下文描述的各种接口的离散处理器,或者可以包括内置于处理器1002的处理功能。
显示器1042是被配置为以视觉形式呈现信息的输出设备。具体而言,显示器1042可以呈现GUI元素、文本、图像、视频、通知、虚拟按钮、虚拟键盘、消息传送数据、互联网内容、设备状态、时间、日期、日历数据、偏好、地图信息、位置信息、以及能够以视觉形式呈现的任何其它信息。在一些配置中,显示器1042是利用任何有源或无源矩阵技术和任何背光技术(如果使用的话)的液晶显示器(“LCD”)。在一些配置中,显示器1042是有机发光二极管(“OLED”)显示器。构想了其它显示器类型。
触摸屏1044是被配置为检测触摸的存在和位置的输入设备。触摸屏1044可以是电阻式触摸屏、电容式触摸屏、表面声波触摸屏、红外触摸屏,光学成像触摸屏、色散信号触摸屏、声脉冲识别触摸屏、或者能够利用任何其它触摸屏技术。在一些配置中,触摸屏1044被并入显示器1042的顶部作为透明层,以使得用户能够使用一个或多个触摸来与在显示器1042上呈现的对象或其它信息交互。在其它配置中,触摸屏1044是被并入计算设备表面的不包括显示器1042的触摸板。例如,计算设备可以具有被并入显示器1042顶部的触摸屏以及与显示器1042相对的表面上的触摸板。
在一些配置中,触摸屏1044是单触摸触摸屏。在其它配置中,触摸屏1044是多触摸触摸屏。在一些配置中,触摸屏1044被配置为检测离散触摸、单触摸手势和/或多触摸手势。为方便起见,这些在本文中统称为“手势”。现在将描述几个手势。应该理解,这些手势是说明性的,并非旨在限制所附权利要求的范围。此外,所描述的手势、另外的手势和/或替代的手势可以在软件中实现以便与触摸屏1044一起使用。因此,开发者可以创建特定于具体应用程序的手势。
在一些配置中,触摸屏1044支持轻击手势,其中用户在显示器1042上呈现的项目上轻击触摸屏1044一次。可以出于各种原因使用轻击手势,包括但不限于打开或启动用户轻击的任何内容,例如表示应用304的图形图标。在一些配置中,触摸屏1044支持双击手势,其中用户在显示器1042上呈现的项目上轻击触摸屏1044两次。可以出于各种原因使用双击手势,包括但不限于分阶段放大或缩小。在一些配置中,触摸屏1044支持轻击并保持手势,其中用户轻击触摸屏1044并保持接触至少预先定义的时间。可以出于各种原因使用轻击和保持手势,包括但不限于打开特定于上下文的菜单。
在一些配置中,触摸屏1044支持平移手势,其中用户将手指放置在触摸屏1044上并在触摸屏1044上移动手指的同时保持与触摸屏1044的接触。可以出于各种原因使用平移手势,包括但不限于以受控速率移动屏幕、图像或菜单。还构想了多个手指平移手势。在一些配置中,触摸屏1044支持轻弹手势,其中用户在该用户想要屏幕移动的方向上滑动手指。可以出于各种原因使用轻弹手势,包括但不限于水平或垂直滚动通过菜单或页面。在一些配置中,触摸屏1044支持捏合和伸展手势,其中用户利用两个手指(例如,拇指和食指)在触摸屏1044上进行捏合动作或者将两个手指分开。可以出于各种原因使用捏合和伸展手势,包括但不限于逐渐放大或缩小网站、地图或图片。
尽管已经参考使用一个或多个手指执行手势来给出了上述手势,但是其它附属肢体(例如脚趾)或对象(例如手写笔)可以用于与触摸屏1044交互。因此,上述手势应该被应理解为是说明性的,而不应被解释为以任何方式进行限制。
数据I/O接口组件1046被配置为促进向计算设备输入数据和从计算设备输出数据。在一些配置中,数据I/O接口组件1046包括连接器,该连接器被配置为在计算设备与计算机***之间提供有线连接,例如用于同步操作目的。连接器可以是专用连接器或标准连接器,例如USB、微型USB、迷你USB、USB-C等等。在一些配置中,连接器是用于将计算设备与另一设备(例如对接站、音频设备(例如,数字音乐播放器)或视频设备)对接的对接连接器。
音频I/O接口组件1048被配置为向计算设备提供音频输入和/或输出能力。在一些配置中,音频I/O接口组件1046包括被配置为收集音频信号的麦克风。在一些配置中,音频I/O接口组件1048包括耳机插孔,该耳机插孔被配置为向耳机或其它外部扬声器提供连接。在一些配置中,音频接口组件1048包括用于输出音频信号的扬声器。在一些配置中,音频I/O接口组件1048包括光学音频电缆输出。
视频I/O接口组件1050被配置为向计算设备提供视频输入和/或输出能力。在一些配置中,视频I/O接口组件1050包括视频连接器,其被配置为从另一设备(例如,诸如DVD或蓝光播放器的视频媒体播放器)接收视频作为输入,或者将视频作为输出发送到另一设备(例如,监视器、电视机、或某种其它外部显示器)。在一些配置中,视频I/O接口组件1050包括高清晰度多媒体接口(“HDMI”)、迷你HDMI、微型HDMI、DisplayPort、或用于输入/输出视频内容的专有连接器。在一些配置中,视频I/O接口组件1050或其部分与音频I/O接口组件1048或其部分组合。
相机1052可以被配置为捕获静止图像和/或视频。相机1052可以利用电荷耦合器件(“CCD”)或互补金属氧化物半导体(“CMOS”)图像传感器来捕获图像。在一些配置中,相机1052包括闪光灯以帮助在低光环境下拍摄照片。相机1052的设置可以实现为硬件或软件按钮。
虽然未示出,但是也可以在计算设备架构1000中包括一个或多个硬件按钮。硬件按钮可以用于控制计算设备的某种操作方面。硬件按钮可以是专用按钮或多用途按钮。硬件按钮可以是机械按钮或基于传感器的。
所示出的电源组件1012包括一个或多个电池1054,这些电池可以连接到电池量表1056。电池1054可以是可再充电的或一次性的。可再充电电池类型包括但不限于锂聚合物、锂离子、镍镉和镍金属氢化物。每个电池1054可以由一个或多个电池单元制成。
电池量表1056可以被配置为测量电池参数,例如电流、电压和温度。在一些配置中,电池量表1056被配置为测量电池的放电率、温度、年龄和其它因素的影响,以预测在一定百分比误差内的剩余寿命。在一些配置中,电池量表1056向应用程序提供测量,该应用程序被配置为利用测量值来向用户呈现有用的电源管理数据。电源管理数据可以包括所使用的电池百分比、电池剩余百分比、电池状况、剩余时间、剩余容量(例如,以瓦时为单位)、电流汲取以及电压中的一个或多个。
电源组件1012还可以包括电源连接器(未示出),其可以与前述I/O组件1010中的一个或多个组件组合。电源组件1012可以经由电源I/O组件与外部电源***或充电装备对接。也可以利用其它配置。
可以认为本文所给出的公开内容包含以下条款中阐述的主题内容。
条款1:一种用于对数据实例进行去规范化的计算机实现的方法,所述方法包括:接收带注释模式,所述带注释模式包括用于对所述带注释模式的数据示例进行去规范化的注释;根据所述注释来对所述带注释模式的数据实例进行处理以生成多个子每对象索引(“子POI”),所述多个子POI至少包括包含所述数据实例的数据的目标子POI和包含所述数据实例所依赖于的源数据实例的数据的源子POI;对所述源数据实例进行处理以获得所述源子POI的数据;将所述多个子POI存储在POI存储装置中;以及促使将所述多个子POI发送到索引引擎以用于生成索引,以利用所述索引来实现对所述数据实例的搜索。
条款2:根据条款1所述的方法,其中,所述注释包括关于所述数据实例依赖于所述源数据实例的指示。
条款3:根据条款1-2所述的方法,其中,所述带注释模式中的所述注释包括关于所述带注释模式或者其部分的特定元素是索引的指示。
条款4:根据条款1-3所述的方法,还包括:识别与所述数据实例相关的相关子POI;对与所述相关子POI相关联的注释进行处理以从所述数据实例获得实例化值;响应于确定需要基于所述实例化值来创建一个或多个新的子POI而创建一个或多个新的子POI;利用所述实例化值来对所述相关子POI和所述一个或多个新的子POI进行处理以生成经处理的子POI;以及将所述经处理的子POI发送给所述POI存储装置。
条款5:根据条款1-4所述的方法,还包括:接收对数据实例的更新;识别所述POI存储装置中与所述数据实例相关的子POI;基于对所述数据实例的更新来生成针对所述相关子POI的子POI更新;以及将所述子POI更新发送到所述POI存储装置以对所述相关子POI进行更新。
条款6:根据条款1-5所述的方法,其中,所述子POI更新中的各个子POI更新包括以下各项中的至少一项:添加新的子POI、对现有子POI的改变、删除现有子POI的指示、或对现有子POI的变换。
条款7:根据条款1-6所述的方法,其中,所述变换包括对所述现有子POI的元素值的改变,并且其中,所述改变包括对所述元素值的可交换运算。
条款8:根据条款1-7所述的方法,还包括:接收一个或多个查询,对所述一个或多个查询进行分析以生成对模式进行注释的推荐;以及基于所述推荐来对所述模式进行注释。
条款9:一种装置,包括:处理器;以及其上存储有计算机可执行指令的计算机存储介质,所述计算机可执行指令在由所述处理器执行时使得所述处理器进行以下操作:注册带注释模式,所述带注释模式包括用于对所述带注释模式的数据示例进行去规范化的注释,根据所述注释来对所述带注释模式的数据实例进行处理以生成多个子每对象索引(“子POI”),所述多个子POI至少包括包含所述数据实例的数据的目标子POI和包含所述数据实例所依赖于的源数据实例的数据的源子POI,对所述源数据实例进行处理以获得所述源子POI的数据,以及促使将所述多个子POI存储在POI存储装置中,所述POI存储装置将所述多个子POI暴露于索引引擎,以实现基于所述多个子POI来生成索引,以使得能够利用所述索引来执行对所述数据实例的搜索。
条款10:根据条款9所述的装置,其中,所述注释包括关于所述数据实例依赖于所述源数据实例的指示。
条款11:根据条款9所述的装置,其中,所述计算机存储介质还具有用于以下操作的计算机可执行指令:响应于确定所述数据实例依赖于所述源数据实例而将用于对所述源数据实例进行处理的任务放置到任务队列中。
条款12:根据条款9-11述的装置,其中,所述源数据实例是在所述数据实例被处理之后预先确定的时间量之后被处理的。
条款13:根据条款9-12所述的装置,其中,所述源数据实例是在所述数据实例被处理之后立即被处理的。
条款14:根据条款9-13所述的装置,其中,所述计算机存储介质还具有用于以下操作的计算机可执行指令:识别与所述数据实例相关的相关子POI;对与所述相关子POI相关联的注释进行处理以从所述数据实例获得实例化值;响应于确定需要基于所述实例化值来创建一个或多个新的子POI而创建一个或多个新的子POI;利用所述实例化值来对所述相关子POI和所述一个或多个新的子POI进行处理以生成经处理的子POI;以及将所述经处理的子POI发送给所述POI存储装置。
条款15:根据条款9-14所述的装置,其中,所述计算机存储介质还具有用于以下操作的计算机可执行指令:接收对数据实例的更新;识别所述POI存储装置中与所述数据实例相关的子POI;基于对所述数据实例的更新来生成针对所述相关子POI的子POI更新;以及将所述子POI更新发送到所述POI存储装置以用于对所述相关子POI进行更新。
条款16:一种用于对数据实例进行去规范化的***,所述***包括:一个或多个计算设备,所述一个或多个计算设备被配置为:接收带注释模式,所述带注释模式包括用于对所述带注释模式的数据实例进行去规范化的注释,所述注释包括关于所述带注释模式的数据实例依赖于另一模式的数据实例的指示;接收所述带注释模式的第一数据实例;根据所述注释来对所述第一数据实例进行处理以生成针对所述第一数据实例的两个或更多个子每对象索引(“子POI”);接收所述第一数据实例所依赖于的所述另一模式的第二数据实例;对所述第二数据实例进行处理以对与所述第二数据实例相关的所述两个或更多个子POI中的至少一个子POI进行更新;POI存储装置,所述POI存储装置被配置为:存储包括所述两个或更多个子POI的多个数据实例的多个子POI;以及索引引擎,所述索引引擎被配置成:访问所述POI存储装置中的所述多个子POI,以及生成针对所述多个数据实例的索引以促进对所述多个数据实例的搜索。
条款17:根据条款16所述的***,其中,所述带注释模式中的所述注释还包括关于所述模式或者其部分的特定元素要被索引的指示。
条款18:根据条款16-17所述的***,其中,对所述第二数据实例进行处理包括:识别与所述第二数据实例相关的相关子POI;对与所述相关子POI相关联的注释进行处理以从所述第二数据实例获得实例化值;响应于确定需要基于所述实例化值来创建一个或多个新的子POI而创建一个或多个新的子POI;利用所述实例化值来对所述相关子POI和所述一个或多个新的子POI进行处理以生成经处理的子POI;以及将所述经处理的子POI发送给所述POI存储装置。
条款19:根据条款16-18所述的***,其中,所述注释包括将由从数据实例获得的元素的实例化值来替代的一个或多个元素,并且其中,对所述子POI进行处理是通过调用被配置为将所述实例化值处理成所述子POI的运算符来执行的。
条款20:根据条款16-19所述的***,其中,所述一个或多个计算设备还被配置为:接收对数据实例的更新;识别所述POI存储装置中与所述数据实例相关的子POI;基于对所述数据实例的更新来生成针对所述相关子POI的子POI更新;以及将所述子POI更新发送到所述POI存储装置以对所述相关子POI进行更新。
基于前述内容,应该意识到,本文给出了用于对数据实例进行去规范化的概念和技术。虽然以特定于结构特征和、方法动作和计算机可读介质的语言描述了本文所给出的主题内容,但要理解,所附权利要求中定义的发明并不一定限于本文所描述的特定特征、动作或介质。相反,特定特征、动作和介质是作为实现各权利要求的示例形式而公开的。
上述主题内容是仅通过说明的方式提供的,并且不应该被解释为进行限制。可以对本文所描述的主题内容作出各种修改和改变而无需遵循示出和描述的示例性方面和应用,并且不会脱离所附权利要求中阐述的本发明的真实精神和范围。
Claims (15)
1.一种用于对数据实例进行去规范化的计算机实现的方法,所述方法包括:
接收带注释模式,所述带注释模式包括用于对所述带注释模式的数据实例进行去规范化的注释;
根据所述注释来对所述带注释模式的数据实例进行处理,以生成多个子每对象索引(“子POI”),所述多个子POI至少包括包含所述数据实例的数据的目标子POI和包含所述数据实例所依赖于的源数据实例的数据的源子POI;
对所述源数据实例进行处理以获得所述源子POI的数据;
将所述多个子POI存储在POI存储装置中;以及
促使将所述多个子POI发送到索引引擎以用于生成索引,从而利用所述索引来实现对所述数据实例的搜索。
2.根据权利要求1所述的方法,其中,所述注释包括关于所述数据实例依赖于所述源数据实例的指示。
3.根据权利要求1所述的方法,其中,所述带注释模式中的所述注释包括关于所述带注释模式或者其部分的特定元素是索引的指示。
4.根据权利要求1所述的方法,还包括:
识别与所述数据实例相关的相关子POI;
对与所述相关子POI相关联的注释进行处理以从所述数据实例获得实例化值;
响应于确定需要基于所述实例化值来创建一个或多个新的子POI而创建一个或多个新的子POI;
利用所述实例化值来对所述相关子POI和所述一个或多个新的子POI进行处理以生成经处理的子POI;以及
将所述经处理的子POI发送给所述POI存储装置。
5.根据权利要求1所述的方法,还包括:
接收对数据实例的更新;
识别所述POI存储装置中与所述数据实例相关的子POI;
基于对所述数据实例的更新来生成针对所述相关子POI的子POI更新;以及
将所述子POI更新发送到所述POI存储装置以对所述相关子POI进行更新。
6.根据权利要求5所述的方法,其中,所述子POI更新中的各个子POI更新包括以下各项中的至少一项:添加新的子POI、对现有子POI的改变、删除现有子POI的指示、或对现有子POI的变换。
7.根据权利要求6所述的方法,其中,所述变换包括对所述现有子POI的元素值的改变,并且其中,所述改变包括对所述元素值的交换操作。
8.根据权利要求1所述的方法,还包括:
接收一个或多个查询;
对所述一个或多个查询进行分析以生成对模式进行注释的推荐;以及
基于所述推荐来对所述模式进行注释。
9.一种装置,包括:
处理器;以及
其上存储有计算机可执行指令的计算机存储介质,所述计算机可执行指令在由所述处理器执行时使得所述处理器进行以下操作:
注册带注释模式,所述带注释模式包括用于对所述带注释模式的数据示例进行去规范化的注释,
根据所述注释来对所述带注释模式的数据实例进行处理,以生成多个子每对象索引(“子POI”),所述多个子POI至少包括包含所述数据实例的数据的目标子POI和包含所述数据实例所依赖于的源数据实例的数据的源子POI,
对所述源数据实例进行处理以获得所述源子POI的数据,以及
促使将所述多个子POI存储在POI存储装置中,所述POI存储装置将所述多个子POI暴露于索引引擎,以实现基于所述多个子POI来生成索引,从而能够利用所述索引来执行对所述数据实例的搜索。
10.根据权利要求9所述的装置,其中,所述注释包括关于所述数据实例依赖于所述源数据实例的指示。
11.根据权利要求10所述的装置,其中,所述计算机存储介质还具有用于以下操作的计算机可执行指令:响应于确定所述数据实例依赖于所述源数据实例而将用于对所述源数据实例进行处理的任务放置到任务队列中。
12.根据权利要求9所述的装置,其中,所述源数据实例是在所述数据实例被处理之后预先确定的时间量之后被处理的。
13.根据权利要求9所述的装置,其中,所述源数据实例是在所述数据实例被处理之后立即被处理的。
14.根据权利要求9所述的装置,其中,所述计算机存储介质还具有用于以下操作的计算机可执行指令:
识别与所述数据实例相关的相关子POI;
对与所述相关子POI相关联的注释进行处理以从所述数据实例获得实例化值;
响应于确定需要基于所述实例化值来创建一个或多个新的子POI而创建一个或多个新的子POI;
利用所述实例化值来对所述相关子POI和所述一个或多个新的子POI进行处理以生成经处理的子POI;以及
将所述经处理的子POI发送给所述POI存储装置。
15.根据权利要求9所述的装置,其中,所述计算机存储介质还具有用于以下操作的计算机可执行指令:
接收对数据实例的更新;
识别所述POI存储装置中与所述数据实例相关的子POI;
基于对所述数据实例的更新来生成针对所述相关子POI的子POI更新;以及
将所述子POI更新发送到所述POI存储装置以用于对所述相关子POI进行更新。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/227,745 | 2016-08-03 | ||
US15/227,745 US10540332B2 (en) | 2016-08-03 | 2016-08-03 | Efficient denormalization of data instances |
PCT/US2017/044057 WO2018026610A1 (en) | 2016-08-03 | 2017-07-27 | Efficient denormalization of data instances |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109564577A true CN109564577A (zh) | 2019-04-02 |
CN109564577B CN109564577B (zh) | 2023-06-09 |
Family
ID=59558494
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780049045.XA Active CN109564577B (zh) | 2016-08-03 | 2017-07-27 | 对数据实例的高效去规范化 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10540332B2 (zh) |
EP (1) | EP3494492A1 (zh) |
CN (1) | CN109564577B (zh) |
WO (1) | WO2018026610A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108733681B (zh) * | 2017-04-14 | 2021-10-22 | 华为技术有限公司 | 信息处理方法及装置 |
US12001422B2 (en) * | 2019-03-28 | 2024-06-04 | International Business Machines Corporation | Accuracy of QA systems by normalizing logical queries |
US11216460B2 (en) * | 2019-05-13 | 2022-01-04 | Salesforce.Com, Inc. | Updating of a denormalized database object after updating, deleting, or inserting a record in a source database object |
US20220277054A1 (en) * | 2021-02-26 | 2022-09-01 | State Farm Mutual Automobile Insurance Company | Data migration of search indexes across search-engine deployments |
CN113985760B (zh) * | 2021-09-30 | 2024-03-26 | 秦皇岛远舟工业气体有限公司 | 应用于监测报警***的基于arm的开关量处理方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6493721B1 (en) * | 1999-03-31 | 2002-12-10 | Verizon Laboratories Inc. | Techniques for performing incremental data updates |
CN1856783A (zh) * | 2002-07-26 | 2006-11-01 | 罗恩·埃弗里特 | 使用参考与一般数据项关联的数据管理结构 |
CN102542039A (zh) * | 2010-12-27 | 2012-07-04 | 微软公司 | 远程执行的应用的发现 |
US20140324882A1 (en) * | 2013-04-30 | 2014-10-30 | Tummarello GIOVANNI | Method and system for navigating complex data sets |
US20150302058A1 (en) * | 2014-04-17 | 2015-10-22 | Wisconsin Alumni Research Foundation | Database system with highly denormalized database structure |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8543566B2 (en) * | 2003-09-23 | 2013-09-24 | Salesforce.Com, Inc. | System and methods of improving a multi-tenant database query using contextual knowledge about non-homogeneously distributed tenant data |
US8239505B2 (en) | 2007-06-29 | 2012-08-07 | Microsoft Corporation | Progressively implementing declarative models in distributed systems |
US8706715B2 (en) * | 2009-10-05 | 2014-04-22 | Salesforce.Com, Inc. | Methods and systems for joining indexes for query optimization in a multi-tenant database |
JP2013535616A (ja) | 2010-08-03 | 2013-09-12 | ファイアースター エンジニアリング,エルエルシー | 高効率エネルギー変換 |
US8527497B2 (en) | 2010-12-30 | 2013-09-03 | Facebook, Inc. | Composite term index for graph data |
US8682932B2 (en) | 2012-02-16 | 2014-03-25 | Oracle International Corporation | Mechanisms for searching enterprise data graphs |
US9031932B2 (en) | 2012-09-06 | 2015-05-12 | Oracle International Corporation | Automatic denormalization for analytic query processing in large-scale clusters |
US11977549B2 (en) * | 2016-09-15 | 2024-05-07 | Oracle International Corporation | Clustering event processing engines |
-
2016
- 2016-08-03 US US15/227,745 patent/US10540332B2/en active Active
-
2017
- 2017-07-27 WO PCT/US2017/044057 patent/WO2018026610A1/en unknown
- 2017-07-27 CN CN201780049045.XA patent/CN109564577B/zh active Active
- 2017-07-27 EP EP17749291.5A patent/EP3494492A1/en not_active Ceased
-
2020
- 2020-01-10 US US16/740,081 patent/US11442905B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6493721B1 (en) * | 1999-03-31 | 2002-12-10 | Verizon Laboratories Inc. | Techniques for performing incremental data updates |
CN1856783A (zh) * | 2002-07-26 | 2006-11-01 | 罗恩·埃弗里特 | 使用参考与一般数据项关联的数据管理结构 |
CN102542039A (zh) * | 2010-12-27 | 2012-07-04 | 微软公司 | 远程执行的应用的发现 |
US20140324882A1 (en) * | 2013-04-30 | 2014-10-30 | Tummarello GIOVANNI | Method and system for navigating complex data sets |
US20150302058A1 (en) * | 2014-04-17 | 2015-10-22 | Wisconsin Alumni Research Foundation | Database system with highly denormalized database structure |
Non-Patent Citations (1)
Title |
---|
JYOTI SINGH ET AL.: "a convenient way from normalized database to denormalized database", 《INTERNATIONAL JOURNAL OF COMPUTER COMMUNICATION AND INFORMATION SYSTEM》 * |
Also Published As
Publication number | Publication date |
---|---|
US20180039656A1 (en) | 2018-02-08 |
WO2018026610A1 (en) | 2018-02-08 |
US20200151156A1 (en) | 2020-05-14 |
CN109564577B (zh) | 2023-06-09 |
US10540332B2 (en) | 2020-01-21 |
EP3494492A1 (en) | 2019-06-12 |
US11442905B2 (en) | 2022-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10467298B2 (en) | Document collaboration discovery | |
CN104350493B (zh) | 将数据变换成可消费的内容 | |
CN104471564B (zh) | 在将数据变换成可消费内容时创建变型 | |
CN109564577A (zh) | 对数据实例的高效去规范化 | |
US10803189B2 (en) | Location-based access control of secured resources | |
CN109074550A (zh) | 上下文感知调度特例 | |
US20130007063A1 (en) | Method and apparatus for real-time processing of data items | |
CN104520851A (zh) | 基于电子表格应用中的数据点生成查询 | |
CN106796581A (zh) | 用于内容数据的布局的基于用户意图的生成 | |
CN107077460A (zh) | 结构化样本创作内容 | |
CN106537382B (zh) | 查询建议 | |
CN106796518A (zh) | 基于意图的反馈 | |
CN105934756A (zh) | 索引电子表格结构属性以供搜索 | |
CN105393222B (zh) | 网络应用与本地应用之间的渲染委托 | |
CN109690520A (zh) | 通过逻辑标记共享文档 | |
US20160012129A1 (en) | Visualization suggestions | |
CN109074286A (zh) | 对使用***资源的应用的控制 | |
US20180143024A1 (en) | Automated generation of indoor map data | |
US10795952B2 (en) | Identification of documents based on location, usage patterns and content | |
US20210158304A1 (en) | Enhanced views and notifications of location and calendar information | |
EP3766025A1 (en) | Driving contextually-aware user collaboration based on user insights | |
CN108885640A (zh) | 生成服务应用 | |
CN105408866B (zh) | 远程脚本环境中的上下文关联性 | |
CN107810489A (zh) | 应用与设备之间的无缝转换 | |
KR20170038823A (ko) | 문서에서의 데이터 검색 이용 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |