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

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

evaluationStrategy SPARQL 查询提示

evaluationStrategy 查询提示告知 Amazon Neptune 查询引擎,注释的查询片段应作为独立单元按自下而上的顺序计算。这意味着,不使用之前计算步骤中的任何解来计算此查询片段。此查询片段将作为独立单元计算,并且其生成的解将在计算后与查询剩余的部分联接。

使用 evaluationStrategy 查询提示是指一个阻止(非管道)查询计划,这意味着使用查询提示注释的片段的解将在主内存中实现并缓冲。使用此查询提示可能会显著增加计算查询所需的主内存量,尤其是在带注释的查询片段计算大量结果时。

evaluationStrategy SPARQL 提示语法

evaluationStrategy 查询提示被指定为 SPARQL 查询中包含的三元组模式。

为清晰起见,以下语法使用查询中定义并包含的 hint 前缀来指定 Neptune 查询提示命名空间:

PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> hint:SubQuery hint:evaluationStrategy "BottomUp" .
可用范围
  • hint:SubQuery

注意

仅嵌套子查询中支持此查询提示。

有关查询提示范围的更多信息,请参阅 Neptune 中的 SPARQL 查询提示范围

evaluationStrategy SPARQL 提示示例

本节介绍使用和未使用 evaluationStrategy 查询提示和相关优化编写的查询。

在此示例中,假定数据集具有以下特征:

  • 它包含 1000 个标记有 :connectedTo 的边缘。

  • 每个 component 节点平均连接到另外 100 个 component 节点。

  • 各个节点之间的四跃点周期性连接的典型数量约为 100。

无查询提示

以下 SPARQL 查询提取通过四个跃点来循环互连的所有 component 节点:

PREFIX : <https://example.com/> PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> SELECT * { ?component1 :connectedTo ?component2 . ?component2 :connectedTo ?component3 . ?component3 :connectedTo ?component4 . ?component4 :connectedTo ?component1 . }

Neptune 查询引擎的方法旨在使用以下步骤计算此查询:

  • 提取图形中的所有 1000 个 connectedTo 边缘。

  • 扩展 100 倍(component2 中的传出 connectedTo 边缘的数量)。

    中间结果:100000 个节点。

  • 扩展 100 倍(component3 中传出 connectedTo 边缘的数量)。

    中间结果:10000000 个节点。

  • 扫描 10000000 个节点以查找循环关闭。

这将产生一个流式处理查询计划,此计划具有固定数量的主内存。

查询提示和子查询

您可能希望权衡主内存空间以加速计算。通过使用 evaluationStrategy 查询提示重新编写查询,您可强制引擎计算两个更小、更具体的子集之间的联接。

PREFIX : <https://example.com/> PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> SELECT * { { SELECT * WHERE { hint:SubQuery hint:evaluationStrategy "BottomUp" . ?component1 :connectedTo ?component2 . ?component2 :connectedTo ?component3 . } } { SELECT * WHERE { hint:SubQuery hint:evaluationStrategy "BottomUp" . ?component3 :connectedTo ?component4 . ?component4 :connectedTo ?component1 . } } }

当迭代使用来自前一个三元组模式的结果作为后续模式的输入时,evaluationStrategy 提示不是按顺序计算三元组模式,而是使这两个子查询被单独计算。这两个子查询将为中间结果生成 100000 个节点,之后它们将互联以形成最终输出。

具体而言,当您在较大的实例类型上运行 Neptune 时,将这两个 100000 子集临时存储在主内存中会增加内存占用量,从而显著加快计算速度。