【发布时间】:2019-08-18 10:50:04
【问题描述】:
我们正在尝试利用 AWS 的 DynamoDB 的 NoSQL 和 >IoT 的东西,但我们不确定关于物品长度或物品插入的最佳做法。
流程继续,每个设备都可以读取环境数据,根据捕获的数据类型,设备将 “事件” JSON 消息发送到 IoT 代理,然后到 Lambda 函数以映射该有效负载,对其进行处理并写入 DynamoDB 表。
然后,每种捕获的事件类型都有一个表,从设备接收到的每条事件消息都有一个项目。 但我们已经意识到这只是另一种伪关系方法。
阅读文档,并认为只有一个表作为最佳实践,每个设备在其中增长一个项目,其中包含按密钥名称分类的 JSON 事件数组。
类似:
{
"partition":"<str_an_id>"",
"range":<uint_maybe_a_timestamp>,
"event_soil":[
{<<object with variable length #0},
{<<object with variable length #1}
...
{<<object with variable length #n}
],
"event_humidity":[
{<<object with variable length #0},
{<<object with variable length #1}
...
{<<object with variable length #n}
],
"event_light":[
{<<object with variable length #0},
{<<object with variable length #1}
...
{<<object with variable length #n}
],
"event_temperature":[
{<<object with variable length #0},
{<<object with variable length #1}
...
{<<object with variable length #n}
]
}
目前我们有两个设备,因此我们预计有两个项目随着来自设备的JSON 有效负载而增长。但是,在某个时间点,内存阈值已达到,DynamoDB 中的 400 错误代码会出现。
这种方法对吗?还是完全错误?
是否有任何方法可以知道何时达到该限制?比如,某种分页之类的?
由于JSON 对象目前的长度不同,并且将来可能会有所不同,因此很难引入计算项目大小的数学方法。
我们还开始考虑每台设备每隔一两个月(理论上因为我们加速设备)创建项目。但是,不确定。
【问题讨论】:
-
错误代码
400与内存无关。当访问被拒绝时引发。 -
Item size to update has exceeded the maximum allowed size (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: AKQESTATUSCODEFROMDYNAMODBEZ) -
最大项目大小为 400KB,相当大。通常在该大小下,您处理的是 JSON 文件,而不是项目,并且可以将其保存到 S3。如果你真的需要这么大的项目,那么可能会沿着事件类型进一步划分它们,例如分区键可以是 uuid-soil、uuid-湿度。
-
确实@jamod,并且正在考虑该选项,但押注于正确使用 NoSQL。
标签: python amazon-web-services aws-lambda amazon-dynamodb aws-iot