如何在AWS DynamoDB上达到限制大小?

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

我们试图通过物联网的东西充分利用AWS的DynamoDB的NoSQL,但我们不确定项目长度或项目插入的最佳实践。

流程,每个设备可以读取环境数据,根据捕获的数据类型,设备将“事件”的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对象的长度目前不同,将来可能会有所不同。

此外,我们还考虑每台设备每隔一两个月(理论上自加速设备以来)创建项目。但是,不确定。

python amazon-web-services aws-lambda amazon-dynamodb aws-iot
1个回答
2
投票

每个设备在其内部生长一个项目,其中包含按密钥名称分类的JSON事件数组。

如果我理解上面的内容,那么代码示例......

我会说你做错了。反复更新一些记录并不是一个好主意。除了你似乎认识到的项目中的空间不足之外,你需要支付两倍的I / O(1次读取+ 1次写入)。不知道你从哪里得到了这个想法..

对于物联网设备,似乎您正在处理时间序列数据,因此一定要了解Best Practices for Handling Time-Series Data in DynamoDB

也许只有两个设备才有点过分......但假设你要大幅度扩展......

我的第一个传递将是Partition-Key:“deviceName #date”,排序键:“time”

在这种情况下,“日期”可以是完整的日期,YYYY-MM-DD,或者只是YYYY-MM,甚至是YYYY。将左侧的日期部分移动到排序键。一切都取决于您期望的数据量。要考虑的是给定分区(密钥)只能存储10GB的数据。

如果您可以将数据保留限制为小于10GB的设备,我只需将设备用作分区键,将日期移至排序键。

编辑 关键点

  1. 了解将生成多少数据(书面)
  2. 了解您的应用如何将这些数据呈现给用户
  3. 分区提供10GB的数据存储和3000 RCU / 1000 WCU
  4. 您只能查询()给定的分区。 (PartitionKey ==“Something”)

2非常重要,假设您选择一个给定的时间段(最后24小时,上周,等等),您将要处理给定设备的所有事件,特定类型的所有事件,所有设备的所有事件,或者...... ..

并不是说你不能做到以上所有,但主要的访问是什么?

“永远给我所有数据”每次都是Scan()......当然不是一种经济有效的访问方法。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.