如何计算Dynamodb项目大小?获得validationerror 400KB Boto

ubh*_*sat 1 boto amazon-web-services python-2.7 amazon-dynamodb

ValidationException:ValidationException:400 Bad Request {u'message':u'Item size已超过允许的最大大小','__ type':u'com.amazon.coral.validate#ValidationException'}

我拥有的项目对象,大小为92004字节

>>> iii
<boto.dynamodb2.items.Item object at 0x7f7922c97190>
>>> iiip = iii.prepare_full() # it is now in dynamodb format e.g. "Item":{"time":{"N":"300"}, "user":{"S":"self"}} 

>>> len(json.dumps(iiip))
92004
>>>
Run Code Online (Sandbox Code Playgroud)

我得到的尺寸92004小于400KB,为什么在保存项目时会看到上述错误?

有什么指针吗?

编辑:

我玩了不同大小的数据,

>>> i00['Resources'] = "A" * 66848; len(json.dumps(i00))
68481
>>> i = Item(ct.table, data=i00); i.save()
True
>>> i.delete()
True
>>> i00['Resources'] = "A" * 66849; len(json.dumps(i00))
68482
>>> i = Item(ct.table, data=i00); i.save()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/var/www/virtualenv/ken/local/lib/python2.7/site-packages/boto/dynamodb2/items.py", line 455, in save
    returned = self.table._put_item(final_data, expects=expects)
  File "/var/www/virtualenv/ken/local/lib/python2.7/site-packages/boto/dynamodb2/table.py", line 835, in _put_item
    self.connection.put_item(self.table_name, item_data, **kwargs)
  File "/var/www/virtualenv/ken/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 1510, in put_item
    body=json.dumps(params))
  File "/var/www/virtualenv/ken/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 2842, in make_request
    retry_handler=self._retry_handler)
  File "/var/www/virtualenv/ken/local/lib/python2.7/site-packages/boto/connection.py", line 954, in _mexe
    status = retry_handler(response, i, next_sleep)
  File "/var/www/virtualenv/ken/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 2882, in _retry_handler
    response.status, response.reason, data)
ValidationException: ValidationException: 400 Bad Request
{u'message': u'Item size has exceeded the maximum allowed size', u'__type': u'com.amazon.coral.validate#ValidationException'}
Run Code Online (Sandbox Code Playgroud)

换句话说,cloudtrail数据的大小必须小于68482字节.我想知道为什么他们声称它是400KB.显然,我错过了一些东西.

ubh*_*sat 11

回答我自己的问题,因为它可能会帮助有同样问题的人.我联系了aws技术支持,以下是解释:

我的dynamodb表上有5个索引,因为每个索引都复制了数据 ; 在total data = 68481 * (5 + 1) = 410886这接近400KB.

我觉得Dynamodb文档中缺少这个,而亚马逊补充说它很好.

因此,总而言之,最终保存在dynamodb表中的总数据(项目大小)是=实际数据*(索引数+ 1).