Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Bonnes pratiques d'utilisation du AWS CLI et SDK avec Neptune
Par défaut, les AWS SDK AWS CLI et expirent au bout de 60 secondes et réessayent automatiquement les demandes ayant échoué. Pour les requêtes dont l'exécution prend plus de 60 secondes, ce comportement par défaut entraîne une double exécution des requêtes. La nouvelle tentative déclenche une nouvelle demande alors que la requête d'origine est toujours en cours d'exécution sur le serveur.
Lorsque vous exécutez des requêtes de longue durée via l'API du plan de données Neptune (par exemple)execute-open-cypher-query, désactivez les tentatives automatiques. Augmentez ou supprimez également le délai de lecture. Dans le cas contraire, le client réessaie la requête alors que l'original est toujours en cours d'exécution, ce qui double la charge sur votre cluster Neptune.
Les recommandations suivantes s'appliquent à toute opération du plan de données Neptune qui peut s'exécuter plus longtemps que le délai d'attente par défaut de 60 secondes :
Définissez le délai de lecture sur 0 (infini) ou sur une valeur supérieure à la durée de requête la plus longue attendue.
Définissez le nombre maximum de tentatives sur 1 (une tentative, zéro tentative). Cela empêche le client de réessayer une demande que le serveur est toujours en train de traiter.
Les exemples suivants montrent comment configurer ces paramètres pour les SDK AWS CLI les plus courants.
- 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
Le --cli-read-timeout 0 paramètre désactive le délai de lecture, ce qui permet d' AWS CLI attendre indéfiniment une réponse. La variable d'AWS_MAX_ATTEMPTS=1environnement définit le nombre maximum de tentatives à 1, ce qui signifie que la demande est essayée exactement une fois sans nouvelle tentative.
- 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
)
)
Le réglage read_timeout=None désactive le délai de lecture. Le réglage total_max_attempts sur 1 signifie que la demande est essayée une seule fois sans nouvelle tentative.
- 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();
Le réglage apiCallTimeout sur Duration.ZERO configure un délai d'expiration infini pour l'appel d'API. L'utilisation RetryPolicy.none() désactive toutes les tentatives automatiques.