本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用的最佳实践 AWS CLI 还有带有 Neptune 的 SDK
默认情况下, AWS CLI 和 AWS SDK 会在 60 秒后超时,并自动重试失败的请求。对于完成时间超过 60 秒的查询,此默认行为会导致重复执行查询。当原始查询仍在服务器上运行时,重试会触发一个新的请求。
当您通过 Neptune 数据平面 API 运行长时间运行的查询时(例如execute-open-cypher-query,),请禁用自动重试。还要增加或删除读取超时时间。否则,客户端会在原始查询仍在执行时重试查询,这会使您的 Neptune 集群的负载增加一倍。
以下建议适用于任何运行时间可能超过默认 60 秒超时的 Neptune 数据平面操作:
以下示例说明如何为 AWS CLI 和常用 SDK 配置这些设置。
- AWS CLI
-
export AWS_MAX_ATTEMPTS=1
aws neptunedata execute-open-cypher-query \
--endpoint-url https://your-cluster-endpoint:port \
--open-cypher-query "RETURN 1" \
--cli-read-timeout 0
该--cli-read-timeout 0参数禁用读取超时,允许无限期等待响应。 AWS CLI AWS_MAX_ATTEMPTS=1环境变量将总尝试次数设置为 1,这意味着请求只尝试过一次,不重试。
- Python (boto3)
-
import boto3
from botocore.config import Config
client = boto3.client(
'neptunedata',
endpoint_url='https://your-cluster-endpoint:port',
region_name='us-east-1',
config=Config(
retries={'total_max_attempts': 1, 'mode': 'standard'},
read_timeout=None
)
)
设置read_timeout=None禁用读取超时。设置total_max_attempts为1意味着该请求只被尝试过一次,没有重试。
- Java V2 SDK
-
import software.amazon.awssdk.services.neptunedata.NeptunedataClient;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
import software.amazon.awssdk.core.retry.RetryPolicy;
import software.amazon.awssdk.regions.Region;
import java.time.Duration;
import java.net.URI;
// Build the Neptune dataplane client with no retries and infinite timeout
NeptunedataClient neptunedataClient = NeptunedataClient.builder()
.endpointOverride(URI.create("https://your-cluster-endpoint:port"))
.region(Region.of("us-east-1"))
.overrideConfiguration(ClientOverrideConfiguration.builder()
.apiCallTimeout(Duration.ZERO)
.retryPolicy(RetryPolicy.none())
.build())
.build();
设置apiCallTimeout为Duration.ZERO可配置 API 调用的无限超时。使用RetryPolicy.none()会禁用所有自动重试。