掌桥专利:专业的专利平台
掌桥专利
首页

用于异构图的高效的存储器中关系表示

文献发布时间:2023-06-19 09:23:00


用于异构图的高效的存储器中关系表示

相关案例

于2013年6月12日提交的标题为“Techniques For Maintaining Column VectorsOf Relational Data Within Volatile Memory”的美国专利号9,201,944通过引用并入本文。

技术领域

本公开涉及存储器中图形格式。本文给出的是用于对异构图进行编码以便高效使用的技术。

背景技术

特性图(property graph)由于它们对实体之间的关系的显式和细粒度表示而正在成为数据分析中越来越重要的工具。特性图由表示实体的顶点和将顶点连接起来并且可以是有向(即,边)或者无向(即,弧)的关系组成。顶点、边和弧可以具有描述它们的特性或属性。在一些技术中,对于特性图,顶点和边是未类型化的并且具有相同的通用特性集,这些特性可以为空(NULL)或者对于一些顶点或边具有默认和/或无效值。

以这种方式,特性图非常适合处理完全非结构化的数据。但是,在现实世界中,图、顶点和边常常具有类型的自然概念,即,为他们中的每一个定义的特定特性集(例如,表示人的顶点类型,其特性为“名字”、“出生日期”和“地址”,以及表示书籍的另一种顶点类型,其特性为“标题”、“作者”和“ISBN”)。这样的图是异构的,其包含多于一种的顶点和/或边。

我们用本发明解决的问题是如何以适合于支持图分析算法和查询的高效方式在存储器中表示异构图。当前的图分析系统通常实现特性图模型,即,它们将顶点、边和弧视为未类型化的。但是,这种方法在处理异构图时导致两方面效率低下。第一方面是效率低下的存储器利用,因为不作为顶点或边类型的部分的所有特性都仍将具有该元素的默认或NULL值,从而消耗了额外的存储器。

第二方面是在执行仅访问类型子集的计算时效率低下的存储器访问,因为整个图的顶点(或边)而不管其语义差异都被整合到所有顶点(或边)的同一集合中。此外,商业系统通常不支持既具有有向边又具有无向弧的混合图。

附图说明

在附图中:

图1是描绘实施例中高效地在存储器中存储异构图的顶点的示例计算机的框图;

图2是描绘实施例中用于高效地在存储器中存储和使用异构图的顶点的示例处理的流程图;

图3是描绘实施例中用于高效地在存储器中执行异构图的查询的示例处理的流程图;

图4是描绘实施例中计算机的示例随机存取存储器(RAM)的框图,该计算机为图中的每个顶点(与类型无关)生成紧凑且全局唯一的标识符;

图5是描绘实施例中的示例计算机的框图,该示例计算机为了空间效率和加速的访问而以压缩稀疏行(CSR)格式对异构图的有向边进行编码;

图6是描绘实施例中用于为了空间效率和加速的访问而以CSR格式对图的有向边进行编码的示例处理的流程图;

图7是描绘实施例中为了空间效率和加速的访问而填充的边缘特性向量的示例计算机的框图;

图8是描绘实施例中用于为了空间效率和加速的访问而填充边属性向量的示例处理的流程图;

图9是描绘实施例中的示例RAM的框图,该RAM包含边端点向量,该边缘端点向量根据其源顶点针对访问有向边进行优化,诸如当在每条边的方向上自然遍历边时;

图10是描绘实施例中用于为了空间效率和加速的向后(即,与有向边的自然方向相反)遍历而以CSR格式对图的有向边进行编码的示例处理的流程图;

图11是描绘实施例中的示例RAM的框图,该示例RAM包含用于无向弧的端点向量,该无向弧不是有向边。

图12是描绘实施例中用于对具有同质(homogeneous)端点的无向弧进行双向编码的示例处理的流程图;

图13是图示可以在其上实现本发明的实施例的计算机系统的框图;

图14是图示可以用于控制计算系统的操作的基本软件系统的框图。

具体实施方式

在下面的描述中,出于解释的目的,阐述了许多具体细节以便提供对本发明的透彻理解。但是,将显而易见的是,可以在没有这些具体细节的情况下实践本发明。在其它情况下,以框图形式示出了众所周知的结构和设备,以避免不必要地使本发明模糊。

本文根据以下提纲来描述各实施例:

1.0总体概述

2.0示例计算机

2.1数据源

2.2异构图

2.3随机存取存储器

2.4顶点特性

2.5顶点编码

3.0示例顶点加载处理

4.0示例查询处理

4.1查询加速

4.2改进的性能

5.0全局唯一标识符

5.1Ram内容

5.2识别对

6.0拓扑编码

6.1关系

6.2外键

6.3端点向量

7.0示例拓扑编码处理

7.1目的地向量

7.2源向量

7.3性能改进

8.0边特性存储

9.0填充边特性

10.0双向遍历

10.1反向端点向量

11.0示例反向编码处理

11.1反向目的地向量

11.2反向源向量

11.3边偏移量平移

12.0无向弧

12.1具有同质端点的弧

13.0双向编码具有同质端点的弧

13.1前向编码

13.2后向编码

14.0硬件概述

15.0软件概述

16.0云计算

1.0总体概述

本文中提供了用于在存储器中高效表示异构图的技术。在实施例中,图的顶点和边按类型分离。顶点或边的类型的每个特性具有存储在相应的向量中的值。相同类型的有向边或无向边以压缩稀疏行(CSR)格式存储。CSR格式或多或少地重复,以用于在前向或者反向方向进行的边遍历。边映射转化从反向方向遍历获得的边偏移量,以与前向方向中预期边偏移量的数据结构一起使用。后续的按顶点或边的类型或特性的过滤和/或遍历需要最小的数据访问和最大的数据局部性,从而增加图的高效使用。

在实施例中,计算机将驻留在存储器中的图的每个顶点与唯一偏移量相关联。对于数据源中多个关系中的每个关系,将发生以下情况。该关系变得与驻留在存储器中的以下对象相关联:图中用于将特定源顶点类型的源顶点与特定目的地顶点类型的目的地顶点连接的独特(distinct)边类型、已排序的独特源向量、以及已排序的独特目的地向量。对于关系的每个实例,在图中创建表示关系的实例的有向边作为该关系的独特边类型的实例。有向边包括图的源顶点和图的目的地顶点。对于特定源顶点类型的每个顶点,将发生以下情况。对于具有所述顶点作为其源顶点的独特边类型的每条有向边,计算机将有向边的目的地顶点的唯一偏移存储到独特目的地向量中。将独特目的地向量内包含唯一偏移量的最后位置存储到独特源向量中的所述顶点的唯一偏移量处。随后,通过访问独特边类型的关系的独特源向量和/或该关系的独特目的地向量来加速图的读取。

2.0示例计算机

图1是描绘实施例中的示例计算机100的框图。计算机100高效地在存储器中存储异构图的顶点。计算机100可以是一个或多个计算机,诸如嵌入式计算机、个人计算机、机架服务器(诸如刀片、大型机、虚拟机)或在符号处理期间使用暂用存储器的任何计算设备。

计算机100可以加载和处理图160,诸如用于查询、变异或分析。图160是互连的顶点(诸如顶点181-182)的逻辑图。顶点181-182可以具有特性(诸如186-187),并且图160可以是特性图。

2.1数据源

图160是由诸如110之类的(一个或多个)数据源提供的底层数据的逻辑视图。数据源110可以是持久数据存储库,诸如关系数据库、列式数据库、特性存储库、资源描述框架(RDF)三重存储库、电子表格、Hadoop文件系统(HDFS)文件或数据文件。数据源110可以自发地生成数据,诸如当数据源110是计算机程序、web服务或数据馈送(诸如流)时。

数据源110包含记录(诸如141-142),该记录可以是元组、行或其它结构单元。记录141-142可以聚合存储或多或少的原子值的数据字段(诸如131-132)。数据源110可以具有不同类型(诸如121-122)或相同类型(诸如122)的记录(诸如141-142)。记录类型122可以具有数据字段131-132,而记录类型121可以具有其它数据字段。在实施例中,数据源110是关系数据库;记录类型121-122是关系数据库中的表;记录141-142是数据库表中的行;并且数据字段131-132是该数据库表中的列。

如图所示,图160和数据源110驻留在同一计算机100中。但是,数据源110可以位于远程(即,在计算机100外部),诸如驻留在交叉安装的文件系统、网络附加存储装置(NAS)、存储区域网络(SAN)或诸如根据简单对象访问协议(SOAP)、公共网关接口(CGI)和/或代表性状态转移(REST)通过开放数据库连接(ODBC)访问的关系数据库管理系统(RDBMS)或通过超文本传输协议(HTTP)访问的web服务之类的远程服务中。数据源110可以根据诸如可扩展标记语言(XML)、JavaScript对象表示法(JSON)、逗号分隔值(CSV)、Java对象序列化或专有/原生二进制格式之类的编码格式来序列化记录141-142以供计算机100消耗。

2.2异构图

图160是异构的,这意味着顶点(诸如181-182)可以具有相同类型(诸如172)或不同类型(诸如171-172)。计算机100可以具有诸如编组或数据绑定逻辑之类的映射,该映射使得从记录类型121-122的子集生成顶点类型171-172的子集。例如,一种记录类型(诸如122)可以映射到一种顶点类型172。其它映射是可能的,诸如一种记录类型映射到许多顶点类型,许多记录类型映射到一种顶点类型,或多对多映射。

2.3随机存取存储器

对图160的快速访问可以要求低时延存储装置,诸如随机存取存储器(RAM),它可能是易失性的(诸如105),诸如廉价且密集的动态RAM(DRAM)或快速静态RAM(SRAM)。在未示出的实施例中,存储器105是非易失性的(NVRAM),诸如闪存。因为由于资金成本,RAM 105通常具有比盘存储更少的容量,所以计算机100对顶点181-182使用密集的(即,空间高效的)存储格式。

2.4顶点特性

顶点存储格式对于诸如186-187之类的顶点特性是列式的,顶点特性被切开(即,按特性分开),使得每个特性被存储到独特特性向量(诸如191-192)中。如图所示,字段131-132分别与特性186-187对应。顶点181-182中的每一个可以具有其自己用于特性186-187的值。例如,顶点181可以已经从记录141(该记录141的字段131的值为红色)生成。因此,对于顶点181,颜色特性187的值可以是红色。同样,顶点182的颜色187值可以是蓝色,因为记录142的字段131的值是蓝色。因此,相同类型的记录具有相同的字段集,并且相同类型的顶点具有相同的特性集。

顶点类型172的顶点181-182的颜色特性187的所有值(例如,红色、蓝色)都存储在特性向量191中。同样,特性186的所有值都存储在向量192中。一些实施例可以具有压缩向量191的各种方式,诸如位或字节打包(即,没有用于对准的填充)、字典编码或游程编码。特性向量存储还可以加快处理,诸如通过减少虚拟存储器交换或通过诸如利用单指令多数据(SIMD)和/或(一个或多个)切片寄存器(即,将来自向量191的多个值打包到同一个中央处理器(CPU)寄存器中)促进突发模式处理。针对特性向量(也称为列向量)的技术在标题为“Techniques For Maintaining Column Vectors Of Relational Data Within VolatileMemory”的美国专利号9,201,944中进行了详述,该专利通过引用并入本文。

2.5顶点编码

顶点类型172的每个顶点可以具有(例如,基于零的)独特序列号。序列号的序列可以对不同顶点类型重用,只要每个序列号在给定的顶点类型内是唯一的即可。例如,两个顶点类型171-172都可以具有其自己的具有相同序列号(诸如零)的顶点。虽然未示出,但是顶点类型171-172中的每一个可以具有该类型的顶点的数组。该数组内给定顶点的偏移量可以被用作该顶点的(例如,隐含的)序列号。例如,顶点181-182都具有顶点类型172,并且可以以不同的偏移量(诸如分别为零和一)驻留在同一个顶点数组中。

为了说明的目的,特性向量191被示为具有两列:偏移量和值。但是,只要将特性值以与将顶点181-182存储在顶点类型172的顶点数组(未示出)中相同的排序存储在用于顶点181-182的特性向量191-192中,顶点数组中的顶点182的偏移量(例如,序列号)就可以被用于随机访问用于顶点182的特性向量191-192。因此,所示的向量191的偏移列可以是未实际存储的隐含列。因此,在实施例中,向量191包含的唯一数据是值红色和蓝色。

3.0示例顶点加载处理

图2是描绘实施例中计算机100高效地在存储器中存储和使用异构图的顶点的流程图。参考图1来讨论图2。

所描绘的处理由计算机100在加载和使用两个阶段执行。在加载期间,基于来自(一个或多个)数据源的数据在存储器中创建图。加载发生在步骤201-205期间,对于由图的(一个或多个)数据源提供的每种记录类型,都重复进行加载。加载可以按数据源或按记录类型并行化。

加载发生在准备和编码两个阶段。在步骤201-202期间进行准备,在此期间在存储器内创建并链接空数据结构。步骤201将每个记录类型与在存储器中构造的图中的独特顶点类型相关联。

在实施例中,咨询静态数据绑定映射,该静态数据绑定映射指示记录类型121-122分别映射到顶点类型171-172。在没有静态数据绑定的实施例中,可以询问数据源110,并且可以发现记录类型121-122。从关于记录类型121-122的元数据,可以生成顶点类型171-172。

在实施例中,记录类型到顶点类型的映射不需要是一对一的。例如,行可以被分离,诸如当记录类型122映射到两个顶点类型171-172时,使得红色记录(诸如141)映射到顶点类型171,而蓝色记录(诸如142)映射到顶点类型172。在另一个示例中,字段可以被分开,诸如当字段131、颜色187和顶点类型172如图所示绑定时,并且虽然另有所示,但是字段132和特性186可以绑定到顶点类型171。在另一个示例中,记录类型121-122都映射到顶点类型172。

步骤202将记录类型中的每个数据字段与驻留在存储器中的顶点特性向量相关联。例如,绑定或推论可以确定数据字段131-132映射到顶点特性186-187,如图所示。基于该信息,创建空的顶点特性向量191-192。

在步骤203-205期间发生顶点编码,对于记录类型的每个记录重复该顶点编码。顶点或顶点的子集可以是编码期间并行化的单位。步骤203-205的每次重复填充一个顶点。在实施例中,在步骤201或202中创建空图160,并且可以在初始化每个顶点时将顶点添加到图160。在实施例中,直到稍晚但不晚于在步骤205之后才创建空图160,并且直到所有顶点都被初始化才将顶点添加到图160。

步骤203从具有与顶点类型对应的记录类型的记录创建具有该顶点类型的顶点。例如,从记录141创建顶点181。

步骤204将唯一偏移量整数指派给顶点。例如,顶点181可以存储到存储器中的顶点数组(未示出)中数组内的独特偏移量处。该偏移量可以被用于将顶点识别为在该顶点类型中是独特的,但是不一定跨多个顶点类型是独特的。全局唯一的标识符在本文后面讨论。

步骤205存储顶点特性。来自记录的每个数据字段的值都存储到与该字段相关联的独特顶点特性向量中。在与步骤204中指派给顶点的偏移量相同的偏移量处将值存储到特性向量中。例如,值蓝色从记录142的字段131复制到顶点182的颜色特性187,该颜色特性187存储在向量191内的偏移量一处。

在步骤205之后,完成图加载,并且图160准备好使用。在实施例中,在步骤205之后使得图160是只读的。

在步骤206期间发生图使用。例如,可以读取顶点的特性。如上所述,由于简化的存储格式,读取被加速。对一个顶点的特性的随机访问或者对许多顶点的特性的扫描都被加速。例如,计算机100可以接收并执行对图160的查询,以基于顶点特性找到个体顶点或多顶点路径或子图。查询处理在图3中进一步讨论。

4.0示例查询处理

图3是描绘实施例中计算机100高效地执行对存储器中的异构图的查询的流程图。参考图1-2来讨论图3。

在这个示例中,查询执行需要图导航,该图导航需要沿着边从一个顶点到另一个顶点的反复遍历。像顶点一样,边可以具有类型。每条边将两个顶点连接在一起或者将一个顶点连接到自身。像顶点一样,边可以具有类型、特性和特性向量,特性向量的偏移量与边类型的边向量对准。边存储和使用在本文后面讨论。

步骤301是准备性的。步骤301假定根据图1-2将图加载在存储器中。步骤301促进图2的步骤201-202的图加载。

步骤301将顶点类型与边类型相关联并加载边。图遍历取决于图拓扑,因为图遍历是通过顶点的边向外发生的。因此,步骤301确立在从给定顶点遍历的情况下哪些边类型(和边)可用。

步骤302-306可以在图2的步骤206期间发生。在步骤302中,接收图查询。可以用诸如Sparql之类的图语言或诸如标准查询语言(SQL)、可扩展标记语言路径(XPath)、通过示例的查询(QBE)、正则表达式、或特定于域(例如,图)的语言(DSL)之类的另一种语言来表达查询。查询可以提及图160的顶点和边的类型和特性、常量(即,文字)和运算符。查询可以指定过滤、导航和投影。

4.1查询加速

查询的高效执行在步骤303-306期间发生。步骤303检测顶点(和边)的哪些类型和特性与查询有关。步骤303可以构造查询的解析数(AST)并在语义上分析查询的解析树。至少,如果在查询中陈述(和/或在AST中出现),那么顶点和边的类型和特性是相关的。

对每种顶点类型重复步骤304-306。步骤304检测顶点类型是否参与查询。步骤303-304可以有助于制定查询执行计划。

根据步骤304,不相关的顶点类型被跳过,这是高效的。在慢吞吞地加载顶点和/或顶点类型的实施例中,跳过可以意味着推迟或避免加载一些顶点。同样,顶点特性可以各自不相关、被跳过以及不被加载。例如,对冷(即,未完全加载的)图的第一次查询可以使得顶点特性向量191被加载,而向量192不被加载,因为该查询仅访问颜色187,而没有访问特性186。

步骤305访问顶点类型的相关特性向量。步骤305可能需要随机访问特定顶点的特性或扫描许多顶点的特性。例如,可以将连续存储在顶点特性向量191中的多个值同时加载(例如,打包)到同一个CPU寄存器中,和/或通过单指令多数据(SIMD)或其它向量硬件加速(诸如利用图形处理单元(GPU))一起处理。

4.2改进的性能

因此,空间节省和加速的高效出现在两个层次上。首先,顶点类型的异构性有助于最小化被查询访问甚至加载的顶点数量。其次,列(即,特性)切开和存储在单独的向量中有助于:a)最小化被查询访问或甚至加载的特性值数量,b)诸如通过字典或游程编码对特性向量进行压缩,这可能在加载特性向量期间或之后发生;以及c)向量数据并行性,诸如通过SIMD或GPU。

这些许多高效对于将顶点和边视为同质或泛化的图加载技术或多或少是不可用的。各种空间节省(例如,避免加载、避免读取、向量打包和/或其它向量压缩)可能造成各种层次的加速,诸如减少的虚拟存储器抖动、增加的硬件高速缓存局部性、减少的总线饱和或等待状态以及硬件数据并行性。

边遍历在步骤306期间发生,该步骤检查(一个或多个)顶点的边以沿着路径转向或修剪子图。因为边遍历有助于相邻顶点的迭代,所以步骤306可以有助于诸如广度优先搜索(BFS)或深度优先搜索(DFS)之类的探索算法。边存储和访问技术在本文后面讨论。

5.0全局唯一标识符

图4是描绘实施例中的计算机(未示出)的示例随机存取存储器(RAM)405的框图。如针对图1所讨论的,可以通过将相同类型的顶点偏移到该类型的顶点数组中来识别相同类型的顶点,并且对于其它顶点类型,偏移量序列可能冲突(即,被重用)。而这个计算机为图中的每个顶点(不管类型)生成标识符,该标识符紧凑且全局唯一。这个计算机可以是计算机100的实施方式。

5.1RAM内容

RAM 405存储异构图(未示出),该异构图包括顶点类型470(其可以具有诸如480之类的顶点)以及可以各自存储在诸如491-492之类的特性向量中的各种顶点特性。向量491-492中的每一个存储多个顶点的特性值。向量491-492的内容按照顶点具有与顶点类型470的顶点数组(未示出)相同的排序。例如,顶点480可以是顶点数组中的第一顶点(即,偏移量零)。因此,向量491-492的顶行(即,偏移量零)具有顶点480的特性值。

5.2识别对

因此,在识别对420内的偏移量字段中记录零。识别对420唯一且全局地识别顶点480。但是,顶点偏移量不足以唯一且全局地识别顶点。因此,识别对420还具有附加字段以确保全局唯一性。附加字段应当识别哪种类型是顶点480。在实施例中,附加字段记录顶点类型470的名称。在实施例中,附加字段是唯一地识别顶点类型470的序列号。顶点类型470具有序列号410,其值为5,这被记录在顶点(诸如480)的识别对中。

识别对420的序列号和偏移量字段可以是整数。序列号不必具有与偏移量相同的宽度(即,存储尺寸),并且它们可以被字节打包或位打包在一起,使得识别对420的宽度包括序列号和偏移量字段的宽度之和。对于速度,识别对420的宽度不应当超过通常为64位的机器字(例如,CPU寄存器宽度)。顶点过多的图可能需要多达128位(即,双字)用于识别对420。

或多或少相同的技术可以被用于全局地识别连接顶点的边。边的RAM存储在本文后面讨论。除图4以外,本文中的其它附图还描绘了为仅在顶点类型或边类型内唯一的顶点和边标识符设计的技术。根据图4,全局唯一标识符可以有助于按类型的过滤,因为顶点或边的类型被编码(例如,序列号)到识别对420中。全局唯一标识符对于客户端应用或自组织(ad hoc)客户端可能也是很感兴趣的。

6.0拓扑编码

图5是描绘实施例中的示例计算机500的框图。为了空间效率和加速的访问,计算机500以压缩稀疏行(CSR)格式对异构图的有向边进行编码。计算机500可以是计算机100的实施方式。

6.1关系

计算机500如下基于来自数据源510的数据将图560加载到RAM 505中。除了提供用于顶点0-2的记录(未示出)之外,数据源510还提供关系520用于创建边0-4。关系520的每个实例0-4为相应的边0-4提供数据。例如,如图所示,边1是从实例1生成的。

为了说明,关系520被描绘为表格。每一行表示关系520的一个实例。关系520具有识别每个实例的有向端点顶点的列530和540。例如,实例1-2是相同两个顶点之间相反方向上的边。实例4是自反的(reflexive)(即,将顶点连接到其自身)。

在实施例中,数据源520是关系数据库。关系520可以如下基于在一个或三个表中的一个或两个外键以各种方式在关系数据库表内编码。实例0-4中的每一个都连接(即,联接)两个表。

6.2外键(foreign key)

例如,列530和540可以识别相应的源表和目的地表(未示出)的行。源530可以是源表内的主键列。目的地540可以被复制为两列:a)目的地表中的主键列,以及b)源表中的外键列。这可以实现一对一或一对多的关系。在另一个示例中,源530可以替代地是复制列,并且目的地表可以存储外键列。当源表和目的地表是相同的表时,自反性(诸如对于实例4)是可能的。

另一个示例可以涉及第三个表作为关联表。例如,关系520可以是与源表和目的地表分开的关联表。照此,列530和540两者都是分别交叉引用源表和目的地表的外键。这可以实现一对一、一对多或多对多关系。不管有多少表和键用于关系520,都可以隐含实例列(即,是说明性的,而不是实际存储的)。

6.3端点向量

通过填充边端点向量570和580以及特性向量的集合(未示出),从实例0-4创建边0-4。如上所述,以类似于顶点特性向量的方式对边特性向量进行编码。例如,对于每种类型的边,可以存在边的数组(未示出)。边特性向量的内容可以共享边数组的边排序。

如下基于边的特殊排序来对边端点向量570和580进行编码。边0-4的特殊排序取决于顶点数组(未示出)中顶点0-2的排序。以下对图5-6的讨论描述了如何根据边0-4的特殊排序来填充边端点向量570和580。

7.0示例拓扑编码处理

图6是描绘实施例中计算机100为了空间效率和加速的访问而以压缩稀疏行(CSR)格式对图的有向边进行编码的流程图。参考图5来讨论图6。

所描绘的处理由计算机500在加载和使用两个阶段执行。在加载期间,基于来自(一个或多个)数据源的数据在存储器中创建图。加载发生在步骤601-605期间,对于由图的(一个或多个)数据源提供的每个关系重复进行加载。加载可以按数据源或按关系并行化。

加载发生在准备和编码两个阶段。准备发生在步骤601-602期间,在此期间在存储器内创建并链接空数据结构。步骤601将图的每个顶点与对于顶点的类型唯一(但是不一定是全局唯一)的偏移量相关联。在实施例中,RAM 505是图1的存储器105的实施方式,其中已经根据图2加载了顶点。在实施例中,可以将相同类型的顶点以它们的唯一偏移量存储在顶点数组(未示出)内。

对(一个或多个)数据源中的每个关系重复步骤602-605。对于关系,步骤602将把源顶点类型连接到目的地顶点类型的独特边类型进行关联,源顶点类型和目的地顶点类型不必是相同的顶点类型。就像对于关系一样,步骤602将源向量和目的地向量进行关联。例如,对于与关系520相关联的边类型,创建端点向量570和580。向量570和580最初是空的。后续步骤根据特殊排序填充向量570-580。在这个意义上,向量570和580的内容被有效地排序,而没有实际调用排序算法。

在步骤603-605期间发生边编码。对于关系的每个实例重复步骤603。步骤603的每次重复可以在边特性向量(未示出)内填充一个边的特性。在实施例中,在步骤601中创建空图560,并且可以在初始化每条边时将边添加到图560。在实施例中,直到稍晚但不晚于在步骤605之后才创建空图560,并且直到所有边都被初始化才将边添加到图560。

步骤603从与边类型对应的关系的实例创建具有边类型的边。例如,边1是从实例1创建的。在实施例中,边被存储在用于该边类型的数组中。

7.1目的地向量

向量570和580内的边编码和特殊排序如下通过步骤604-605实现。对源顶点类型的每个顶点重复步骤604-605。对于具有该顶点作为源顶点的边类型的每条边重复步骤604。换句话说,对于源自该顶点的边类型的每条边重复步骤604。

例如,顶点0是具有相同边类型的边0-1的源顶点。虽然边2具有相同的边类型并且也连接到顶点0,但是边2的源顶点不是顶点0。边0将源顶点0连接到目的地顶点1。

在边类型的目的地向量内的下一个顺序(即,空置)位置中,步骤604存储在步骤601中指派给目的地顶点的偏移量的值。例如,顶点1存储在顶点类型的顶点数组(未示出)的基于零的偏移量一处。对于边0,步骤604将一附加到空目的地向量580。因为目的地向量580为空,所以将一附加(即,存储)在目的地向量580的位置零处。来自与边0相同的源顶点0的还有以顶点2作为其目的地顶点的边1,将二附加到目的地向量580的下一个位置,该位置在基于零的偏移量1处。

因此,来自相同源顶点的边类型的边被连续地记录在目的地向量580中,此后,对于相同源顶点类型的下一个顶点重复步骤604。下一个源顶点可以在该顶点类型的顶点数组(未示出)的顺序迭代期间出现。因此,目的地向量580的内容通过源顶点被隐式地排序。

7.2源向量

步骤605将以下内容存储到边类型的源向量中与步骤601中指派给源顶点的偏移量相同的偏移量处:目的地向量内包含以该顶点作为源顶点的有向边的目的地顶点的唯一偏移量的最后一个位置。该最后一个位置应当是在步骤604中写入的最后一个位置。例如,对于源顶点0,将位置0-1写入目的地向量580内,其中最后写入的位置为1。因此,步骤605将1存储到源向量570中与指派给顶点0相同的偏移量(偏移量0)处。

而源顶点类型的下一个顶点1对于边类型的任何边都不是源顶点。换句话说,边类型的边都不源自顶点1。因此,步骤604没有将任何东西记录到顶点1的目的地向量580中。因此,目的地向量580内的最后一个写入位置对于顶点0-1是相同的。因此,步骤605将相同的值1写入源向量570,但是在指派给顶点1的偏移量(该偏移量为1)处。

在步骤605之后,完成端点向量570和580的填充。源向量570具有与边类型的源顶点类型的顶点一样多的值。通过设计且无需进一步排序,源向量570内的值按照源顶点进行排序并且单调增加。

7.3性能改进

目的地向量580具有与边类型的边一样多的值。通过设计并且无需进一步排序,目的地向量580内的值也按照源顶点排序。但是,这些值(例如,如图所示的1、2、0、1、2)显然不是自然排序的。如图所示,边以其自然排序0-4被记录在目的地向量580内。端点向量570和580的内容的这些特殊排序的效率在步骤606中表现如下。

在步骤606期间发生图使用。例如,可以遍历边。如上所述,由于简化的存储格式,因此加速了遍历。用于遍历一条边(诸如用于在深度优先搜索期间进行探测)或者遍历许多边(诸如用于在宽度优先搜索期间到达相邻顶点的)的随机访问都被加速。例如,计算机500可以接收并执行针对图560的查询,以基于边和相邻顶点的类型和特性找到多边路径或子图。

例如,源顶点2产生边2-4。端点向量570和580可以被如下用于步骤606期间这些边的快速遍历。在步骤601期间指派给顶点2的偏移量是2。源向量570内的偏移量2处的值为4,其中源向量570内偏移量1处的先前值为1。四减一等于三。因此,顶点2产生三条有向边,在(即,排除)偏移量1之后直到(即,包括)偏移量4,这三条有向边被记录在目的地向量580内,因为值1和4被连续地存储在源向量570中。排除一至包括四与包括二至四相同。因此,源自顶点2的三条边被记录在目的地向量580内的偏移量2-4处,偏移量2-4存储值0、1、2,这些值是在步骤601中指派给目的地顶点0-2的识别偏移量。因此,目的地顶点0-2通过给定边类型的边成为源顶点2的直接邻居。

因为每种边类型具有其自己的源向量和目的地向量,所以按边类型进行的过滤和/或遍历需要最小的数据访问和最大的数据局部性,从而提高对图560的高效读取。如果特性向量具有与目的地向量580的排序匹配的边排序,那么可以在边遍历或迭代期间高效地随机或顺序访问存储在特性向量中的边特性。

端点向量570和580一起实现图560的拓扑(即,边)的压缩稀疏行(CSR)编码,这对于边的遍历和过滤在空间上和时间上是高效的。在实施例中,被记录在端点向量570和/或580中的顶点偏移量是按位或按字节打包的(即,分别为了增加密度而不进行字节对准或不进行字对准)。但是,CSR调整效率可能低下,诸如在图560的拓扑通过添加或移除边而演变的情况下。因此,在实施例中,端点向量570和580可以变为只读。虽然只读的端点向量可以或多或少地阻止拓扑突变,但是边特性向量仍然是可写的,使得边特性值可以改变。例如,即使无法移除边,边的权重特性的值也可以改变。例如,可以通过将边的权重特性设置为零或将其删除标志特性设置为真(true)来近似边的移除。边特性向量在图7中进一步讨论。

8.0边特性存储

图7是描绘实施例中的示例计算机700的框图。计算机700为了空间效率和加速的访问而填充边特性向量。计算机700可以是计算机100的实施方式。

计算机700如下基于来自数据源710的实例0-1的数据来填充RAM 705内的边特性向量790。数据源710提供包括数据字段751-752的关系720。可以为实例0-1中的每一个创建类型770的单独边,以填充边类型770的边表(未示出)。根据与边表相同的边排序,将实例0-1的字段751内的值复制到向量790中偏移量0-1处,这有助于针对给定边随机访问向量790。向量790的偏移量列可以被隐含(即,说明性的但不存储)。因此,边特性向量790仅需要存储值红色和蓝色,而不需要存储任何元数据。边加载在图8中进一步讨论。

9.0填充边特性

图8是描绘实施例中计算机700为了空间效率和加速的访问而填充边特性向量的流程图。参考图7来讨论图8。步骤802、804和806将一种边类型的一个特性加载到特性向量中。可以对于该边类型的附加特性的其它特性向量以及针对附加边类型(例如,并发地时)重复这个处理。

步骤802将数据源的关系的数据字段与边类型和特性向量相关联。例如,边类型770可以变得与空特性向量790和数据字段751相关联。

对于关系的每个实例(诸如图7的0-1)重复步骤804和806。步骤804的前提条件是至少完成图6的步骤603。在实施例中,图5-6的所有图(即,顶点和边)加载发生在步骤804之前。因此,在步骤804之前,从实例0-1加载边(未示出)(例如,加载到边类型的边数组中)。

步骤804将边与对于边类型唯一的偏移量相关联,但是不一定跨所有边类型。例如,边以其偏移量存储到边数组(未示出)中。

步骤806将关系实例的数据字段的值复制到与该数据字段相关联的特性向量中的被指派给边的偏移量处。例如,将红色值从实例0的数据字段751复制到边特性向量790中的偏移量0处,因为0是被指派给从实例0生成的边(未示出)的偏移量。例如,这条边是边类型770的基于零的边数组中的第一条边。

10.0双向遍历

图9是再次描绘实施例中图5的示例RAM 505的框图。图5描绘了边端点向量570和580,诸如当边在每条边的方向上自然遍历时,根据它们的源顶点对边端点向量570和580进行优化以访问有向边0-4。对从其目的地顶点开始的有向边的访问与边的方向相反,并且要求附加的数据结构910、970和980,以便高效地访问相反(即,反向)方向上的边。图5和9的组合实现了无缝的(即,高效的)边访问,而不管边方向。图9假定已按照图5填充了RAM 505。图560与图5相比没有改变。

10.1反向端点向量

除了端点的语义被反转如同边被反转一样之外,反向端点向量970和980与直接端点向量570和580(图9中未示出)相似。例如,源顶点的标识符被记录在反向目的地向量980中,而直接目的地向量580记录目的地顶点的标识符。同样,反向源向量970的偏移量与目的地顶点对应,而直接源向量570的偏移量与源顶点对应。

反向数据结构910、970和980的填充在下文中针对图9-10进行描述。但是,反向填充的后果是:反向目的地向量980具有与直接目的地向量580中的边排序不同的边排序(不仅仅是反向,这可能是违反直觉的)。因为直接目的地向量580具有与边数组(未示出)和边特性向量(未示出)相同的边排序,所以这意味着反向目的地向量980具有与边数组和边特性向量不兼容的边排序。因此,通过反向目的地向量980来访问边(例如,边特性)可能需要将边偏移量从反向排序转化成直接排序。映射910实现了该转化并且如下关于图9-10进行讨论。

11.0示例反向编码处理

图10是描绘实施例中计算机500为了空间效率和加速的向后(即,与有向边的自然方向相反)遍历而以压缩稀疏行(CSR)格式对图的有向边进行编码的流程图。参考图5和图9来讨论图10。图10中描绘的处理对一种边类型的边进行反向编码,并且可以针对每种附加边类型重复进行。

步骤1002将边类型与独特反向源向量和独特反向目的地向量进行关联。例如,在RAM 505内创建空的反向端点向量970和980。

对于边类型的源顶点类型的每个顶点(诸如0-2)重复步骤1004和1006。步骤1004的前提条件是至少完成图6的步骤603。在实施例中,图5-6的所有图(即,顶点和边)加载都发生在步骤1004之前。因此,在步骤1004之前加载边0-4(例如,加载到边类型的边数组中)。

如下通过步骤1004和1006来实现向量970和980内的边反向编码和特殊排序。对于边类型的目的地顶点类型的每个顶点重复步骤1004和1006。对于以该顶点作为源顶点的边类型的每条边重复步骤1004。换句话说,对于终止于该顶点的边类型的每条边重复步骤1004。

例如,顶点0是边2的目的地顶点。虽然边0-1具有相同的边类型并且也连接到顶点0,但是边0-1的目的地顶点不是顶点0。边2将目的地顶点0连接到源顶点2。

11.1反向目的地向量

在边类型的反向目的地向量内的下一个顺序(即,空置)位置中,步骤1004存储在图6的步骤601中指派给源顶点的偏移量的值。例如,顶点2存储在顶点类型的顶点数组(未示出)的基于零的偏移量2处。对于边4,步骤1004将二附加到空的反向目的地向量980。因为反向目的地向量980为空,所以将值2附加(即,存储)在反向目的地向量980的位置零处。

边类型的到相同目的地顶点的边被连续地记录在反向目的地向量980中,此后,对于相同目的地顶点类型的下一个顶点重复步骤1004。在该顶点类型的顶点数组(未示出)的顺序迭代期间可能出现下一个目的地顶点。因此,反向目的地向量980的内容被目的地顶点隐式地排序。

11.2反向源向量

步骤1006将以下内容存储到边类型的反向源向量中的与图6的步骤601中指派给目的地顶点的偏移量相同的偏移量处:反向目的地向量内包含以该顶点作为目的地顶点的有向边的源顶点的唯一偏移量的最后一个位置。该最后一个位置应当是在步骤1004中写入的最后一个位置。例如,对于目的地顶点0,只有位置0被写入反向目的地向量980内,最后写入的位置为0。因此,步骤1006将0存储到反向源向量970中的与指派给顶点0相同的偏移量(偏移量0)处。

在步骤1006之后,完成反向端点向量970和980的填充。反向源向量970具有与边类型的目的地顶点类型的顶点一样多的值。通过设计并且无需进一步排序,反向源向量570内的值按目的地顶点排序并且单调增加。

11.3边偏移量转化

如对于图6解释的,边迭代和边特性过滤可以共享相同的边索引并且在单遍中发生,从而如同对于直接目的地向量580一样来加速在其自然方向上遍历边的查询。但是,边排序950不同于直接目的地向量680和边类型的边特性数组的边排序。需要偏移量转化映射910以取反向目的地向量980的偏移量位置0-4并将它们转换成指派的边索引,以与针对边类型的边数组和边特性向量一起使用。

在缺少映射910的实施例中,不执行步骤1008。步骤1008创建并填充偏移量转化映射910。对于边类型的每条边,步骤1008以与反向目的地向量相同的边排序将直接目的地向量内边的位置存储到边映射数组中。例如,边2是边类型的第一条/唯一边,其顶点0为目的地顶点。边2具有顶点2作为其源顶点。因此,将二记录到反向目的地向量980的偏移量0中。每个隐含的(即,说明性的但未实际存储的)列920可以将偏移量0用作映射910的索引。因此,映射910中的实际数据的第一行是针对边2,如列930所指示的,列930是需要为映射910实际存储的唯一列。

12.0无向弧

图11是描绘实施例中的示例RAM 1105的框图。RAM 1105包含用于无向弧的端点向量,无向弧不是有向边。像有向边一样,无向弧也具有类型,并且将一种类型的顶点连接到另一种类型的顶点。但是,因为弧缺少方向,所以顶点类型都不被视为源或目的地。RAM1105的计算机可以是计算机100的实施方式。

异构图1160包含各种类型的无向弧和有向边,包括驾驶边类型、协作弧类型和共定位弧类型。驾驶有向边E-0指示人P-0是汽车C-0的驾驶员。人可以驾驶车,但不能驾驶人。因此,由于图1160的语义(例如,模式),有必要对驾驶边类型进行定向。

协作弧A-0指示人P-1和P-2彼此相互协作。相互协作没有方向的概念。因此,由于图1160的语义,协作弧类型必然是无向的。共定位弧L-0也是无向的,并且指示人P-1和汽车C-0在相同的空间位置(未示出)。

图1160的每种连接(即,边或弧)类型的实例具有足够的端点向量以实现双向(例如,直接和反向)访问。例如,驾驶边类型具有直接的源向量和目的地向量(未示出)以及反向的源向量和目的地向量(未示出),总共有四个端点向量用于双向访问。

同样,共定位弧类型具有用于双向访问的四个端点向量1171-1172和1181-1182的相似集合,但是因为弧是自然无向的,所以缺少源和目的地的比较语义概念。因此,虽然向量1171和1181作为一对(a pair)一起工作,而向量1172和1182作为另一对一起工作,但是逻辑上并未定义哪对是直接的以及哪对是反向的。但是,在实践中,向量对之一可以具有与共定位弧类型的弧数组(未示出)相同的弧排序。该向量对可以是直接向量,而另一对可以是反向向量。虽然未示出,但共定位弧类型可以具有与反向对一起使用的转化映射,如针对图9所描述的。

12.1具有同质端点的弧

当无向弧类型的两个端点顶点具有相同的顶点类型时,如下仅使用一对端点向量并且不使用转化映射就可以实现双向弧访问。例如,协作弧类型连接两个人,诸如通过协作弧A-0连接的人P-0和P-1。在这种情况下,端点向量1175和1185足以进行双向访问协作弧。与各自的每个无向弧具有一个值(示为暗)的端点向量1171-1172和1181-1182不同,端点向量1175和1185中的每一个端点向量的每个无向弧具有两个值(示为暗)。

图例1110指示仅端点向量1171-1172、1175、1181-1182和1185的暗值具有实际数据。端点向量中的亮值指示未实际存储的隐含数据,这些数据被偏移到这些端点向量中。对于协作弧A-0,双向访问按照如下发生。如果从人P-0进行探索,那么使用协作源向量1175的左侧的暗列。如果从人P-1进行探索,那么使用右侧的暗列。如下针对图11-12来描述端点向量1171-1172和1181-1182的填充。

13.0对具有同质端点的弧进行双向编码

图12是描绘实施例中用于对具有同质端点的无向弧进行双向编码的示例处理的流程图。参考图11来讨论图12。图11中所描绘的处理对相同弧类型的弧进行编码,并且可以针对具有同质端点的每种附加类型的无向弧进行重复。

13.1前向编码

步骤1202或多或少地加载边、顶点和特性,如图5-6中所述。例如,可以加载RAM1105作为RAM 505的实施方式。步骤1202还将连接两种不同顶点类型的无向弧(诸如共定位弧)加载到向量端点向量1171-1172和1181-1182中。连接两种不同顶点类型的无向弧的加载可能需要填充反向端点向量(诸如关于图9-10所示的,包括映射910)。

但是,具有同质端点的无向弧(即,对于两个端点,弧类型具有相同的顶点类型)需要进行如下特殊加载。在步骤1202中,不为具有同质端点的无向弧创建图9-10中的反向端点向量和映射910。代替地,步骤1202为具有同质端点的无向弧仅在一个方向上加载端点向量,并且稍后在步骤1204和1206中填充另一个方向。例如,步骤1202填充端点向量1175-1185的左侧(即,偏移量0)列。在步骤1204和1206期间如下进行对具有同质端点的弧类型(诸如协作弧)的双向遍历的支持。

13.2后向编码

在步骤1204中,对于给定弧类型的每个弧,将源顶点的唯一偏移量存储到弧类型的目的地向量中。对于这个弧,在步骤1202期间,目的地顶点的偏移量已存储到目的地向量中。例如,协作弧A-0被存储为从人P-1到人P-0的遍历。而步骤1204代替地将源顶点记录到目的地向量中。例如,在步骤1204期间,协作目的地向量1185的第二列(即,偏移量1)存储值1,以指示可以在从人P-0到人P-1的相反方向遍历协作弧A-0。

在步骤1206中,对于具有特定源顶点类型的每个顶点,计算机将以下内容存储到源向量中的顶点的唯一偏移量处:目的地向量内包含以该顶点作为目的地顶点的无向弧的源顶点的唯一偏移量的最后一个位置。例如,(在步骤1204期间)被写入的协作目的地向量1185中的最后一个位置是偏移量1。因此,步骤1206将1存储到协作源向量1175的第二列的值中。因此,如图所示的端点向量1175和1185支持遍历在任一方向上的协作弧A-0。在步骤1206之后,具有同质端点类型的无向弧的双向存储完成,此时端点向量1175和1185可以可选地变为只读。

14.0硬件概述

根据一个实施例,本文描述的技术由一个或多个专用计算设备实现。专用计算设备可以是硬连线的以执行这些技术,或者可以包括数字电子设备(诸如被持久地编程为执行这些技术的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)),或者可以包括被编程为根据固件、存储器、其它存储装置或组合中的程序指令执行这些技术的一个或多个通用硬件处理器。这种专用计算设备还可以将定制的硬连线逻辑、ASIC或FPGA与定制编程相结合,以实现这些技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持设备、联网设备或者结合硬连线和/或程序逻辑以实现这些技术的任何其它设备。

例如,图13是图示可以在其上实现本发明实施例的计算机系统1300的框图。计算机系统1300包括总线1302或用于传送信息的其它通信机制,以及与总线1302耦合用于处理信息的硬件处理器1304。硬件处理器1304可以是例如通用微处理器。

计算机系统1300还包括耦合到总线1302用于存储将由处理器1304执行的信息和指令的主存储器1306,诸如随机存取存储器(RAM)或其它动态存储设备。主存储器1306还可以用于存储在执行由处理器1304执行的指令期间的临时变量或其它中间信息。当存储在处理器1304可访问的非瞬态存储介质中时,这些指令使计算机系统1300成为被定制以执行指令中指定的操作的专用机器。

计算机系统1300还包括耦合到总线1302用于存储用于处理器1304的静态信息和指令的只读存储器(ROM)1308或其它静态存储设备。提供存储设备136(诸如磁盘或光盘),并且将其耦合到总线1302用于存储信息和指令。

计算机系统1300可以经由总线1302耦合到显示器1312(诸如阴极射线管(CRT)),用于向计算机用户显示信息。包括字母数字键和其它键的输入设备1314耦合到总线1302,用于将信息和命令选择传送到处理器1304。另一种类型的用户输入设备是光标控件1316(诸如鼠标、轨迹球或光标方向键),用于将方向信息和命令选择传送到处理器1304并用于控制显示器1312上的光标移动。这种输入设备通常在两个轴(第一轴(例如,x)和第二轴(例如,y))上具有两个自由度,这允许设备指定平面中的位置。

计算机系统1300可以使用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑(它们与计算机系统相结合,使计算机系统1300成为或将计算机系统1300编程为专用机器)来实现本文所述的技术。根据一个实施例,响应于处理器1304执行包含在主存储器1306中的一个或多个指令的一个或多个序列,计算机系统1300执行本文的技术。这些指令可以从另一个存储介质(诸如存储设备136)读入到主存储器1306中。包含在主存储器1306中的指令序列的执行使得处理器1304执行本文所述的处理步骤。在替代实施例中,可以使用硬连线的电路系统代替软件指令或与软件指令组合。

如本文使用的术语“存储介质”是指存储使机器以特定方式操作的数据和/或指令的任何非瞬态介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,诸如存储设备136。易失性介质包括动态存储器,诸如主存储器1306。存储介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带或任何其它磁数据存储介质、CD-ROM、任何其它光学数据存储介质、任何具有孔图案的物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存储器芯片或盒式磁带。

存储介质不同于传输介质但可以与传输介质结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴线缆、铜线和光纤,包括包含总线1302的导线。传输介质也可以采用声波或光波的形式,诸如在无线电波和红外数据通信期间生成的那些波。

各种形式的介质可以参与将一个或多个指令的一个或多个序列携带到处理器1304以供执行。例如,指令最初可以在远程计算机的磁盘或固态驱动器上携带。远程计算机可以将指令加载到其动态存储器中,并使用调制解调器通过电话线发送指令。计算机系统1300本地的调制解调器可以在电话线上接收数据并使用红外发送器将数据转换成红外信号。红外检测器可以接收红外信号中携带的数据,并且适当的电路系统可以将数据放在总线1302上。总线1302将数据携带到主存储器1306,处理器1304从主存储器1306中检索并执行指令。由主存储器1306接收的指令可以可选地在由处理器1304执行之前或之后存储在存储设备136上。

计算机系统1300还包括耦合到总线1302的通信接口1318。通信接口1318提供耦合到网络链路1320的双向数据通信,其中网络链路1320连接到本地网络1322。例如,通信接口1318可以是集成服务数字网(ISDN)卡、线缆调制解调器、卫星调制解调器或者提供与对应类型的电话线的数据通信连接的调制解调器。作为另一个示例,通信接口1318可以是局域网(LAN)卡,以提供与兼容LAN的数据通信连接。还可以实现无线链路。在任何此类实现中,通信接口1318都发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光信号。

网络链路1320通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路1320可以提供通过本地网络1322到主计算机1324或到由互联网服务提供商(ISP)1326操作的数据设备的连接。ISP 1326进而通过全球分组数据通信网络(现在通常称为“互联网”1328)提供数据通信服务。本地网络1322和互联网1328都使用携带数字数据流的电信号、电磁信号或光信号。通过各种网络的信号以及网络链路1320上并通过通信接口1318的信号(其将数字数据携带到计算机系统1300和从计算机系统1300携带数字数据)是传输介质的示例形式。

计算机系统1300可以通过(一个或多个)网络、网络链路1320和通信接口1318发送消息和接收数据,包括程序代码。在互联网示例中,服务器1330可以通过互联网1328、ISP1326、本地网络1322和通信接口1318发送对应用程序的所请求代码。

所接收的代码可以在被接收时由处理器1304执行,和/或存储在存储设备136或其它非易失性存储装置中以供稍后执行。

15.0软件概述

图14是可以用于控制计算机系统1300的操作的基本软件系统1400的框图。软件系统1400及其组件(包括它们的连接、关系和功能)仅仅意味着是示例性的,并且不意味着限制(一个或多个)示例实施例的实现。适于实现(一个或多个)示例实施例的其它软件系统可以具有不同的组件,包括具有不同的连接、关系和功能的组件。

提供软件系统1400用于指引计算机系统1300的操作。可以存储在系统存储器(RAM)1306和固定存储装置(例如,硬盘或闪存)136上的软件系统1400包括内核或操作系统(OS)1410。

OS 1410管理计算机操作的低级别方面,包括管理进程的执行、存储器分配、文件输入和输出(I/O)以及设备I/O。表示为1402A、1402B、1402C...1402N的一个或多个应用可以被“加载”(例如,从固定存储装置136传送到存储器1306中)以供系统1400执行。意图在计算机系统1300上使用的应用或其它软件也可以被存储为可下载的计算机可执行指令集,例如,用于从互联网位置(例如,Web服务器、应用(app)商店或其它在线服务)下载和安装。

软件系统1400包括图形用户界面(GUI)1415,用于以图形(例如,“点击”或“触摸手势”)方式接收用户命令和数据。进而,这些输入可以由系统1400根据来自操作系统1410和/或(一个或多个)应用1402的指令来操作。GUI 1415还用于显示来自OS 1410和(一个或多个)应用1402的操作结果,因此用户可以提供附加的输入或终止会话(例如,注销)。

OS 1410可以直接在计算机系统1300的裸硬件1420(例如,(一个或多个)处理器1304)上执行。可替代地,管理程序或虚拟机监视器(VMM)1430可以插入在裸硬件1420和OS1410之间。在这个配置中,VMM 1430充当OS 1410与计算机系统1300的裸硬件1420之间的软件“缓冲垫”或虚拟化层。

VMM 1430实例化并运行一个或多个虚拟机实例(“客户机”)。每个客户机包括“客户”操作系统(诸如OS 1410),以及被设计为在客户操作系统上执行的一个或多个应用(诸如(一个或多个)应用1402)。VMM 1430向客户操作系统呈现虚拟操作平台并管理客户操作系统的执行。

在一些实例中,VMM 1430可以允许客户操作系统如同其直接在计算机系统1300的裸硬件1420上运行一样运行。在这些实例中,被配置为直接在裸硬件1420上执行的客户操作系统的相同版本也可以在VMM 1430上执行而无需修改或重新配置。换句话说,VMM 1430可以在一些情况下向客户操作系统提供完全硬件和CPU虚拟化。

在其它实例中,客户操作系统可以被专门设计或配置为在VMM 1430上执行以提高效率。在这些实例中,客户操作系统“意识到”它在虚拟机监视器上执行。换句话说,VMM1430可以在某些情况下向客户操作系统提供半虚拟化。

计算机系统进程包括硬件处理器时间的分配以及存储器的分配(物理和/或虚拟),以用于存储由硬件处理器执行的指令的存储器的分配、用于存储由硬件处理器执行指令所生成的数据、和/或用于当计算机系统进程未运行时在硬件处理器时间的分配之间存储硬件处理器状态(例如,寄存器的内容)。计算机系统进程在操作系统的控制下运行,并且可以在计算机系统上执行的其它程序的控制下运行。

16.0云计算

本文一般地使用术语“云计算”来描述计算模型,该计算模型使得能够按需访问计算资源的共享池,诸如计算机网络、服务器、软件应用和服务,并且允许以最少的管理工作或服务提供商交互来快速提供和释放资源。

云计算环境(有时称为云环境或云)可以以各种不同方式实现,以最好地适应不同要求。例如,在公共云环境中,底层计算基础设施由组织拥有,该组织使其云服务可供其它组织或公众使用。相反,私有云环境一般旨在仅供单个组织使用或在单个组织内使用。社区云旨在由社区内的若干组织共享;而混合云包括通过数据和应用可移植性绑定在一起的两种或更多种类型的云(例如,私有、社区或公共)。

一般而言,云计算模型使得先前可能由组织自己的信息技术部门提供的那些职责中的一些代替地作为云环境内的服务层被递送,以供消费者使用(根据云的公共/私有性质,在组织内部或外部)。取决于特定实现,由每个云服务层提供或在每个云服务层内提供的组件或特征的精确定义可以有所不同,但常见示例包括:软件即服务(SaaS),其中消费者使用在云基础设施上运行的软件应用,同时SaaS提供者管理或控制底层云基础设施和应用。平台即服务(PaaS),其中消费者可以使用由PaaS提供者支持的软件编程语言和开发工具,用以开发、部署和以其它方式控制它们自己的应用,同时PaaS提供者管理或控制云环境的其它方面(即,运行时执行环境下的一切)。基础设施即服务(IaaS),其中消费者可以部署和运行任意软件应用和/或供应进程、存储装置、网络和其它基础计算资源,同时IaaS提供者管理或控制底层物理云基础设施(即,操作系统层下面的一切)。数据库即服务(DBaaS),其中消费者使用在云基础设施上运行的数据库服务器或数据库管理系统,同时DbaaS提供者管理或控制底层云基础设施和应用。

呈现上述基本计算机硬件和软件以及云计算环境是为了说明可以用于实现(一个或多个)示例实施例的基本底层计算机组件。但是,(一个或多个)示例实施例不一定限于任何特定的计算环境或计算设备配置。相反,(一个或多个)示例实施例可以在本领域技术人员依据本公开将理解为能够支持本文呈现的(一个或多个)示例实施例的特征和功能的任何类型的系统体系架构或处理环境中实现。

在前述说明书中,已经参考许多具体细节描述了本发明的实施例,这些具体细节可能因实施方式而不同。因此,应当在说明性而不是限制性的意义上看待说明书和附图。本发明范围的唯一且排他的指示以及申请人意在要作为本发明范围的是以由本申请产生的一组权利要求的具体形式的所产生权利要求的字面和等同范围,包括任何后续的校正。

相关技术
  • 用于异构图的高效的存储器中关系表示
  • 用于存储器中数据压缩的基于内容的分段模式及包括等级分段表示的传输
技术分类

06120112145807