如何计算 Dynamodb 项目大小?获取验证错误 400KB Boto
How to calculate Dynamodb item size? Getting validationerror 400KB Boto
ValidationException: ValidationException: 400 Bad Request
{u'message': u'Item size has exceeded the maximum allowed size', u'__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
>>>
我得到的 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'}
换句话说,cloudtrail 数据的大小必须小于 68482 字节。我想知道为什么他们声称它是 400KB。显然,我错过了一些东西。
如果没有问题可以分享一下你输入的数据吗?您是否尝试使用平面文件作为输入来插入批量数据?看起来 dynamoDB 无法解释新行或将所有记录视为单个记录!!
我有一个类似的错误,但对于哈希键字段。我正在尝试使用配置单元脚本加载批量数据。我意识到属性应该用制表符分隔,并且通过修复输入格式,为我修复了错误!!
尝试一次插入一条记录。如果没有出现上面的错误,那就是数据的格式问题!!
回答我自己的问题,因为它可能会帮助遇到同样问题的人。
我联系了aws技术支持,这里是解释:
我的 dynamodb table 上有 5 个索引,因为 每个索引都复制了数据 ; total data = 68481 * (5 + 1) = 410886
接近 400KB.
我觉得 Dynamodb 文档中缺少它,如果亚马逊添加它会很好。
因此,总而言之,最终保存在 dynamodb table 中的总数据(项目大小)为 = 实际数据 *(索引数 + 1)。
ValidationException: ValidationException: 400 Bad Request {u'message': u'Item size has exceeded the maximum allowed size', u'__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
>>>
我得到的 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'}
换句话说,cloudtrail 数据的大小必须小于 68482 字节。我想知道为什么他们声称它是 400KB。显然,我错过了一些东西。
如果没有问题可以分享一下你输入的数据吗?您是否尝试使用平面文件作为输入来插入批量数据?看起来 dynamoDB 无法解释新行或将所有记录视为单个记录!! 我有一个类似的错误,但对于哈希键字段。我正在尝试使用配置单元脚本加载批量数据。我意识到属性应该用制表符分隔,并且通过修复输入格式,为我修复了错误!!
尝试一次插入一条记录。如果没有出现上面的错误,那就是数据的格式问题!!
回答我自己的问题,因为它可能会帮助遇到同样问题的人。 我联系了aws技术支持,这里是解释:
我的 dynamodb table 上有 5 个索引,因为 每个索引都复制了数据 ; total data = 68481 * (5 + 1) = 410886
接近 400KB.
我觉得 Dynamodb 文档中缺少它,如果亚马逊添加它会很好。
因此,总而言之,最终保存在 dynamodb table 中的总数据(项目大小)为 = 实际数据 *(索引数 + 1)。