【问题标题】:Amazon DynamoDB ProvisionedThroughputExceededException (iOS SDK)Amazon DynamoDB ProvisionedThroughputExceededException (iOS 开发工具包)
【发布时间】:2023-04-09 15:10:02
【问题描述】:

我正在使用 DynamoDB。我从应用程序进行扫描操作。一切都很完美。一段时间后,响应为零。但我没有收到任何例外。我启用了详细日志记录,

[AmazonLogger verboseLogging];

如果启用详细日志记录,我可以看到一些日志,例如,

"__type":"com.amazonaws.dynamodb.v20111205#ProvisionedThroughputExceededException","message":"已超出为表配置的预置吞吐量级别。考虑使用 UpdateTable API 提高预置级别"

我的代码是这样的,

@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;
}

我做得对吗?有人可以帮帮我吗?

谢谢。

编辑: 谁能给我一个粗略的概念,即为 QuestionAnswer 表设置多少吞吐量(读取/写入)容量,其中包含近 10 个字段,如 TopicID、QuestionID、Question、Answer、 AskedAt、RepliedAt、QuestionType 等,?谢谢。

【问题讨论】:

  • DynamoDB 的定价基于您配置的预置吞吐量数量,您访问它的频率高于您的设置所指示的频率,并且您受到限制。您需要考虑是否真的需要扫描表,扫描将检查整个表,这会导致高吞吐量,如果这是您使用的第一个 NoSQL DB,您应该对如何最好地使用它们进行一些调查,您不能只执行 RDB 之类的即席查询,它们在时间和资源方面都很昂贵。考虑将允许显式获取的索引作为单独的表进行管理。
  • 谢谢。您的意思是,如果我使用 Scan,我将无法将异常抛出到 @catch 块?
  • 您是否看到早期的响应 ALog 消息,以确保您的日志记录配置正确?如果你在 catch 中设置了一个中断,它会在你得到 nil 之前触发,还是 nil 肯定会从 try 块中返回?我没有使用过适用于 Dynamo 的 AWS iOS 开发工具包,但是他们的一些其他 API 并不总是按预期执行,因此如果您从未进入您的 catch 块,可能是他们的 sdk 更早地吞下了异常。可能值得尝试添加一个全局异常处理程序以查看是否有任何东西出现。
  • 我确信 ALog 运行良好。它确实记录了一些其他异常。但是在上面的 try/catch 块中,我尝试在 catch 块中放置断点。但它永远不会进入它。我将尝试全局异常处理程序。谢谢你的时间。我真的很感激。
  • 没问题,也许值得在 AWS 论坛上提出问题以征求他们的意见。

标签: iphone objective-c ios amazon-web-services amazon-dynamodb


【解决方案1】:

我尝试了一个读取容量单位多于配置的扫描请求,我收到了AmazonClientException 并带有一般消息:“发生了未知错误。”我们正在努力修复,下一个版本应该在所述情况下正确返回DynamoDBProvisionedThroughputExceededException

您说响应变为 nil,但我无法重现该问题。您是否致电[AmazonErrorHandler shouldNotThrowExceptions] 关闭异常?开启此选项后,SDK 不会抛出AmazonClientExceptionAmazonServiceException。您也可能使用的是旧版本的 SDK。请尝试 1.4.4 看看是否有异常。这是次优的,但至少你应该能够在出现问题时捕获异常。

【讨论】:

  • 谢谢。好的。考虑一下我更喜欢使用 AWS 控制台修改吞吐量,并且我的应用程序已在商店中。如果超过吞吐量限制并且我无法修改吞吐量会发生什么?我的用户将无法顺利使用该应用程序?感谢您的宝贵时间。
  • 您的应用用户的体验取决于您在应用收到异常或在您的情况下收到 nil 时的处理方式。无论哪种情况,您都应该优雅地处理它们;例如,应用程序可以等待一段时间并自动重试,或者优雅地失败并通知用户。作为一般准则,我强烈建议预置足够的容量单位并设置 CloudWatch 警报,以便您可以在应用程序开始看到 DynamoDBProvisionedThroughputExceededException 之前接收通知并调整容量单位。希望这会有所帮助。
  • 太棒了。谢谢。一旦超出容量或需要一些时间(我的意思是 15 分钟、1 小时或其他时间),应用程序就会抛出 DynamoDBProvisionedThroughputExceededException?您能否告诉我一个 QuestionAnswer 表的容量是否足够,该表有近 10 个字段,如 TopicID、QuestionID、Question、Answer、AskedAt、RepliedAt、QuestionType 等,非常感谢您的回复。
  • Amazon DynamoDB Developer Guid 应该会有所帮助。
  • 谢谢。如果我能理解开发人员指南,我就不会问你这个问题。我不是说导游不好,我只是说我不明白。无论如何,感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
相关资源
最近更新 更多