我正在尝试使用 Neptune 批量加载程序将数据加载到我的 Amazon Neptune 集群中。然而,这个过程花费的时间比我预期的要长。如何减少加载时间?
解决方法
实例类
在批量加载之前将写入器实例设置为最大大小。您可以为写入器和读取器维护不同的实例类,以确保您在 Neptune 集群中只扩展一个节点。批量上载完成后,您可以缩小写入器实例。
并行性
如果在写入过程中没有执行任何其他操作,请使用 OVERSUBSCRIBE 并行化参数。此参数可将 Neptune 批量加载程序设置为使用所有可用资源,从而减少整体加载时间。
文件大小和请求吞吐量
最佳做法是在您的 Amazon Simple Storage Service (Amazon S3) 存储桶上使用较大的批量加载文件(如 csv 文件)。这样,批量加载 API 就可以分解这些较大的文件并为您管理并发性。如果您有多个文件,请考虑以下方法之一:
- 将 S3 源设置为文件夹:批量加载 API 会自动从顶部文件开始,然后上载边缘文件。
- Neptune 可以并行加载文件,具有多个文件可以加速加载过程
- 压缩文件:批量加载 API 支持 gzip 文件,此类文件可以减少从 S3 存储桶提取较大文件的开销。
- 使用 queueRequest 和 dependencies 请求参数。如果 queueRequest 参数设置为“TRUE”,Neptune 会同时将多个作业排入队列。您可以设置多个依赖关系级别,以便一个作业失败不会导致所有作业均失败。以这种方式设置依赖关系还可以防止数据中出现不一致。
例如,如果作业 A 和作业 B 彼此独立,请设置作业 C,以便作业 A 和作业 B 在作业 C 开始之前完成。在作业 A 和作业 B 完成后相继提交(按任何顺序),并保存它们的负载 ID。然后,在依赖关系字段中使用两个作业的负载 ID 提交负载作业 C:
"dependencies" : ["Job_A_loadID", "Job_B_loadID"]
如果作业 A 或作业 B 失败,则作业 C 不会运行,并且其状态设置 LOAD_FAILED_BECAUSE_DEPENDENCY_NOT_SATISFIED。
数据健康
- 将数据转换为支持的负载数据格式。
- 使用 updateSingleCardinalityProperties 维护您的数据。例如,如果您有一个人物顶点,并且要更改电话号码,Neptune 批量加载程序将拒绝此更改。新值将被视为错误。但是,如果您将 updateSingleCardinalityProperties 设置为“TRUE”,Neptune 批量加载程序将替换该顶点属性的值。
重要提示:CSV 文件的标题必须指示属性的单一基数。如果 updateSingleCardinalityProperties 参数的基数和内容不是“单一”或单值,则该参数不起作用。有关详细信息,请参阅属性列标题中的指定列的基数部分。
- 在开始批量加载之前,从批量加载文件中删除任何重复项或已知错误。
- 减少唯一谓词的数量(例如边缘和顶点的属性)。
负载作业行为
您可以使用 failOnError 参数来确定在遇到错误时是否应继续批量加载操作。或者,您也可以使用 mode 参数来确保负载作业仅为负载最初失败的文件恢复。有关 mode 和 failOnError 参数的详细信息,请参阅请求参数。
批量加载程序作业失败故障排除
您可以使用 Get-Status API 获取有关特定负载作业的详细信息。可使用以下 cURL 调用来检查运行状况,并查找 Neptune 批量加载程序中的任何错误:
curl -s "https://neptune:8182/loader/<loaderid>?details=true&errors=true"
有关 Neptune 批量加载程序故障排除的更多信息,请参阅如何解决 Amazon Neptune 批量加载程序中的处理错误?
相关信息
Neptune 加载程序获取状态 API