我是DynamoDB的新手。我希望创建一个使用DeviceID作为哈希键、Timestamp作为范围键和一些数据的表。
{ DeviceID: 123, Timestamp: "2016-11-11T17:21:07.5272333Z", X: 12, Y: 35 }
在SQL中,我们可以为Timestamp使用datetime类型,但在DynamoDB中没有。
对于所选的数据类型,我应该使用什么样的时间戳格式?ISO格式(例如:2016-11-11T17:21:07.5272333Z)或纪元时间(例如:1478943038816)?
我需要在一个时间范围内搜索表格,例如:1/1/2015 10:00:00到晚上31/12/2016 11:00:00
为了能够在发送查询请求时过滤掉结果,我对DateTime使用了纪元格式,它比使用字符串更有效。
想象一下这些场景:过去31天,过去24小时,...再次使用字符串格式是可能的,因为它也有begins_with运算符(请查看AWS文档下面链接中的第三个示例),但数值在排序时的性能方面要高效得多(比较)
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html#Query.KeyConditionExpressions
将日期时间转换为纪元格式很容易
Javascript:
var date = new Date();
var epoch = date.getTime();
// converting back to date-time
var initial_date = new Date(epoch);
数据类型取决于您的要求。
您可以使用ISO格式的字符串,也可以使用epoch格式的数字。
ISO格式(字符串)的优点是可读性,但DynamoDB不支持此格式的生存时间(TTL)。所有过滤器的工作方式都是“介于”和“范围”之间,如ConceptQuest所述。
DynamoDB的生存时间(TTL)允许您定义表中的项何时过期,以便可以从数据库中自动删除它们。
使用epoch格式(Number)的优点是可以使用TTL功能和所有过滤器。
太长,读不下去了
Epoch格式(数字类型)-可以使用Time To Live
ISO格式(字符串类型)-不能使用Time To Live,但更易于阅读
日期或时间戳应使用字符串数据类型。
您可以使用字符串数据类型来表示日期或时间戳。一种方法是使用ISO 8601字符串,如以下示例所示:
2016-02-15
2015-12-21T17:42:34Z
20150311T122706Z
日期或时间戳的DynamoDB数据类型
是的,当日期存储为字符串时,支持范围查询。BETWEEN可用于FilterExpression。我使用下面的过滤器表达式获得了结果中的项目。
FilterExpression无时间:-
FilterExpression : 'createdate between :val1 and :val2',
ExpressionAttributeValues : {
':hkey' : year_val,
':rkey' : title,
":val1" : "2010-01-01",
":val2" : "2010-12-31"
}
FilterExpression与时间:-
FilterExpression : 'createdate between :val1 and :val2',
ExpressionAttributeValues : {
':hkey' : year_val,
':rkey' : title,
":val1" : "2010-01-01T00:00:00",
":val2" : "2010-12-31T00:00:00"
}
数据库值:-
格式1-带时区:
{"Item":{"createdate":{"S":"2010-12-21T17:42:34+00:00"},"title":{"S":"The Big New Movie 2010"},"yearkey":{"N":"2010"},"info":{"M":{"rating":{"N":"0"},"plot":{"S":"Nothing happens at all."}}}}}
格式2-无时区:-
{"Item":{"createdate":{"S":"2010-12-21T17:42:34Z"},"title":{"S":"The Big New Movie 2010"},"yearkey":{"N":"2010"},"info":{"M":{"rating":{"N":"0"},"plot":{"S":"Nothing happens at all."}}}}}
我目前正在设计一个DynamoDB模式,我不知道我是否在正确的轨道上。 我需要将以下数据存储到DynamoDB表中: 设备ID(编号) 此DynamoDB表的主要查询是通过deviceID和deviceLogType在一个时间范围内查询数据。是 分区键: 排序键: 我的问题是: 上述设计正确吗?
现在,如果我只希望得到时间戳和sensorId,那么我阅读了投影表达式,并尝试执行一个查询(query.json): aws cli命令 给了我:
问题内容: 什么是Unix时间戳?在PHP中,使用日期时,该函数输出一些整数值- 那是什么?我尝试了解这一点,但无法获得满意的答案,尤其是为什么我们需要使用转换日期。 问题答案: 什么是Unix时间戳 简而言之,Unix时间戳是一种跟踪时间(以秒为单位)的方式。此计数从1970年1月1日UTC的Unix Epoch开始。因此, Unix时间戳仅仅是特定日期和Unix Epoch之间的秒数 。还应该
BTW在pgadmin中运行完美。 更新:我将其更改为java.sql.timestamp,但仍然不起作用:
我有一个dynamodb表,其结构如下 我想在此表上执行两个主要查询。 获取用户的所有条目- 还有其他建议吗?谢谢你。 2014年5月更新这里发布了一些很好的建议。我仍在尝试如何最好地实现这一点,并希望检查以下方法的优缺点。 我担心这可能会造成很多不一致,好像对usertrips或recenttrips的插入失败了等等。
在DynamoDB中,我有一个表,其中每条记录都有两个日期属性,