回溯(控制台的最后输出):
File "batchpy.py", line 61, in <module>
obj.batch_w1()
File "batchpy.py", line 49, in batch_w1
batch.put_item(data=item)
File "/usr/local/lib/python2.7/dist-packages/boto/dynamodb2/table.py", line 1641, in __exit__
self.resend_unprocessed()
File "/usr/local/lib/python2.7/dist-packages/boto/dynamodb2/table.py", line 1718, in resend_unprocessed
resp = self.table.connection.batch_write_item(batch_data)
File "/usr/local/lib/python2.7/dist-packages/boto/dynamodb2/layer1.py", line 420, in batch_write_item
body=json.dumps(params))
File "/usr/local/lib/python2.7/dist-packages/boto/dynamodb2/layer1.py", line 2842, in make_request
retry_handler=self._retry_handler)
File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 954, in _mexe
status = retry_handler(response, i, next_sleep)
File "/usr/local/lib/python2.7/dist-packages/boto/dynamodb2/layer1.py", line 2876, in _retry_handler
response.status, response.reason, data)
boto.dynamodb2.exceptions.ProvisionedThroughputExceededException: ProvisionedThroughputExceededException: 400 Bad Request
{u'message': u'The level of configured provisioned throughput for the table was exceeded. Consider increasing your provisioning level with the UpdateTable API', u'__type': u'com.amazonaws.dynamodb.v20120810#ProvisionedThroughputExceededException'}
有几种方法可以解决这个问题:
提高吞吐量水平(对于此选项,您必须支付更多费用)。
在应用程序级别实施。例如,调用 DynamoDB 检查异常。如果超出吞吐量,请休眠几秒钟并再次调用相同的查询(这是我们在应用程序中实现的)。
编辑:
DynamoDB 对读取和写入使用预置吞吐量模型。这意味着如果您的应用程序尝试执行比您分配给表更多的读取或写入操作,它将收到错误。
AWS 做了很多事情来帮助解决这个问题:
根据您创建的应用程序的类型,您可以采取多种措施来处理这些错误: