当前位置: 首页 > 知识库问答 >
问题:

DynamoDB表格设计模式:使用utc时间戳分类数据

邓光耀
2023-03-14

我目前正在设计一个DynamoDB模式,我不知道我是否在正确的轨道上。

我需要将以下数据存储到DynamoDB表中:

  • 设备ID(编号)

此DynamoDB表的主要查询是通过deviceID和deviceLogType在一个时间范围内查询数据。是

分区键:deviceLogType\u设备ID

排序键:时间戳

我的问题是:

  • 上述设计正确吗?

共有2个答案

狄飞鹏
2023-03-14

您的方法将适用于您描述的用例。

使用复合分区键是可以接受的。您不能使用分区键的部分匹配执行任何分层查询,但从历史上看,它还有一个额外的好处,即有助于防止热分区。热分区现在已经成为过去,所以你不需要再担心这个了。

我只看到一个可能的问题。如果有多个日志条目具有相同的deviceLogType_deviceIDtimestamp,则最后一个日志条目将覆盖具有相同时间戳的所有以前的条目。为了避免这种情况,可以将时间戳存储为ISO 8601字符串,并在时间戳的末尾附加UUID以防止主键冲突。

乌鸿宝
2023-03-14
deviceLogType_deviceID (hash key)
timestamp (sort key)
deviceID (I would keep this separate for future query possibilities)
deviceLogType (I would keep this separate for future query possibilities)
other misc attributes

使用此模式,您可以使用当前的查询,并将打开仅通过deviceId或deviceLogType进行查询的未来可能性(仅添加索引)。

复合键确实是一种很好的做法(最好有一个分隔符,它不会出现在两个值中),但不确定您指的是哪种继承。

但是,例如,如果我们有Android DeviceLogType

 类似资料:
  • 我知道有人问过这个问题,但没有提供解决方案。Python UTC日期时间对象的ISO格式不包括Z(Zulu或零偏移) 我正在寻找一种在Python中用这种格式生成UTC时间戳的干净方法。我需要的格式是。 具体来说,我需要在最后加上“Z”。Python的不会在末尾附加Z。 请注意,手动添加“Z”不是我可以接受的解决方案。我正在寻找一个干净的方法来做到这一点。 以ISO格式生成带后缀的UTC时间戳的干

  • 我不确定这是否是问这个问题的正确地方。 我是dynamodb的新手,正在尝试创建一个小型web应用程序。我已经阅读了这里的最佳实践http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/BestPractices.html 我的桌子将是: 建筑物 租户(一栋建筑可以有尽可能多的租户,由楼层编号确定) 收件人(每个

  • 我正在尝试使用Joda在一个简单的Java程序中获取UTC时间戳: 程序输出如下: 毫秒值是正确的UTC时间(即用时区确认)第二个值是时区。 我需要的是UTC值不变为(即独立于TZ),用于数据库写入。这可能吗? 我知道是本地日期(GMT-4),是UTC(GMT-0)。日期的输出值如下: 我尝试了所有组合,试图将的UTC值作为java.sql.TimeStamp: 用于测试的打印输出: 第一行是正确

  • 我是DynamoDB的新手。我希望创建一个使用DeviceID作为哈希键、Timestamp作为范围键和一些数据的表。 在SQL中,我们可以为Timestamp使用datetime类型,但在DynamoDB中没有。 对于所选的数据类型,我应该使用什么样的时间戳格式?ISO格式(例如:2016-11-11T17:21:07.5272333Z)或纪元时间(例如:1478943038816)? 我需要在

  • 我想指定特定格式的日志记录时间戳%d{YYYY-MM-dd HH: mm: ss. SSS},但是我操作模式,时间戳显示为2015-10-19 00:47:15,423。 指定%d{ISO8601}或%d{ABSOLUTE}正在生效。我想知道当指定自定义模式时,如何选择时间戳格式。 如果我想将逗号分隔符改为句号,有没有办法做到这一点?

  • 现在,如果我只希望得到时间戳和sensorId,那么我阅读了投影表达式,并尝试执行一个查询(query.json): aws cli命令 给了我: