【发布时间】: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