如何解决dynamodb的吞吐量错误?

问题描述 投票:0回答:2

回溯(控制台的最后输出):

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'}
amazon-dynamodb
2个回答
46
投票

有几种方法可以解决这个问题:

  1. 提高吞吐量水平(对于此选项,您必须支付更多费用)。

  2. 在应用程序级别实施。例如,调用 DynamoDB 检查异常。如果超出吞吐量,请休眠几秒钟并再次调用相同的查询(这是我们在应用程序中实现的)。

编辑:

  1. DynamoDB 又添加了一项按需容量功能。在此,我们不必为表定义任何特定容量,因为 DynamodB 本身将为我们执行自动缩放。

43
投票

DynamoDB 对读取和写入使用预置吞吐量模型。这意味着如果您的应用程序尝试执行比您分配给表更多的读取或写入操作,它将收到错误。

AWS 做了很多事情来帮助解决这个问题:

  • AWS 开发工具包客户端将自动重试请求几次,然后您会看到 ProvisionedThroughputExceededException
  • 可以在突发中消耗最多五分钟的未使用容量,以适应请求高峰
  • 您每天可以无限次地增加表上的预配置读/写次数(每秒执行更多读/写操作)
  • 您可以每天减少表上的预配置吞吐量9 次(前 4 小时内 4 次,其余 4 小时内各 1 次)(为了省钱)
  • 您可以使用动态 DynamoDB(第 3 方应用程序)来自动管理扩展和缩减预配置吞吐量

根据您创建的应用程序的类型,您可以采取多种措施来处理这些错误:

  • 如果这些请求发生限制表的使用,批处理或长时间运行的应用程序可以退出并重试这些请求
  • 从表中批量加载或批量读取时,您可以手动扩大吞吐量并在完成后缩小
  • 对于事务性应用程序,您可以确保预配置的吞吐量高于运行应用程序所需的水平
  • 自行使用动态 DynamoDB 或脚本更改表吞吐量
© www.soinside.com 2019 - 2024. All rights reserved.