Neptune 查找缓存可以加速读取查询 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Neptune 查找缓存可以加速读取查询

Amazon Neptune 实现了一个查找缓存,该缓存使用R5d实例的基于 NVMe 的 SSD 可以提高具有频繁、重复查找属性值或 RDF 文字的查询的读取性能。查找缓存暂时将这些值存储在 nVMe SSD 卷中,可以在其中快速访问它们。

可以从以下功能开始使用。Amazon Neptune 引擎版本 1.0.4.2.R2 (2021-06-01).

如果需要从群集存储卷而不是从内存中检索属性值或文字值,返回大量顶点和边或许多 RDF 三元的属性的读取查询可能会有很长的延迟。示例包括长时间运行的读取查询,这些查询从身份图返回大量全名,或者从欺诈检测图中返回 IP 地址。随着查询返回的属性值或 RDF 文字数量的增加,可用内存减少,查询执行可能会显著降低。

Neptune 查找缓存的用例

只有在读取查询返回大量顶点和边或 RDF 三元的属性时,查找缓存才有用。

为了优化查询性能,Amazon Neptune 使用R5d实例类型,以便为此类属性值或文字创建大缓存。然后,从缓存中检索它们比从群集存储卷中检索它们快得多。

作为经验法则,只有在满足以下三个条件的情况下启用查找缓存才有价值:

  • 你一直在观察到读取查询的延迟增加。

  • 你还观察到了下降BufferCacheHitRatio CloudWatch 指标运行读取查询时(请参阅使用 Amazon CloudWatch 监控 Neptune)。

  • 在呈现结果之前,读取查询花费了大量时间来实现返回值(请参阅下面的 Gremlin-Profile 示例,了解确定查询要实现多少属性值的方法)。

注意

此功能很有帮助仅限在上述特定场景中。例如,查找缓存根本没有帮助聚合查询。除非你运行的查询可以从查找缓存中受益,否则没有理由使用R5d实例类型而不是等效且更便宜的R5实例类型。

如果您使用的是 Gremlin,则可以使用GremlinprofileAPI. 在 “索引操作” 下,它显示在执行过程中实现的术语数:

Index Operations Query execution: # of statement index ops: 3 # of unique statement index ops: 3 Duplication ratio: 1.0 # of terms materialized: 5273 Serialization: # of statement index ops: 200 # of unique statement index ops: 140 Duplication ratio: 1.43 # of terms materialized: 32693

实现的非数字术语的数量与 Neptune 必须执行的术语查找数量直接成比例。

使用查找缓存

查找缓存仅适用于R5d实例类型,默认情况下会自动启用该类型。NeptuneR5d实例具有相同的规格R5实例,再加上最多 1.8 TB 的基于 NVMe 的本地 SSD 存储空间。查找缓存是特定于实例的,受益的工作负载可以专门定向到R5dNeptune 群集中的实例,而其他工作负载可以定向到R5或者其他实例类型。

要在 Neptune 实例上使用查找缓存,只需将该实例升级到R5d实例类型。当你这样做时,Neptune 会自动设置neptune_lookup_cache数据库集群参数'enabled',然后在该特定实例上创建查找缓存。然后您可以将实例状态用于确认缓存已启用的 API。

同样,要禁用给定实例上的查找缓存,请将实例从R5d实例类型为等效R5实例类型。

R5d实例启动,查找缓存已启用且处于冷启动模式,这意味着它为空。Neptune 首先在查找缓存中检查属性值或 RDF 文字,在处理查询时,如果它们还不存在,则添加它们。这逐渐预热了缓存。

当你将需要属性值或 RDF-文字查找的读取查询定向到 R5D 时读者例如,在缓存预热时,读取性能略有下降。但是,当缓存预热时,读取性能会显著提高,而且您可能还会看到与查找击中缓存而不是群集存储有关的 I/O 成本下降。内存利用率也有所提高。

如果您的作家实例是R5d,它会在每次写入操作时自动加热查找缓存。这种方法确实会稍微增加写入查询的延迟,但更有效地加热了查找缓存。然后,如果您将需要属性值或 RDF Literal 查找的读取查询引导到写入器实例,则立即开始提高读取性能,因为这些值已经缓存在那里。

另外,如果你正在运行批量加载器R5dwrite 实例,您可能会注意到由于缓存的原因,其性能略有降低。

由于查找缓存特定于每个节点,因此主机替换会将缓存重置为冷启动。

您可以通过在数据库集群中的所有实例上临时禁用查找缓存,方法是将neptune_lookup_cache数据库集群参数'disabled'. 但是,一般来说,通过向下缩放特定实例上的缓存来禁用缓存更有意义R5dR5实例类型。