优化 Amazon Neptune 批量加载 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

优化 Amazon Neptune 批量加载

使用以下策略将 Neptune 批量加载的加载时间保持在最低限度:

  • 清理您的数据:

    • 在加载之前,请务必将数据转换为支持的数据格式

    • 删除所有重复项或已知错误。

    • 尽可能减少唯一谓词(例如边缘和顶点的属性)的数量。

  • 优化您的文件:

    • 如果您从 Amazon S3 桶加载大型文件(例如 CSV 文件),则加载程序会将它们解析为可以并行加载的块,从而为您管理并发性。使用非常大量的小文件可能会减慢此过程。

    • 如果您从 Amazon S3 前缀加载多个文件,则加载器会自动先加载顶点文件,然后再加载边缘文件。但是,如果您知道将只加载边缘文件,则edgeOnlyLoad可以将设置为跳过第一遍扫描所有文件TRUE以确定其内容(顶点或边),以便在加载任何边缘文件之前先加载找到的任何顶点文件。这可以显著加快加载时间,尤其是在涉及许多边缘文件时。如果某些顶点文件也存在于相同的 Amazon S3 前缀(source参数)中,则它们将被加载,但与其他文件相比,没有任何排序保证。此外,如果数据库中不存在某些fromto顶点,则插入边可能会报告消息FROM_OR_TO_VERTEX_ARE_MISSING错误。最佳做法是将节点和边缘放在单独的 Amazon S3 前缀中。

  • 检查您的加载程序设置:

    • 如果在加载期间不需要执行任何其它操作,请使用 OVERSUBSCRIBEparallelism 参数。此参数设置使批量加载程序在运行时使用所有可用的 CPU 资源。在限制允许的情况下,通常需要占用 60%-70% 的 CPU 容量才能保持操作的运行速度。 I/O

      注意

      如果 parallelism 设置为 OVERSUBSCRIBEHIGH(默认设置),则在加载 openCypher 数据时,线程可能会遇到争用条件和死锁,从而导致 LOAD_DATA_DEADLOCK 错误。在这种情况下,请将 parallelism 设为较低的设置并重试加载。

    • 如果您的加载任务将包含多个加载请求,请使用 queueRequest 参数。将 queueRequest 设置为 TRUE 允许 Neptune 对您的请求进行排队,这样您就不必等到一个请求完成后再发出另一个请求。

    • 如果您的加载请求正在排队,则可以使用 dependencies 参数设置依赖级别,这样一个任务的失败就会导致相关任务失败。这样可以防止加载的数据出现不一致。

    • 如果加载任务将涉及更新先前加载的值,请务必将 updateSingleCardinalityProperties 参数设置为 TRUE。如果不这样做,加载程序会将更新现有单个基数值的尝试视为错误。对于 Gremlin 数据,还会在属性列标题中指定基数(请参阅属性列标题)。

      注意

      updateSingleCardinalityProperties 参数不适用于资源描述框架 (RDF) 数据。

    • 您可以使用 failOnError 参数来确定当遇到错误时批量加载操作是失败还是继续。此外,您还可以使用 mode 参数来确保加载任务从上一个任务失败的地方恢复加载,而不是重新加载已经加载的数据。

  • 纵向扩展 - 在批量加载之前,将数据库集群的写入器实例设置为最大大小。请注意,如果执行此操作,则必须同时纵向扩展数据库集群中的所有只读副本实例,或者在加载完数据之前将其移除。

    批量加载完成后,请务必再次缩减写入器实例。

重要

如果您在批量加载期间由于复制滞后而经历了重复重启只读副本的循环,则您的副本可能无法跟上数据库集群中写入器的速度。要么将读取器扩展到比写入器大,要么在批量加载期间暂时将它们移除,然后在完成后重新创建。

有关设置加载程序请求参数的更多详细信息,请参阅请求参数