2012-12-07 5 views
0

J'utilise AWS SDK pour PHP pour interagir par programme avec DynamoDB.Répétition de demandes DynamoDB limitées

Je voudrais détecter si une demande à DynamoDB a été limitée afin qu'une autre requête puisse être effectuée après un court délai. À l'heure actuelle, je suppose que les demandes limitées ne sont pas satisfaites. Amazon FAQs suggère qu'une erreur 400 est renvoyée lorsque la limitation se produit.

J'ai donc actuellement la logique qui ressemble à ceci:

for($i=0; $i<10; $i++) { 

    $response = $dynamodb->get_item($get_item_args); 

    if($response->isOK()) { 

     break; 

    } elseif($i < 9) { 

     sleep(1); 
    } 
} 

Je suppose que cela fonctionne, mais il est un peu stupide. En particulier, il répètera toutes les demandes ayant échoué, pas seulement les requêtes limitées. S'il y a une erreur non résolvable, je ne veux vraiment pas répéter la demande. Pour rendre cela plus intelligent, je voudrais regarder à l'intérieur d'une réponse étranglée pour un identifiant unique (c'est-à-dire un message d'erreur spécifique). Mais pour la vie de moi, je ne peux pas capturer (ou trouver n'importe où sur Internet) un exemple de réponse étranglée. Quel est le meilleur moyen de compenser le risque d'étranglement et de maximiser la probabilité d'une demande satisfaite?

Répondre

2

En fin de compte, les SDK AWS réessayent automatiquement les demandes limitées jusqu'à la réussite. Donc mes efforts ci-dessus sont inutiles (puisque j'utilise le SDK AWS pour PHP).

La page de documentation Handling Errors in Amazon DynamoDB dit le texte suivant pour l'erreur ProvisionedThroughputExceededException:

The AWS SDKs for Amazon DynamoDB automatically retry requests that receive this exception. So, your request is eventually successful, unless the request is too large or your retry queue is too large to finish.

+1

Cela explique aussi pourquoi je ne pouvais pas capturer l'erreur dans les réponses, même si j'observais étranglant sur le back-end AWS. – kingjeffrey