SPARQL 查询引擎在 Neptune 中的工作原理 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

SPARQL 查询引擎在 Neptune 中的工作原理

要使用 SPARQL explain 特征提供的信息,您需要了解有关 Amazon Neptune SPARQL 查询引擎的工作原理的一些详细信息。

该引擎将每个 SPARQL 查询转换到一个运算符管道中。从第一个运算符开始,称为绑定列表 的中间解将流经此运算符管道。您可以将绑定列表视为一个表,其中,表标头是查询中使用的变量的子集。表中的每一行表示一个结果(截至到评估点)。

假设已为我们的数据定义两个命名空间前缀:

@prefix ex: <http://example.com> . @prefix foaf: <http://xmlns.com/foaf/0.1/> .

下面将是此上下文中一个简单的绑定列表的示例:

?person | ?firstName ------------------------------------------------------ ex:JaneDoe | "Jane" ex:JohnDoe | "John" ex:RichardRoe | "Richard"

对于三个人员中的每一个人,列表会将 ?person 变量绑定到该人员的标识符,并将 ?firstName 变量绑定到该人员的名字。

在一般情况下,变量可以保持未绑定状态,例如,查询中的某个变量存在 OPTIONAL 选项,对于此选项,数据中不存在任何值。

PipelineJoin 运算符是 explain 输出中存在的 Neptune 查询引擎运算符的示例。它将来自上一个运算符的传入绑定集作为输入,并将其与三元组模式(即 (?person, foaf:lastName, ?lastName))进行联接。此操作在其输入流中使用 ?person 变量的绑定,将绑定替换到三元组模式中并从数据库中查找三元组。

在来自上一个表的传入绑定的上下文中执行时,PipelineJoin 将计算三个查找,即以下内容:

(ex:JaneDoe, foaf:lastName, ?lastName) (ex:JohnDoe, foaf:lastName, ?lastName) (ex:RichardRoe, foaf:lastName, ?lastName)

此方法称为按绑定 计算。此计算过程的解将与传入的解进行联接,同时在传入的解中填充检测到的 ?lastName。假设您发现全部三位人员均有一个姓氏,该运算符将生成一个内容如下所示的传出绑定列表:

?person | ?firstName | ?lastName --------------------------------------- ex:JaneDoe | "Jane" | "Doe" ex:JohnDoe | "John" | "Doe" ex:RichardRoe | "Richard" | "Roe"

然后,此传出绑定列表将用作管道中的下一个运算符的输入。最后,管道中的最后一个运算符的输出定义查询结果。

运算符管道通常是线性的,这意味着,每个运算符将针对单个连接的运算符发送解。但是,在某些情况下,它们可能具有更复杂的结构。例如,SPARQL 查询中的 UNION 运算会将映射到 Copy 操作。此操作将复制绑定并将副本转发到两个子计划中,其中一个子计划用于 UNION 的左侧,另一个则用于右侧。

有关运算符的更多信息,请参阅Neptune SPARQL explain 运算符