1

J'utilise DynamoDB. Je numérise les opérations depuis l'application. Tout fonctionne parfaitement. Après un certain temps, la réponse arrive à zéro. Mais je ne reçois aucune exception. J'ai activé la journalisation détaillée à l'aide,Amazon DynamoDB ProvisionedThroughputExceededException (iOS SDK)

[AmazonLogger verboseLogging]; 

Si la journalisation détaillée est activée, je peux voir des journaux comme,

"__type": "com.amazonaws.dynamodb.v20111205 # ProvisionedThroughputExceededException", » message « : » le niveau de débit provisionné configuré pour la table a été dépassé Envisagez d'augmenter votre niveau d'approvisionnement avec l'API UpdateTable »

Mon code ressemble à ceci,

0.
@try { 
    DynamoDBScanRequest *request = /* Create request */; 
    DynamoDBScanResponse *response = [[AmazonClientManager ddb] scan:request]; 
    /* 
    * response is nil if the provisioning throughput is exceeded 
    * and the all retries are over 
    */ 
    ALog(@"Response: %@", response); 
    NSMutableArray *array = response.items; 
    return array; 
} @catch (NSException *exception) { 
    /* 
    * I am expecting the ProvisionedThroughputExceededException 
    * to be thrown here. But its not throwing here. Instead I get the response 
    * as nil above. 
    */ 
    ALog(@"Exception: %@", exception); 
    return nil; 
} 

Est-ce que je le fais correctement? Quelqu'un peut-il m'aider, s'il vous plaît?

Merci.

Edit: Quelqu'un pourrait-il me donner une idée approximative de la quantité de débit (à la fois en lecture/écriture) la capacité à définir pour une table de QuestionAnswer, avec près de 10 domaines tels que TopicID, QuestionID, question, réponse, AskedAt, RepliedAt, QuestionType etc.,? Merci.

+0

DynamoDB est facturé en fonction de la quantité de débit configurée que vous avez configurée, vous y accédez plus souvent que votre configuration ne l'indique et vous êtes limité. Vous devez considérer si vous avez réellement besoin de scanner la table, une analyse inspectera toute la table ce qui résulte en haut débit, si c'est la première base de données NoSQL que vous avez utilisée, vous devriez faire des recherches sur la meilleure façon de les utiliser, vous ne peuvent pas simplement effectuer des requêtes ad hoc comme RDB, ils sont coûteux en termes de temps et de ressources. Envisagez de gérer les index qui permettraient des identifications explicites en tant que tables distinctes. – codeghost

+0

Merci. Vous voulez dire qu'il n'y a aucun moyen d'obtenir l'exception jetée au bloc @catch si j'utilise Scan? – EmptyStack

+0

Voyez-vous les messages Response ALog antérieurs, pour être sûr que votre journalisation est correctement configurée? Si vous mettez une pause dans la capture, cela se déclenche-t-il avant que vous n'obteniez rien ou est-il définitivement renvoyé du bloc try? Je n'ai pas utilisé AWS iOS SDK pour Dynamo, mais j'ai constaté que certaines de ses autres API ne fonctionnaient pas toujours comme prévu, donc si vous n'entriez jamais dans votre bloc catch, il se peut que sdk avale l'exception plus tôt. Cela peut valoir la peine d'essayer d'ajouter un gestionnaire d'exception global pour voir si quelque chose survient là-bas. – codeghost

Répondre

4

J'ai essayé une requête d'analyse avec plus d'unités de capacité de lecture que prévu, et j'ai obtenu AmazonClientException avec un message générique: "Erreur inconnue s'est produite." Nous travaillons sur un correctif, et la prochaine version devrait renvoyer correctement DynamoDBProvisionedThroughputExceededException dans la situation décrite.

Vous avez dit que la réponse est nulle, mais je n'ai pas réussi à reproduire le problème. Appellez-vous [AmazonErrorHandler shouldNotThrowExceptions] pour désactiver les exceptions? Lorsque cette option est activée, le SDK ne lancera pas AmazonClientException et AmazonServiceException. Il est également possible que vous utilisiez une version antérieure du SDK. Essayez s'il vous plaît 1.4.4 et voyez si vous avez l'exception. C'est sous-optimal, mais au moins vous devriez pouvoir attraper une exception quand quelque chose ne va pas.

+0

Merci. D'accord.Considérez que je préfère modifier le débit à l'aide d'AWS Console et que mon application est en magasin. Que se passera-t-il si la limite de débit est dépassée et que je ne suis pas disponible pour modifier le débit? Mes utilisateurs ne seront pas en mesure de travailler avec l'application en douceur? Merci pour votre temps. – EmptyStack

+0

L'expérience des utilisateurs de votre application dépend de la façon dont vous gérez lorsque l'application reçoit une exception ou reçoit zéro dans votre cas. Dans les deux cas, vous devriez les manipuler avec élégance; par exemple, l'application peut attendre un peu et réessayer automatiquement, ou échouer gracieusement et informer l'utilisateur. En règle générale, je recommande fortement de provisionner suffisamment d'unités de capacité et de définir une alerte CloudWatch afin que vous puissiez recevoir des notifications et augmenter les unités de capacité avant que l'application ne commence à voir le 'DynamoDBProvisionedThroughputExceededException'. J'espère que cela vous aide. –

+0

Génial. Merci. App va lancer DynamoDBProvisionedThroughputExceededException dès que la capacité est dépassée ou cela prend du temps, je veux dire 15min, 1h ou quelque chose? Pourriez-vous s'il vous plaît me dire ce qui serait une capacité suffisante pour une table QuestionAnswer, avec presque 10 champs comme TopicID, QuestionID, Question, Réponse, AskedAt, RepliedAt, QuestionType etc., je suis vraiment reconnaissant pour vos réponses. – EmptyStack