如何在 Neptune 中为语句编制索引 - Amazon Neptune

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

如何在 Neptune 中为语句编制索引

当您查询四元组的图形时,对于每个四元组位置,您可以指定一个值约束,也可以不指定。查询将返回与您指定的值约束相匹配的所有四元组。

Neptune 使用索引来解析图形查询模式。这些索引覆盖图边缘的四个主要组成部分:主体(中的源顶点LPG);谓词(RDF),或者属性或边标签(LPG);对象(中的目标顶点或属性值LPG);以及图形()或边标识符(RDF)。LPG这四个四分量位置有 16 (2^4) 种可能的访问模式。无需使用六个索引进行扫描和筛选,即可高效查询所有 16 种模式。每个四元组语句索引都使用一个由以不同顺序连接的四个位置值组成的键。涵盖所有 16 个访问路径的四语句索引的一种可能组合是:

Access Pattern Index key order ---------------------------------------------------- --------------- 1. ???? (No constraints; returns every quad) SPOG 2. SPOG (Every position is constrained) SPOG 3. SPO? (S, P, and O are constrained; G is not) SPOG 4. SP?? (S and P are constrained; O and G are not) SPOG 5. S??? (S is constrained; P, O, and G are not) SPOG 6. S??G (S and G are constrained; P and O are not) SPOG 7. ?POG (P, O, and G are constrained; S is not) POGS 8. ?PO? (P and O are constrained; S and G are not) POGS 9. ?P?? (P is constrained; S, O, and G are not) POGS 10. ?P?G (P and G are constrained; S and O are not) GPSO 11. SP?G (S, P, and G are constrained; O is not) GPSO 12. ???G (G is constrained; S, P, and O are not) GPSO 13. S?OG (S, O, and G are constrained; P is not) OGSP 14. ??OG (O and G are constrained; S and P are not) OGSP 15. ??O? (O is constrained; S, P, and G are not) OGSP 16. S?O? (S and O are constrained; P and G are not) OSGP

默认情况下,Neptune 只创建并维护这六个索引中的三个:

  • SPOG –   使用 Subject + Predicate + Object + Graph 组成的密钥。

  • POGS –   使用 Predicate + Object + Graph + Subject 组成的密钥。

  • GPSO –   使用 Graph + Predicate + Subject + Object 组成的密钥。

这三个索引处理许多最常见的访问模式。仅维护三个完整语句索引而不是六个会显著减少支持无需扫描和筛选的快速访问所需的资源。例如,只要绑定了位置的前缀(例如顶点或顶点和属性标识符),SPOG 索引就允许高效查找。当仅绑定了存储在 P 位置中的边缘或属性标签时,POGS 索引才允许高效访问。

API用于查找语句的低级采用一种语句模式,其中一些位置是已知的,其余的则留待索引搜索发现。通过根据语句索引之一的索引键顺序,将已知位置复合到键前缀,Neptune 执行范围扫描来检索与已知位置匹配的所有语句。

不过,Neptune 默认情况下没有创建的语句索引之一是反向遍历 OSGP 索引,该索引可跨对象和主题收集谓词。相反,默认情况下,Neptune 在用于执行 {all P x POGS} 联合扫描的单独索引中跟踪不同谓词。当您使用 Gremlin 时,谓词对应于属性或边缘标签。

如果图形中的不同谓词数太大,默认 Neptune 访问策略可能会效率低下。例如在 Gremlin 中,没有给出边缘标签的 in() 步骤或内部使用 in() 的任何步骤(例如 both()drop())可能会效率非常低下。

启用使用实验室模式创建OSGP索引

如果您的数据模型创建了大量不同的谓词,则除了Neptune默认维护的三个索引外,还可以使用实验室模式启用索引,从而显著改善性能和运营成本。OSGP

注意

此特征从 Neptune 引擎版本 1.0.2.1 开始推出。

启用OSGP索引可能有一些缺点:

  • 插入速率最多可能会降低 23%。

  • 使用的存储最多会增加 20%。

  • 均匀接触所有索引的读取查询(这是非常少有的情况)的延迟可能会增加。

但是,一般而言,为具有大量不同谓词的数据库集群启用OSGP索引是值得的。基于对象的搜索(例如,查找指向某个顶点的所有传入边缘,或者连接到指定对象的所有主题)将变得高效,因此删除顶点的效率也会更高。

重要

在向空数据库集群加载任何数据之前,您只能在空数据库集群中启用OSGP索引。

 

Neptune 数据模型中的 Gremlin 语句

Gremlin 属性图数据在SPOG模型中使用三类语句来表示,即:

有关如何在 Gremlin 查询中使用它们的说明,请参阅了解 Gremlin 查询在 Neptune 中的工作方式